正在加载图片...
108 编译原理及实践 China-pub.co 下载 match (token); term; end while; end exp; 相似地,term的EBNF规则: em一factor{mulop factor】 就变成代码 procedure term; begin factor; while token =do natch(token): factor; end while; end term; 在这里当分隔过程时,删去了非终结符addop和mulop,这是因为它们仅有匹配算符功能 addop→+- mulop→* 这里所做的是ep和1erm中的匹配。 这个代码有一个问题:由花括号(和原始的BNF中的显式)表示的左结合是否仍然保留。 例如,假设要为本书中简单整型算术的文法编写一个递归下降程序计算器,就可通过在循环 中轮转来完成运算,从而就保证了该运算是左结合(现在假设分析过程是返回一个整型结果 的函数): function exp:integer var temp:integer; begin temp:=term; while token =+or token =-do case token of +match (+ temp:=temp +term -match (-) temp :temp-term; end case; end while; return temp; end exp; trm与之也类似。我们已利用这种方法创建了一个可运行的简单计算器,程序清单4-1中有它match (t o k e n) ; term ; end while ; end exp ; 相似地,t e r m的E B N F规则: term → factor { mulop factor } 就变成代码 p ro c e d u re term ; b e g i n factor ; while token = * d o match (t o k e n) ; factor ; end while ; end term ; 在这里当分隔过程时,删去了非终结符 addop 和m u l o p,这是因为它们仅有匹配算符功能: addop → + | - mulop → * 这里所做的是e x p和t e r m中的匹配。 这个代码有一个问题:由花括号(和原始的 B N F中的显式)表示的左结合是否仍然保留。 例如,假设要为本书中简单整型算术的文法编写一个递归下降程序计算器,就可通过在循环 中轮转来完成运算,从而就保证了该运算是左结合(现在假设分析过程是返回一个整型结果 的函数): function exp : integer ; var temp : integer ; b e g i n temp := term ; while token = + or token = - do case token o f + : match (+) ; temp := temp + term ; - : match (-) ; temp := temp - term ; end case ; end while ; return temp ; end exp ; t e r m与之也类似。我们已利用这种方法创建了一个可运行的简单计算器,程序清单 4 - 1中有它 1 0 8 编译原理及实践 下载
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有