1

文法には4つの語彙要素があります

G = (S, N, T, P)

ここで、G = 文法、S = 開始記号、N = 非終端記号、T = 終端記号、P = 生産規則

私が知っているように、Pは他の語彙素に置き換えることができる語彙素であるため、Nが常に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>

そうですか?

4

2 に答える 2

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

ルールがなければ、文法は役に立たない。

于 2012-06-01T13:19:57.000 に答える
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:これは実際には文法の「語彙要素」についてではありません。文法の定義についてです。

于 2012-05-30T00:16:49.860 に答える