将 EBNF 语法转换为上下文无关语法

mut*_*y91 5 java parsing ebnf context-free-grammar

我必须编写一个 JavaCUP 规范,并且我得到了 EBNF 语法。但是,我不知道如何在两者之间进行转换。我听说过基本的想法,但我真的不明白我需要改变什么,“终端”是什么,等等。

任何人都可以解释如何从一种转换为另一种,或者是否有地方我可以阅读它?

Jer*_*ock 5

EBNF 语法与普通 BNF 类似,但具有一些额外的功能(类似于正则表达式运算符)作为语法糖。由于您没有显示语法,我只能猜测您需要脱糖以转换为正常 BNF 的哪些部分,但以下是最常见的部分(对于像 JavaCUP 这样的 LALR 生成器):

B*    becomes Bstar, defined as Bstar ::= epsilon; Bstar ::= Bstar B
B+    becomes Bplus, defined as Bplus ::= B; Bplus ::= Bplus B
B?    becomes Bquestion, defined as Bquestion ::= epsilon; Bquestion ::= B
B | C becomes BorC, defined as BorC ::= B; BorC ::= C
Run Code Online (Sandbox Code Playgroud)

然而,这里的标识符epsilon是您的解析器生成器表示空字符串。