有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

有谁能解释一下如何从一个转换到另一个,或者是否有我可以阅读的地方


共 (1) 个答案

  1. # 1 楼答案

    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标识符表示空字符串