理解java中的语法实现

时间:2015-05-15 02:12:50

标签: java parsing grammar context-free-grammar

我正在java中搜索上下文无关语法的实现,对它们进行一些与编译器设计过程相关的操作,如LL(1),SLR解析和类似的东西,我发现了这个implementation。语法main方法是从我编写语法的文件和解析它的代码中读取语法,问题是我不能以正确的方式编写语法以便代码理解,例如我不能编写epsilon转换每当我写epsilonε时,它都被视为终端。任何人都可以请我帮助我以正确的方式编写语法,以便代码理解例如这个语法:

E  -> T E'
E' -> + T E' | epsilon
T  -> F T'
T' -> * F T' | epsilon
F  -> ( E ) | id 

2 个答案:

答案 0 :(得分:0)

您可以为空字符串设置非终结符,并让该终端生成空字符串文字。例如,EMPTY -> ''以及您想要空字符串转换的任何地方只需使用EMPTY

答案 1 :(得分:0)

如果您查看链接到的代码文件,它会在注释中显示正确使用的符号:

ETF语法:
        E -> E + T
        T -> T * F
        F -> (E) | char

ETF语法的修改版本       是LL(1):
        E -> Te
        e -> +Te | ""
        T -> Ft
        t -> *Ft | ""
        F -> (E) | char

这是直接粘贴到您链接的文件中。这不是答案吗?