2011-04-10 89 views
0

我有一个关于编写递归下降分析来检查pascal语法的问题。 我有这个代码,例如:pascal语法分析器中的递归下降分析

a := c ; 

我看到一个,c是变量。 :=和; - 是终端。这个表达我可以检查。但是,如果我有这样的smth:

a := c + 1 - d ; 

我有问题如何编写此表达式的递归下降解析。

对于第一个例子我在C#写这样的:

if ((!parsing(current_token, "var")) || (!current_token, ":=")) || ( !parsing(current_token, "var") && !parsing(current_token, "const") ) || (!current_token, "term"))) show_error(); 

我怎么能写第二个例子吗? 谢谢。在帕斯卡尔

+0

这是一个家庭作业?请适当标记以便您得到适当的回复 – sehe 2011-04-10 19:26:01

回答

0

变量赋值有以下BNF

variable := expression 

所以,你需要分析以下的:=标记的表达。当你标记代码时,你需要确定什么是有效的下一个标记,所以在这种情况下,你会发现你有一个变量后跟一个:=运算符,所以你现在应该回到你的表达式解析器函数中。

编写一个好的表达式解析器对解析任何有价值的语言都很重要, For循环,如果语句,Case语句等

我做了一个快速BING,发现这个BNF为帕斯卡这可能有助于

http://www2.informatik.uni-halle.de/lehre/pascal/sprache/pas_bnf.html