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

发布于 2024-10-24 01:12:58 字数 243 浏览 6 评论 0原文

几天前我发布了有关将 EBNF 语法转换为 CFG 的文章。好吧,我想我现在已经掌握了它的要点,但我对这个特定的问题有点困惑:

你会如何转换:

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

到 CFG?

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

I posted a couple days ago about converting EBNF grammar to CFG. Well I think I have the jist of it now, but I'm a bit stuck on this particular one:

How would you convert:

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

to CFG?

My attempt here is to get rid of the * at the end (which means 0 or more) and replace it with a recursive way of writing it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

2024-10-31 01:12:58

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

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

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

You have the correct idea. Using an additional variable (recursive), you can do it like this:

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

Of course this isn't the only way, for example you could also do something like Sign -> '*' | '/', and use that in SignExprList...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文