如何将Extended Backus Naur语法转换为其正常表示?

时间:2014-10-13 13:32:14

标签: algorithm parsing grammar context-free-grammar ebnf

我的语法包含括号之间的表达式' {}'表示该表达式的0或更多倍,以及方括号之间的表达式,表示该表达式的1或无,我认为这种语法称为Extended Backus-Naur Form Grammars。 我想将语法转换为正常形式(没有括号或方括号)。

是否有现有算法可以做到这一点?

我知道我可以替代A - >之类的东西。 B [CD] E至A - > BE,A - > BCDE,但我想知道是否存在我可以实现的算法以转换这些表达式。

1 个答案:

答案 0 :(得分:4)

最直接的方法是用新规则替换每个EBNF构造。以下是您可以使用的等价物:

方法

A ::= B [C D] E ;
A ::= B X E ;
X ::= C D | ɛ ;

其中ɛ代表空字符串。

<强>重复

A ::= B {C D} E ;

零次或多次:

A ::= B X E ;
X ::= C D X | ɛ ;

一次或多次:

A ::= B X E ;
X ::= C D | C D X ;

<强>组合

A ::= B (C D) E ;
A ::= B X E ;
X ::= C D ;

递归地应用这些转换,你最终会得到vanilla BNF。