22

この Web ページの「優先度の上昇」セクションに記載されている説明に従って、さまざまな単項プレフィックスおよびバイナリ インフィックス演算子を使用した優先度上昇アルゴリズムを使用する算術評価器を実装しました。三項演算子 (つまり、三項条件演算子) も含めたいと思い?:ます。

Web ページで指定されているアルゴリズムは、次の文法を使用します。

E --> Exp(0) 
Exp(p) --> P {B Exp(q)} 
P --> U Exp(q) | "(" E ")" | v
B --> "+" | "-"  | "*" |"/" | "^" | "||" | "&&" | "="
U --> "-"

この文法に三項演算子を組み込むにはどうすればよいですか?

4

3 に答える 3

3

疑問符よりも優先順位が低くなるようにコロンを定義します。言い換えれば、?b : c は (a ? b) : c として解析されます。これにより、パーサーは (if/then/empty-else) 抽象構文ノードを構築し、「: 演算子」によって操作されて、目的の else コンポーネントを提供します。

優先関係は、オペレーターの構成可能性も保持します。たとえば、? b:c? d : e は、(a ? b) : (c ? d) : e として解析されます。

お役に立てれば。

于 2013-09-10T08:15:01.850 に答える