2014-10-01 64 views
0

嗨我遇到了很多麻烦,我遇到了很多网站,但发现这个帖子How to convert BNF to EBNF是非常有用的,但我不知道从哪里开始这个例子。EBNF规则到BNF

<decimal_literal> --> (0|1|2|3|4|5|6|8|9){0|1|2|3|4|5|6|7|8|9|_} 

在这个规则中括号和花括号是metsymbols。它需要超过1条规则,可能需要引入1个或多个新的非终端。

这是我正在使用的教科书http://umsl.edu/~mfrp9/misc/cpl.pdf第131页显示了一个示例,但我无法将其应用于此问题。如果有人可以请一步一步解释这个问题的解决方案,所以我可以学习它来做类似的问题,非常感谢。

+0

您交叉引用的问题是从BNF转换为EBNF。您的问题标题显示您正试图从EBNF转换为BNF。你想要做什么?如果目标是BNF,那么BNF的哪个方言?如果目标是EBNF,那么你的意思是标准EBNF(如ISO 14977:1996)还是其他一些EBNF方言? – 2014-10-01 04:45:12

+0

是的,我正在寻找转换EBNF为BNF,但被告知,如果它可以转换一种方式,那么它可以转换另一种方式。我无法找到EBNF到BNF的任何内容,所以我用这篇文章作为指导。是标准EBNF。 – Noobie 2014-10-01 04:53:48

+0

是的,它可以被转换,但问题是“BNF的哪个方言”?我想这个答案是“在书中”。 – 2014-10-01 04:55:39

回答

0

这看起来似乎是合理的翻译,从本书的p131翻译到BNF。

<decimal_literal> ⟶ <decimal_digit> 
    | <decimal_literal> <decimal_digit_or_underscore> 

<decimal_digit> ⟶ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 

<decimal_digit_or_underscore> ⟶ <decimal_digit> | _ 
+0

我明白,但我们怎么分裂?由于可以省略或重复的表达式可以用大括号{...}表示。 – Noobie 2014-10-01 05:24:10

+0

如果你愿意,你可以自己动手;这是我做这件事的方式。书中p131中的BNF没有显示任何重复使用'{...}';这是一个EBNF符号。由于您正在从EBNF转换为BNF,因此您必须删除像EBNF这样的结构(如{{}}并转换为BNF。 – 2014-10-01 05:24:42

+0

嗨,感谢您的帮助乔纳森,我发布了另一个简单的问题,我想看看我的解决方案是否正确,如果您有第二个问题,请看看。 http://stackoverflow.com/questions/26134894/bnf-to-standard-ebnf – Noobie 2014-10-01 05:51:51