pascal 语法解析器中的递归下降解析

发布于 2024-10-31 14:13:24 字数 491 浏览 1 评论 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();

我怎样才能写第二个例子? 谢谢。

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ぃ弥猫深巷。 2024-11-07 14:13:24

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

variable := expression 

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

编写一个好的表达式解析器对于解析任何有价值的语言至关重要,你会发现表达式无处不在,例如 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

variable := expression 

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文