使用正则表达式解析规则CF语法(如何使用模板)

时间:2011-12-02 12:13:04

标签: c++ regex grammar boost-regex

我有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

2 个答案:

答案 0 :(得分:0)

正则表达式对于该任务而言不够强大,但是例如在EBFN中用于增强语法的表达性。你可以考虑一个自上而下的解析器(通过递归调用形成)来解析你的输入。这很容易在允许相互递归调用的所有语言中实现。它需要一些带有一些限制的语法(如果你感兴趣的话,请参阅维基百科)。乍一看,你的语法应该是LL(1),即需要1个令牌前瞻。

答案 1 :(得分:0)

您可以使用->|\|拆分每个规则,以获得所需的列表。