📄 shiyan2.cpp
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char src[255];
int codelength, cur_pos;
char token;
int match(char);
void error();
int E();
int T();
int G();
int F();
int S();
int match(char expectedToken)
{
if(token == expectedToken)
{
token = src[cur_pos++];
return 1;
}
else
{
error();
printf("in %dth position expected a '%c', but found '%c' instead\n", cur_pos, expectedToken, token);
return 0;
}
}
void error()
{
printf("invalid input\n");
}
int E()
{
if( T() == 0) return 0;
if( G() == 0) return 0;
return 1;
}
int T()
{
if( F() == 0) return 0;
if( S() == 0) return 0;
return 1;
}
int F()
{
if(token == '(')
{
if( !match('(')) return 0;
if( !E()) return 0;
return match(')');
}
else if(token == 'i')
{
return match('i');
}
else
{
error();
printf("expected a '(' or 'i' in the %dth position, but found '%c' instead\n", cur_pos, token);
return 0;
}
}
int S()
{
if(token == '*' || token == '/')
{
if(token == '*')
{
if( !match('*')) return 0;
}
else
{
if( !match('/')) return 0;
}
if( !F()) return 0;
if( !S()) return 0;
}
return 1;
}
int G()
{
if(token == '+' || token == '-')
{
if(token == '+')
{
if( !match('+')) return 0;
}
else
{
if( !match('-')) return 0;
}
if( !T()) return 0;
if( !G()) return 0;
}
return 1;
}
int main()
{
int i, j, len;
// 输入的src字符串是以#结束的包括'+'、'-'、'*'、'/'、'('、')'、'i'的字符串
while(gets(src) != NULL)
{
codelength = strlen(src);
if(codelength == 0)
{
continue;
}
cur_pos = 0;
token = src[cur_pos++];
if(E())
{
if(token != '#' || cur_pos != codelength)
{
printf("invalid input\n");
printf("the input should be terminated by '#' and have no more character after it\n");
}
else
{
printf("valid input\n");
}
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -