语法的词汇元素

时间:2012-05-30 00:13:00

标签: grammar lexical

语法有4个词汇元素

G = (S, N, T, P)

其中G =语法,S =开始符号,N =非终端,T =终端,P =生产规则

我想知道N是否总是与P相等,因为我知道P是可以替代其他词位的词汇

所以在这个例子中:

<program> --> <stmts>
<stmts> --> <stmt> | <stmt> ; <stmts>
<stmt> --> <var> = <expr>
<var> --> a | b | c | d
<expr> --> <term> + <term> | <term> - <term>
<term> --> <var> | const

S: <program>
N: <program>, <stmts>, <var>, <expr>, <term>
T: ;, a, b, c, d, +, -, const
P: <program>, <stmts>, <var>, <expr>, <term>

是吗?

2 个答案:

答案 0 :(得分:2)

没有。 | N |不一定= | P |。考虑:

<program> --> <stmts>
<stmts> --> <stmt> 
<stmts> -->| <stmt> ; <stmts>
<stmt> --> <var> = <expr>
<var> --> a 
<var> --> b
<var> --> c
<var> --> d
<expr> --> <term> + <term> 
<expr> --> <term> - <term>
<term> --> <var> 
<term> --> const

您的问题是您对语法规则中允许的内容不准确。

您可以强制匹配非终结符的规则数,方法是坚持没有规则具有相同的左侧。要做到这一点,你不能坚持简单的BNF;你必须延长BNF至少更换。

PS:这不是关于语法的“词汇元素”。它只是语法的定义。

答案 1 :(得分:2)

听起来像家庭作业......你基本上是对的,只有P 才是真正的规则

G = (S, N, T, P)

S: <program>
N: <program>, <stmts>, <var>, <expr>, <term>
T: ;, a, b, c, d, +, -, const
P: <program> --> <stmts>, 
   <stmts> --> <stmt> | <stmt> ; <stmts>,
   <stmt> --> <var> = <expr>,
   <var> --> a | b | c | d,
   <expr> --> <term> + <term> | <term> - <term>,
   <term> --> <var> | const

没有规则,语法就没用了。