实用文档
void Error() //出错函数 {
cout<<\语法错误\}
void T(void) //子程序T {
F(); //进入子程序F if(ch=='*') { i++; ch=str[i];
T();} //递归子程序T }
void F(void) //子程序F { if(ch=='(') {
i++; ch=str[i];
E(); //回到子程序E if(ch==')') { i++; ch=str[i]; }
else {Error();a=0;} }
else if((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')) { i++; ch=str[i]; } else { Error(); a=0; } }
void E(void){ //子程序E T(); if(ch=='+') { i++;
ch=str[i];
标准
实用文档
E(); //递归子程序E } }
int main() //主函数 {
system(\
cout<<\
cout<<\ 输入表达式以#号结束 |\cout<<\cin>>str; ch=str[0];
while(ch!='#') { E(); if(!a) break; }
if((ch=='#') && ( a != 0)) //遇#且a不等于零时语法正确 cout<<\语法正确\return 0; }
程序运行结果:(截屏)
LL(1)分析法:
标准
实用文档
递归下降:
思考问题回答:
语法分析的任务是什么?
语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,语法分析程序判断源程序在结构上是否正确。通过接受词法分析程序识别出来的单词符号串,判断它们是否由某种语言的文法产生,即判断被识别符号串是否为某语法成分,同时进行语法检查,为后面的语义分析和代码生成作准备。
标准