0

ブール式と算術式の文法を作成しました。次のような算術式を処理したい:

(1+5)+(-3)   

必要なすべての式を処理できます。

私の問題は、ブール式が次のようになる可能性があることです。

( ( (2+2==4) or (3>2) ) and 2==2)

そのため、ある時点で、ブール規則が算術式規則を参照する必要があります。文法があいまいになるため、ブール規則で括弧 () を使用できません。理由はわかりますが、この問題の解決策がわかりません。

4

1 に答える 1

1

GOLD 用に書かれたこの LALR 文法は、あなたを始めるのに役立つはずです:

<Formula>     ::= <BoolConcat> <Formula> | <BoolConcat> 

<BoolConcat> ::= <BoolConcat> 'and' <Comparison> | <Comparison>

<Comparison> ::=  <Comparison> '>' <Expression> | <Expression> 

<Expression> ::= <Expression> '+' <Term> | <Term>

<Term> ::= <Term> '*' <Fact> | <Fact>

<Fact> ::= Integer | '(' <BoolConcat> ')'

bool 部分では、算術文法の典型的な概念が再利用されます。新しいものは何もありません。さまざまな種類のブール演算子の新しいレベルの優先順位のみです。

「==」を「比較」に追加するだけで、「or」を BoolConcat などに追加できます。

于 2013-05-01T11:23:05.470 に答える