我正在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
答案 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
。
这是直接粘贴到您链接的文件中。这不是答案吗?