我必须编写一个JavaCUP规范,并且我已经获得了EBNF语法。但是,我不知道如何在两者之间进行转换。我听说过基本的想法,但我真的不明白我需要改变什么,“终端”是什么等等。
任何人都可以解释如何从一个转换到另一个,或者在某个地方我可以阅读它吗?
答案 0 :(得分:4)
EBNF语法类似于普通的BNF,但有一些额外的功能(类似于正则表达式运算符)和语法糖。既然你没有显示你的语法,我只能猜测你需要将desugar转换为普通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
此处的epsilon
标识符是您的解析器生成器表示空字符串。