私はIronyと言語実装全体のシバンに慣れていないので、 Ironyソースに付属しているExpressionEvaluatorサンプルで遊んでいます。これは、私が取り組んでいるプロジェクトのニーズに(ほぼ)適合しているようです。
ただし、ブール値もサポートしたいので、二項演算子のリストに比較演算子を追加しました。
BinOp.Rule = ToTerm("+") | "-" | "*" | "/" | "**"
| "==" | "<=" | ">=" | "<" | ">" | "!=" | "<>"; // added comparison operators
これが私が達成しようとしていることの例です:
x = 1
y = 2
eval = x < 2
eval2 = y < x
bool = true
bool2 = (eval == eval2)
二項演算子が追加されているため、上記の解析に成功します。ただし、コードをコンパイルして実行すると、最後の2行で失敗します。
- 行は次の
bool = true
メッセージで失敗します:エラー:変数trueが定義されていません。(5:8)に。trueとfalseを定数として定義するにはどうすればよいですか? - 行は次の
bool2 = (eval == eval2)
メッセージで失敗します:エラー:演算子'=='はタイプSystem.BooleanおよびSystem.Booleanに対して定義されていません。(6:15)に。
編集:両方の問題を解決しました。以下の回答を参照してください。