JavaCUP - 如何将这行EBNF转换为CFG语法?

时间:2011-03-17 04:36:04

标签: context-free-grammar ebnf

我几天前发布了关于将EBNF语法转换为CFG的信息。好吧,我想我现在有了它的主旨,但我对这个特别的一点感到困惑:

你会如何转换:

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

到CFG?

我的尝试是在最后删除*(意味着0或更多)并用递归的方式替换它。

1 个答案:

答案 0 :(得分:0)

你有正确的想法。使用附加变量(递归),您可以这样做:

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

当然这不是唯一的方法,例如您也可以执行Sign -> '*' | '/'之类的操作,并在SignExprList中使用...