Выражение парсера для параметров вызова функций через запятую - PullRequest
0 голосов
/ 03 июля 2010

Я пишу парсер, который может анализировать выражения типа 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?

1 Ответ

1 голос
/ 03 июля 2010

в соответствии с примером из 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).
...