语法有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>
是吗?
答案 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
没有规则,语法就没用了。