逗号分隔函数调用参数的解析器表达式

发布于 2024-09-07 21:46:58 字数 622 浏览 9 评论 0原文

我正在编写一个解析器,可以解析诸如 myfunc1()myfunc2(param1)myfunc3(param1, param2) 等表达式(数量未知)参数)。现在我正在尝试让我的解析表达式正确。我正在使用 Lemon 解析器生成器。这是我的想法:

application(res) ::= APPLICATIONNAME(a) BRACE_OPEN params BRACE_CLOSE. {res = a;}
application(res) ::= APPLICATIONNAME(a) BRACE_OPEN BRACE_CLOSE. {res = a;}
params ::= PARAM(p). {res = p;}
params ::= SEPARATOR. 

暂时不要介意花括号的内容。 params 定义允许空参数(彼此之间有几个分隔符),目前这是可以的。但是,我如何更改定义以强制使用非空参数,但仍然让所有参数由 SEPARATOR 标记分隔?

Im writing a parser than can parse expressions like myfunc1(), myfunc2(param1) and myfunc3(param1, param2) (with an unknown amount of parameters). Now I'm trying to get my parse expressions right. I'm using the Lemon Parser Generator. Here is what I've come up with:

application(res) ::= APPLICATIONNAME(a) BRACE_OPEN params BRACE_CLOSE. {res = a;}
application(res) ::= APPLICATIONNAME(a) BRACE_OPEN BRACE_CLOSE. {res = a;}
params ::= PARAM(p). {res = p;}
params ::= SEPARATOR. 

Never mind the contents of the curly braces for the moment. The params definition allows empty params (several separators after each other), which is ok at the moment. But how would I have to change the definition to force non-empty parameters but still have all parameters separated by the SEPARATOR token?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

终遇你 2024-09-14 21:46:58

遵循 http://www.hwaci.com/sw/lemon/lemon 中的示例。 html 读取

list ::= list element.      // left-recursion.  Good!
list ::= .

list 为空(第二条规则)或包含至少一个 element 的位置,各个 element 分隔开通过空格,我想说你想要

params ::= params SEPARATOR PARAM(p).
params ::= PARAM(p).

following the example from http://www.hwaci.com/sw/lemon/lemon.html which reads

list ::= list element.      // left-recursion.  Good!
list ::= .

where list is either empty (the second rule) or contains at least one element, with individual element s separated by whitespace, i'd say you want

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