首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BNF中的条目规则位置约定?

BNF中的条目规则位置约定?
EN

Stack Overflow用户
提问于 2013-09-16 06:38:03
回答 1查看 237关注 0票数 1

BNF (或EBNF)语法的第一个(最上面的)规则是否必须表示入口点?例如,在wikipedia BNF page中,下面的美国邮政地址语法将<postal-address>作为第一个派生规则,同时也是入口点:

代码语言:javascript
复制
<postal-address> ::= <name-part> <street-address> <zip-part>

      <name-part> ::= <personal-part> <last-name> <opt-suffix-part> <EOL> 
                    | <personal-part> <name-part>

  <personal-part> ::= <first-name> | <initial> "." 

 <street-address> ::= <house-num> <street-name> <opt-apt-num> <EOL>

       <zip-part> ::= <town-name> "," <state-code> <ZIP-code> <EOL>

<opt-suffix-part> ::= "Sr." | "Jr." | <roman-numeral> | ""
    <opt-apt-num> ::= <apt-num> | ""

我是否可以自由地将<postal-address>规则放在第二个位置,并以下面的替代形式提供语法:

代码语言:javascript
复制
      <name-part> ::= <personal-part> <last-name> <opt-suffix-part> <EOL> 
                    | <personal-part> <name-part>

 <postal-address> ::= <name-part> <street-address> <zip-part>

  <personal-part> ::= <first-name> | <initial> "." 

 <street-address> ::= <house-num> <street-name> <opt-apt-num> <EOL>

       <zip-part> ::= <town-name> "," <state-code> <ZIP-code> <EOL>

<opt-suffix-part> ::= "Sr." | "Jr." | <roman-numeral> | ""
    <opt-apt-num> ::= <apt-num> | ""
EN

回答 1

Stack Overflow用户

发布于 2013-09-16 09:11:34

不,这不是必需的。这只是一些人使用的一种约定。

在实践中,必须指定“目标规则”。我们有一组工具,可以识别目标非终结点的非终结点,您可以按任何顺序提供规则(包括目标规则)。您如何指定它可能超出了语法形式主义,或者可能是语法中包含的特殊规则。

作为一个实际问题,这不是什么大问题(好的,所以一些工具坚持你把所有的目标规则放在第一位,实际上并不是那么难),并且不是很难做好(好的,这个工具检查语法规则的左边,看看它是否匹配目标非终结符)。

当然,你需要知道你的工具是以什么方式工作的,但这需要大约2分钟的时间来弄清楚。

有些工具只允许一个目标规则。作为一个实际问题,real (重新设计,请参阅我的简历)解析器通常发现允许多个规则是有用的(考虑将COBOL解析为“整个程序”和"COPYLIBS"),因此您最终编写(笨拙地IMHO):

代码语言:javascript
复制
 G = G1 | G2 | G3 ... ;
 G1 = ...

在这种情况下。还是没什么大不了的。这些约束都不会影响表现力,也不会耗费你太多的工程时间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18818196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档