java – 将EBNF语法转换为无上下文语法
作者:互联网
我必须编写一个JavaCUP规范,并且我已经获得了EBNF语法.但是,我不知道如何在两者之间进行转换.我听说过基本的想法,但我真的不明白我需要改变什么,什么是“终端”等等.
任何人都可以解释如何从一个转换为另一个,或者是否有某个地方我可以阅读它?
解决方法:
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
这里的epsilon标识符是你的解析器生成器表示空字符串.
标签:java,parsing,context-free-grammar,ebnf 来源: https://codeday.me/bug/20190626/1296840.html