pascal 语法解析器中的递归下降解析
我有一个关于编写递归下降解析来检查帕斯卡语法的问题。 例如,我有这样的代码:
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();
我怎样才能写第二个例子? 谢谢。
I have got one question about writing recursive descent parsing for checking pascal grammar.
I have got this code for example:
a := c ;
I see that a,c is variables. := and ; - is terminals. This expression I can check. But if I have got smth like this:
a := c + 1 - d ;
I have got problems how to write recursive descent parsing for this expression.
For first example I wrote on C# like this:
if ((!parsing(current_token, "var")) || (!current_token, ":=")) || ( !parsing(current_token, "var") && !parsing(current_token, "const") ) || (!current_token, "term"))) show_error();
How can I write for second example?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Pascal 中的变量赋值具有以下 BNF
因此您需要解析
:=
标记后面的表达式。当您对代码进行标记时,您需要确定什么是有效的下一个标记,因此在这种情况下,您会看到有一个变量后跟 := 运算符,因此您现在应该递归到表达式解析器函数。编写一个好的表达式解析器对于解析任何有价值的语言至关重要,你会发现表达式无处不在,例如 For 循环、If 语句、Case 语句等。
我快速进行了 BING,发现了 Pascal 的 BNF,这可能会有所帮助
http://www2.informatik.uni-halle.de/lehre/pascal/sprache/pas_bnf .html
Variable assignment in Pascal has the following BNF
So you need to parse the expression following the
:=
token. As you tokenize the code you need to determine what is valid as the next token, so in this case you see that you have a variable followed by a := operator so you should now recurse into your expression parser function.Writing a good expression parser is critical for parsing any language of value, you will find expressions everywhere e.g. For loops, If statements, Case statements etc.
I did a quick BING and found this BNF for Pascal which might help
http://www2.informatik.uni-halle.de/lehre/pascal/sprache/pas_bnf.html