0

我有一个关于编写递归下降解析来检查帕斯卡语法的问题。例如,我有此代码:

a := c ;

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

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();

我该如何写第二个例子?谢谢。

4

1 回答 1

0

Pascal 中的变量赋值具有以下 BNF

variable := expression 

所以需要解析:=token后面的表达式。当您对代码进行标记时,您需要确定下一个标记是有效的,因此在这种情况下,您会看到一个变量后跟一个 := 运算符,因此您现在应该递归到表达式解析器函数中。

编写一个好的表达式解析器对于解析任何有价值的语言都是至关重要的,你会发现到处都有表达式,例如 For 循环、If 语句、Case 语句等。

我做了一个快速的 BING 并找到了这个用于 Pascal 的 BNF,这可能会有所帮助

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

于 2011-04-10T19:12:39.047 回答