2017-11-05 4 views
-1

私はこのEBNF文法を読んで助けが必要でした。私はそれが初めてで、特に最初のことを理解していない、私は2番目のことを理解していますが、最初のもの。EBNF文法を読む

ターム:: =プライマリ{(T_STAR | T_SLASH)期間}

プライマリ:: = T_ICONST | T_SCONST | T_ID | EBNFでT_LPAREN ExprにT_RPAREN

+0

[こちら](http://matt.might.net/articles/grammars-bnf-ebnf/)をご覧ください。素敵で簡単な説明があります。最上位ルールは、シンボル「Term」がシンボル「Primary」に変換された後に、中括弧内のシンボルがゼロ回以上反復されることを意味する。 – jrook

+0

だから、それは何かのようなものになるだろう "Termは..(Every in Primary){(T_STAR | T_SLASH)Term}"と定義されています。 – McDodger

+0

ルールを 'Term' can * go *として'右手側 'に読んでください。それは定義よりもむしろ変換である。 2番目のルールは、シンボル 'Primary'を、ルールの右側の' | 'で区切られたシンボルのいずれかに変換できることを意味します。 – jrook

答えて

-1

は、カール括弧で囲まれた式は、私たちがこのEBNFに応じていくつかのコードを構築することができ、より多くの時間 を省略するか、繰り返し可能性(T_STARは、「/」の文字「*」とT_SLASHを表すことを前提としています)

// Term ::= Primary { (T_STAR|T_SLASH) Term } 
// Primary ::= T_ICONST | T_SCONST | T_ID | T_LPAREN Expr T_RPAREN 
Term ::= Primary * Term 
Term ::= Primary * Primary/Term 
Term ::= Primary * Primary/Primary 
Term ::= ThisIsT_ID * ThisIsT_ID/ThisIsT_ID 
関連する問題