Может ли CSP (передача последовательных процессов) генерироваться с помощью ANTLR? - PullRequest
2 голосов
/ 19 марта 2011

Могу ли я написать синтаксический анализатор для передачи последовательных процессов (CSP) в ANTLR? Я думаю, что он использует левую рекурсию, как в заявлении

VMS = (coin → (choc → VMS))

Полная языковая спецификация может быть найдена в CSPM: Справочник Manua так что это не LL грамматика. Я прав?

Ответы [ 3 ]

2 голосов
/ 19 марта 2011

В общем, даже если у вас есть грамматика с левой рекурсией, вы можете реорганизовать грамматику, чтобы удалить ее.Так что ANTLR вполне вероятно сможет обработать вашу грамматику.Нет никакой априорной причины, по которой вы не можете написать грамматику CSP для ANTLR.

Подходит ли тот, который у вас есть, другой вопрос.

Если ваша цитируемая фраза является правилом грамматики, она нене оставил рекурсии.(Если это так, я не понимаю синтаксис ваших правил грамматики, особенно почему круглые скобки [терминалы?] Были бы несбалансированными; это довольно нерационально.) Таким образом, ANTLR должен иметь возможность обрабатывать его, по модулю преобразовывая его в правило грамматики ANTRL.синтаксис.

Вы не показали остальную часть грамматики, поэтому у вас не может быть мнения об остальном.

1 голос
/ 19 марта 2011

CSP определенно возможны в ANTLR, проверьте http://www.carnap.info/ для примера.

1 голос
/ 19 марта 2011

В приведенном выше случае не осталось рекурсии. Это будет выглядеть примерно так. Обратите внимание, что это упрощенная версия, CSP намного сложнее. Я просто показываю, что это возможно.

assignment : PROCNAME EQ process
           ;
process : LPAREN EVENT ARROW process RPAREN
        | PROCNAME
        ;

Кроме того, вы можете выделить левую рекурсию с помощью функции ANTLRWorks «Удалить левую рекурсию».

...