0

几天前我发布了关于将 EBNF 语法转换为 CFG 的帖子。好吧,我想我现在已经掌握了它,但我有点坚持这个特定的:

你会如何转换:

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

到CFG?

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

4

1 回答 1

0

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

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

当然这不是唯一的方法,例如你也可以做类似的事情Sign -> '*' | '/',并在SignExprList...中使用它

于 2011-10-04T20:39:10.373 回答