のは、我々はこの文法バイソンの文法から変数を始めるには?
start:
expressions;
expressions:
expressions expression
| expression
;
expression:
expression NAME value { float $2 = $3;}
| NAME value { float $1 = $2;}
;
value:
INT '.' INT
;
とこの文法のために私たちは、この入力
これは、このような私たちの文法(フロートA = 2.0によって解釈されるべきである2.0 B 3.0
を適用してい想像してみましょう; float b = 3.0;)
私の目的は、本当にいくつかの変数を名前で宣言し、コンストラクタでmyClass NAME(value)のようなことをすることです。値は浮動小数点数です。
問題は、私のexempleの値のような文法上のブロックの全体的な価値を得る方法と、入力ファイルで各行で変更される変数名の宣言をどうやって作るのか分からないジェネリックfloat a = $ 1;
私はすでにあなたがC++での変数名の代わりに文字列を使用することはできません私の名前と値
と浮動小数点値の生成方法新しいユニオンを作成し、浮動小数点型の値の型を作成するようにしますか? – Gengetsu
@Gengetsu 2つの整数から浮動小数点数を作成するには、それらの整数をドットの間の文字列に貼り付け、その文字列に 'strtod'を使います。これは、あなたのレクサーが 'int'ではなくINTトークンの文字列値を作成すると仮定しています。レクサーから 'int'を取得した場合、正しく動作する方法はありません(小数部の先頭の0を失います)。より良い選択肢は、おそらくレクサーが浮動小数点のための単一のトークンをとにかく生成させることだけだろう。私はあなたのコメントの第二部分を理解していない。 – sepp2k
ok、私のコメントの2番目の部分は、INT(int)を浮動小数点数に変換する方法です。既に浮動小数点数に変換できませんでした。どうもありがとうございます。 – Gengetsu