【问题标题】:Parser expression for comma-separated function call parameters逗号分隔的函数调用参数的解析器表达式
【发布时间】:2010-07-03 08:07:08
【问题描述】:

我正在编写一个解析器,它可以解析 myfunc1()myfunc2(param1)myfunc3(param1, param2) 等表达式(参数数量未知)。现在我正试图让我的解析表达式正确。我正在使用Lemon Parser Generator。这是我想出的:

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 标记分隔?

【问题讨论】:

    标签: parsing function optional-parameters bnf lemon


    【解决方案1】:

    遵循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).
    

    【讨论】:

    • 如果我想允许空参数,我会添加行 params ::= SEPARATOR 吗?
    猜你喜欢
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多