实验一、递归下降分析实验
专业 商业软件 姓名 李嘉嘉 学号201506110247
一、 实验目的
练习构造递归下降语法分析程序的方法,熟悉上下文无关文法的使用,加深对课堂教学的理解;提高语法分析方法的实践能力。
二、 实验内容和要求
利用c语言构造语法分析程序。
三、 实验方法、步骤及结果测试
- 原理分析及流程图
对于给定的文法:
E—> a E’
E’—> = T
T—> F F’
F—> ( F’) | F’
F’—> bK
K—> +F’ | -F’| ;
- 主要程序段及其解释:
#include<stdio.h> #include<string.h> char str[50]; //要分析的字符串 int ch=0; void scaner(); void E(); void E2(); void T(); void F(); void F2(); void K(); void error(); main() { int len; printf("请输入算数表达式:"); scanf("%s",str); len=strlen(str); str[len]='#'; E(); strcpy(str,""); } void scaner() { ch++; } void E() { if(str[ch]=='a') { scaner(); printf("E() "); E2(); } else error(); } void E2() { if(str[ch]=='=') { printf("E2() "); scaner(); T(); } else error(); } void T() { printf("T() "); F(); F2(); } void F() { if (str[ch]=='(') { printf("F() "); scaner(); F2(); if(str[ch]==')') { scaner(); F2(); } } else if(str[ch]=='b') { printf("F() "); F2(); } } void F2() { if(str[ch]=='b') { printf("F2() "); scaner(); K(); } } void K() { if(str[ch]=='+'||str[ch]=='-') { printf("K() "); scaner(); F2(); } else if (str[ch]!=';') error(); else if(str[ch]==';') printf("正确"); } void error() { printf(" 错误! "); }
- 运行结果及分析
四、 实验总结
要清楚文法规则。