我有CF语法。规则如下:
S->一种| AS
A-> AB | A | B
B-&GT,B
我想使用正则表达式解析这些规则。
我的正则表达式:
\ B([A-Z]) - >(?:?([A-ZA-Z] +)\ |)+
对于:“A-> AB | a | b”结果:
0:A-> AB | a | b
1:A
2:b
但是我想:
0:A-> AB | a | b
1:A
2:AB
3:a
4:b
答案 0 :(得分:0)
正则表达式对于该任务而言不够强大,但是例如在EBFN中用于增强语法的表达性。你可以考虑一个自上而下的解析器(通过递归调用形成)来解析你的输入。这很容易在允许相互递归调用的所有语言中实现。它需要一些带有一些限制的语法(如果你感兴趣的话,请参阅维基百科)。乍一看,你的语法应该是LL(1),即需要1个令牌前瞻。
答案 1 :(得分:0)
您可以使用->|\|
拆分每个规则,以获得所需的列表。