0

我有 CF 语法。它的规则如下:

S->a|AS

A->AB|a|b

B->b

我想使用正则表达式解析这些规则。

我的正则表达式:

\b([AZ])->(?:([A-Za-z]+)\|?)+

对于: "A->AB|a|b" 结果:

0:A->AB|a|b

1:一个

2:乙

但我想要这个:

0:A->AB|a|b

1:一个

2:AB

3:一个

4:乙

4

2 回答 2

0

您可以将每个规则拆分->|\|为所需的列表。

于 2011-12-02T12:36:43.440 回答
0

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

于 2011-12-02T12:22:48.670 回答