0

コンマ区切り値のリストにセマンティック値を与えようとしています。実際、私は bison のリダクション ルールを次のように定義しました。

commasv : exp
        | commasv "," exp

ここでexp、数値、変数、関数ポインター、またはそれぞれの構文とセマンティック ルールを備えた commasv トークンです。の型expは double なので、 の型は double でcommasvなければなりません。

問題は、関数呼び出しなどでリストを使用するためにリストを保存したいということです。例えば

h = create_object()
compute_list(h,1,cos(3.14159))

特定のcompute_list関数の期待される結果が得られます。

基本の bison ファイルとして、 bison マニュアルの mfcalc の例を使用し、関数を flex を使用してyylex生成された別のものに置き換えました。今では次のようなことができます

pi = 3.14159
sin(pi)
ln(exp(5))

flex を使用した関数の修正版をyylex使用しますが、関数呼び出し、リストの作成などでコンマ区切りの値を使用したいと考えています。

回答ありがとうございます。

4

1 に答える 1

1

次に、結果を格納するリストを作成します。ルールの結果がcommasv実際の値を返す代わりに、リスト ヘッドが返されるようにします。

一般に、ある程度高度な文法 (リストなどを組み込むなど) を習得するとすぐに、解析を表現するために値を実際に使用することはできなくなり、ある種の抽象構文ツリーに移動する必要があります。

于 2013-02-02T21:00:08.697 に答える