0

myfunc1()、、myfunc2(param1)およびmyfunc3(param1, param2)(パラメーターの量が不明な)などの式を解析できるパーサーを作成しています。今、私は自分の解析式を正しくしようとしています。レモンパーサージェネレーターを使用しています。これが私が思いついたものです:

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トークンで区切られていますか?

4

1 に答える 1

1

http://www.hwaci.com/sw/lemon/lemon.htmlの例に従って

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

ここで、listは空(2番目のルール)であるか、少なくとも1つ含まれておりelement、個々elementのsは空白で区切られています。

params ::= params SEPARATOR PARAM(p).
params ::= PARAM(p).
于 2010-07-03T08:46:24.423 に答える