资源描述:
《编译原理上机实践之语法分析器》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、语法分析器《编译原理》上机作业(2)14.2语法分析器的构造语法分析器的任务:分析语言的结构为句子构造语法树;检查输入序列中的错误。主要工作:设计函数绘图语言的文法,使其适合递归下降分析;设计语法树的节点,用于存放表达式的语法树;设计递归下降子程序,分析句子并构造表达式的语法树;设计测试程序和测试用例,检验分析器是否正确。24.2.1函数绘图语言的文法<1>文法Program→ε
2、ProgramStatementSEMICOStatement→OriginStatment
3、ScaleStatment
4、RotStatment
5、ForStatmentOriginStatme
6、nt→ORIGINISL_BRACKETExpressionCOMMAExpressionR_BRACKETScaleStatment→SCALEISL_BRACKETExpressionCOMMAExpressionR_BRACKETRotStatment→ROTISExpression-------函数f(t)=t的图形originis(200,300);--设置原点的偏移量rotispi/6;--设置旋转角度scaleis(2,1);--设置横、纵坐标比例forTfrom0to200step1draw(t,0);--横坐标forTfrom0to180step1dr
7、aw(0,t);--纵坐标forTfrom0to150step1draw(t,t);--f(t)=t3Expression→ExpressionPLUSExpression
8、ExpressionMINUSExpression
9、ExpressionMULExpression
10、ExpressionDIVExpression
11、PLUSExpression
12、MINUSExpression
13、ExpressionPOWERExpression
14、CONST_ID
15、T
16、FUNCL_BRACKETExpressionR_BRACKET
17、L_BRACKETExpressionR_BRACK
18、ET<1>文法(续)ForStatment→FORTFROMExpressionTOExpressionSTEPExpressionDRAWL_BRACKETExpressionCOMMAExpressionR_BRACKET4<2>改写文法为无二义文法表达式中的运算结合性非终结符PLUS、MINUS(二元)左结合ExpressionMUL、DIV左结合TermPLUS、MINUS(一元)右结合FactorPOWER右结合Component(原子表达式)无AtomExpression→ExpressionPLUSExpression
19、ExpressionMINUSExp
20、ression
21、ExpressionMULExpression
22、ExpressionDIVExpression
23、PLUSExpression
24、MINUSExpression
25、ExpressionPOWERExpression
26、CONST_ID
27、T
28、FUNCL_BRACKETExpressionR_BRACKET
29、L_BRACKETExpressionR_BRACKET5Expression的改写Expression→ExpressionPLUSExpression
30、ExpressionMINUSExpression引入Term提高算符的优先级,保留左递归使得算符左结合:
31、Expression→ExpressionPLUSTerm
32、ExpressionMINUSTerm
33、TermTerm对应运算MUL和DIV,于是有:Term→TermMULTerm
34、TermDIVTerm反复改写,最终得到:Expression对应最低优先级的运算,PLUS和MINUS:6无二义的表达式文法ExpressionPLUS、MINUSTermMUL、DIVFactorPLUS、MINUSComponentPOWERAtom(原子表达式)Expression→ExpressionPLUSTerm
35、ExpressionMINUSTerm
36、TermTerm→Ter
37、mMULFactor
38、TermDIVFactor
39、FactorFactor→PLUSFactor
40、MINUSFactor
41、ComponentComponent→AtomPOWERComponent
42、AtomAtom→CONST_ID
43、T
44、FUNCL_BRACKETExpressionR_BRACKET
45、L_BRACKETExpressionR_BRACKET7<3>消除左递归和提取左因子消除program产生式的左递归Program→ProgramStatementSEMICO
46、εProgram→εProgram’Program’→Sta