JavaCUP - Как преобразовать эту строку EBNF в грамматику CFG? - PullRequest
0 голосов
/ 17 марта 2011

Я опубликовал пару дней назад о преобразовании грамматики EBNF в CFG. Ну, я думаю, что у меня есть суть этого сейчас, но я немного застрял на этом конкретном:

Как бы вы конвертировали:

MultiplicativeExpr -> PrimaryExpr (( '*' | '/' ) PrimaryExpr)*

в CFG?

Моя попытка здесь состоит в том, чтобы избавиться от * в конце (что означает 0 или более) и заменить его рекурсивным способом написания.

1 Ответ

0 голосов
/ 05 октября 2011

У вас правильная идея.Используя дополнительную переменную (рекурсивную), вы можете сделать это следующим образом:

MultiplicativeExpr -> PrimaryExpr SignExprList
SignExprList -> ε | '*' PrimaryExpr SignExprList | '/' PrimaryExpr SignExprList

Конечно, это не единственный способ, например, вы также можете сделать что-то вроде Sign -> '*' | '/' и использовать это вSignExprList ...

...