资源描述:
《语法分析器的构造》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、4.2语法分析器的构造主要工作:1.设计函数绘图语言的文法,使适合递归下降分析;2.设计语法树的节点,用于存放表达式的语法树;3.设计递归下降子程序,分析句子并构造表达式的语法树;4.设计测试程序和测试用例,检验分析器是否正确。语法分析器的任务:分析语言的结构,构造语法树14.2.1函数绘图语言的文法Program→ε
2、ProgramStatementSEMICOStatement→OriginStatment
3、ScaleStatment
4、RotStatment
5、ForStatmentOriginStatment→ORIGINISL_BRACKETExpressionCOMMA
6、ExpressionR_BRACKETScaleStatment→SCALEISL_BRACKETExpressionCOMMAExpressionR_BRACKETRotStatment→ROTISExpressionForStatment→FORTFROMExpressionTOExpressionSTEPExpressionDRAWL_BRACKETExpressionCOMMAExpressionR_BRACKET2Expression→ExpressionPLUSExpression
7、ExpressionMINUSExpression
8、ExpressionMULExp
9、ression
10、ExpressionDIVExpression
11、PLUSExpression
12、MINUSExpression
13、ExpressionPOWERExpression
14、CONST_ID
15、T
16、FUNCL_BRACKETExpressionR_BRACKET
17、L_BRACKETExpressionR_BRACKET3<2>改写文法为无二义文法表达式中的运算结合性非终结符-----------------------------------------------PLUS、MINUS(二元)左结合ExpressionMUL、DIV左结合TermPLUS、MINUS(一元)右
18、结合FactorPOWER右结合Component(原子表达式)无Atom4Expression的改写Expression对应最低优先级的运算,PLUS和MINUS:Expression→ExpressionPLUSExpression
19、ExpressionMINUSExpression引入Term提高算符的优先级,保留左递归使得算符左结合:Expression→ExpressionPLUSTerm
20、ExpressionMINUSTerm
21、TermTerm对应运算MUL和DIV,于是有:Term→TermMULTerm
22、TermDIVTerm反复改写,最终得到:5无二义的表达式
23、文法Expression→ExpressionPLUSTerm
24、ExpressionMINUSTerm
25、TermTerm→TermMULFactor
26、TermDIVFactor
27、FactorFactor→PLUSFactor
28、MINUSFactor
29、ComponentComponent→AtomPOWERComponent
30、AtomAtom→CONST_ID
31、T
32、FUNCL_BRACKETExpressionR_BRACKET
33、L_BRACKETExpressionR_BRACKETPLUS、MINUSExpressionMUL、DIVTermPLUS、MINUSFactorP
34、OWERComponent(原子表达式)Atom6<3>消除无左递归和提取左因子(消除Program、Expression和Term的左递归)Program→StatementSEMICOProgram
35、ε改写Expression→TermExpression'Expression'→PLUSTermExpression'
36、MIMUSTermExpression'
37、εTerm→FactorTerm'Term'→MULFactorTerm'
38、DIVFactorTerm'
39、ε(Factor和Componet对应的运算是右结合,故无左递归)7<4>改写左结合的产生式为EBNF形式(避
40、免子程序调用)Program→StatementSEMICOProgram
41、ε的子程序:voidProgram(){if(token==NONTOKEN)return;Statement();MathchToken(SEMICO);Program();}Program→{StatementSEMICO}的子程序:voidProgram(){while(token!=NONTOKEN){Statement();MathchToken(SEMICO);}}文法的改写:8改写Expression产