您好,欢迎访问三七文档
抽象语法树语法分析树SS+E(S)S+E15ES+E4句子:1+(2+(3+4))+5文法:SE|S+EE(S)|NumberS+EE2(S)E3语法分析树SS+E(S)S+E15ES+E4为了表达这个表达式,是否真的需要如此复杂的树结构?S+EE2(S)E3抽象语法树(ASTs)++51+2+34SS+E5S+E1(S)S+EE4S+E2E(S)3E为了表达这个表达式,是否真的需要如此复杂的树结构?NO!只需要使用AbstractSyntaxTrees来替代.如何来构建AST?构建抽象语法树的最佳途径是伴随句子的语法分析过程;为每个“重要的”产生式规则构建内部的树结点,使用指针指向其叶子结点规则。需要能够掠过那些不重要的规则(例如一个直接的转换)或者以后的分析中不要的部分(括号;变量声名等)AST的结构AST的叶子结点是什么?变量variable数字number等一般来说:一个文法规则,如果右侧产生式仅仅含有终结符,其将会成为AST的叶子结点。这些规则将会首先进行归约。抽象语法树画这颗语法分析树1+2*(3+4)+5SE|S+EET|E*TT(S)|NumberSS+ES+E15ES+ETE*TT2(S)ETTT34抽象语法树画这颗语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|Number在AST中,哪些规则应该被表示出来?SS+ES+E15ES+ETE*TT2(S)ETTT34抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|Number只有Nnumber应该被看作一个叶子结点。SS+ES+E15ES+ETE*TT2(S)ETTT34抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|Number只有Nnumber应该被看作一个叶子结点。SS+ES+E15ES+ETE*TT2(S)ETTT34抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|Number不重要的运算符在AST中不出现。SS+ES+E15ES+ETE*TT2(S)ETTT34抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|Number不重要的运算符在AST中不出现。SS+ES+E15ES+ETE*TT2(S)ETTT34抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|Number不重要的运算符在AST中不出现。.SS+ES+E15ES+ETE*TT2(S)ETTT34抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|Number从AST中可以移除这些内容,直接从子树连接到父亲结点。SS+ES+E15ES+ETE*TT2(S)ETTT34抽象语法树Drawthetreefor:1+2*(3+4)+5SE|S+EET|E*TT(S)|Number从AST中可以移除这些内容,直接从子树连接到父亲结点。SS+ES+E15S+EE*T234抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|Number产生式右部具有几个算符的规则可以归约为一个非终结符,使用一个结点表示。SS+ES+E15S+EE*T234抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|Number产生式右部具有几个算符的规则可以归约为一个非终结符,使用一个结点表示。SS+ES+E15S+EE*T234抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|NumberSS+ES+E15S+EE*T234抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|NumberSS+E15S+EE*+234抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|NumberSS+E15S+EE*+234抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|NumberSS+E15S+*+234抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|NumberSS+E15S+*+234抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|NumberS++E15*+234抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|NumberS++E15*+234抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|Number++15*+234抽象语法树1+2*(3+4)+5SE|S+EET|E*TT(S)|NumberDONE!++15*+234从抽象语法树如何进行翻译LocationExid=xAddExprleftrightValueExprval=42visitvisit(left)visit(right)TR[x+42,T,A]Load_Memx,R1Load_Const42,R2Add_RegR2,R1Load_Memx,R1Load_Const42,R2Add_RegR2,R1T=R1,A={R2,…,Rn}T=R1,A={R2,…,Rn}T=R2,A={R3,…,Rn}
本文标题:抽象语法树
链接地址:https://www.777doc.com/doc-3858297 .html