Parsing BNF中的输入规则位置约定?

Parsing BNF中的输入规则位置约定?,parsing,grammar,bnf,ebnf,formal-languages,Parsing,Grammar,Bnf,Ebnf,Formal Languages,BNF(或EBNF)语法的第一条(最上面的)规则必须表示入口点吗?例如,从中,下面的美国邮政地址语法将作为第一个派生规则,同时也是入口点: <postal-address> ::= <name-part> <street-address> <zip-part> <name-part> ::= <personal-part> <last-name> <opt-suffix-part> &l

BNF(或EBNF)语法的第一条(最上面的)规则必须表示入口点吗?例如,从中,下面的美国邮政地址语法将
作为第一个派生规则,同时也是入口点:

<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> | ""
:=
::=     
|  
::=  |  "." 
::=    
::=  ","   
::=“Sr.”|“Jr.”|
::=  | ""
我是否可以将
规则放在第二个位置,并以以下替代形式提供语法:

      <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> | ""
:=
|  
::=   
::=  |  "." 
::=    
::=  ","   
::=“Sr.”|“Jr.”|
::=  | ""

不,这不是要求。这只是一些人使用的惯例

在实践中,必须指定“目标”规则。我们有一套工具,其中一个可以识别非终结符,即目标非终结符,并且您可以按任意顺序提供规则(包括目标规则)。你如何指定它可能不属于语法形式主义,也可能是语法中包含的特殊规则

实际上,这没什么大不了的(好吧,所以一些工具坚持你把所有的目标规则放在第一位,实际上没有那么难),而且做得很好也没有那么难(好吧,工具检查语法规则的左侧,看它是否匹配目标非终结符)

当然,您需要知道工具的工作方式,但这需要大约2分钟的时间来确定

有些工具只允许一个目标规则。实际上,real(re-engineering,参见my bio)解析器经常发现允许多个规则(考虑将COBOL解析为“整个程序”和“CopyLib”)非常有用,因此您最终会编写(笨拙的IMHO):


在这种情况下。还是没什么大不了的。所有这些约束都不会影响表达能力,事实上也不会花费您大量的工程时间。

不,这不是要求。这只是一些人使用的惯例

在实践中,必须指定“目标”规则。我们有一套工具,其中一个可以识别非终结符,即目标非终结符,并且您可以按任意顺序提供规则(包括目标规则)。你如何指定它可能不属于语法形式主义,也可能是语法中包含的特殊规则

实际上,这没什么大不了的(好吧,所以一些工具坚持你把所有的目标规则放在第一位,实际上没有那么难),而且做得很好也没有那么难(好吧,工具检查语法规则的左侧,看它是否匹配目标非终结符)

当然,您需要知道工具的工作方式,但这需要大约2分钟的时间来确定

有些工具只允许一个目标规则。实际上,real(re-engineering,参见my bio)解析器经常发现允许多个规则(考虑将COBOL解析为“整个程序”和“CopyLib”)非常有用,因此您最终会编写(笨拙的IMHO):


在这种情况下。还是没什么大不了的。所有这些约束都不会影响表达能力,事实上也不会花费您大量的工程时间。

我同意您的看法。我现在还记得上下文无关语法是一个4元组,其中一个条目是start symbol.Done。我仍然很好奇,假设只有一个目标规则,这样的工具是否总能识别它。如果你的语法是关联的,当然。这是其他规则中唯一没有使用的非终结符。好的,谢谢。我们多久才能给这个工具一个问题?已经有两个进球规则了吗?输入字符串不能用于帮助解决哪个是相关的目标规则吗?对不起,我不理解你的最后一个问题。“给那个工具…”哪个工具?有很多语法处理工具;你现在可以给他们所有的语法来处理。“已经有两个目标规则了吗?”我不知道其他的工具,但我知道我们很乐意接受您想要提供的任意多的目标规则。“可以输入字符串…”什么输入字符串?语法分析工具?是的,您可以定义您的工具来检测“目标”非终结符,因为它是其他规则中唯一未使用的工具。我同意您的看法。我现在还记得上下文无关语法是一个4元组,其中一个条目是start symbol.Done。我仍然很好奇,假设只有一个目标规则,这样的工具是否总能识别它。如果你的语法是关联的,当然。这是其他规则中唯一没有使用的非终结符。好的,谢谢。我们多久才能给这个工具一个问题?已经有两个进球规则了吗?输入字符串不能用于帮助解决哪个是相关的目标规则吗?对不起,我不理解你的最后一个问题。“给那个工具…”哪个工具?有很多语法处理工具;你现在可以给他们所有的语法来处理。“已经有两个目标规则了吗?”我不知道其他的工具,但我知道我们很乐意接受您想要提供的任意多的目标规则。“可以输入字符串…”什么输入字符串?语法分析工具?是的,您可以定义您的工具来检测“目标”非终结符,因为它是其他规则中唯一未使用的。
 G = G1 | G2 | G3 ... ;
 G1 = ...