0

ocamlyacc を使用して整数式と浮動小数点式を認識する単純な言語用のパーサーを作成しようとしています。ただし、変数を持つ可能性を紹介したいと思います。そこで、lexer.mllファイルでトークンVARを定義しました。これにより、大文字で始まる任意の英数字文字列を使用できます。

 expr:
 | INT                      { $1 }
 | VAR                      { /*Some action */}
 | expr PLUS expr           { $1 + $3 }
 | expr MINUS expr          { $1 - $3 }

 /* and similar rules below for real expressions differently */

これで、実数についても同様の定義が得られました。ただし、このファイルを実行すると、ランダムな文字列 (トークン VAR として識別される) を入力すると、reduce/reduce の競合が 2 回発生します。パーサーは、私の文法で int 式と実数式の両方を定義する際にキーワード VAR が存在するため、その変数が実数型か整数型かを認識しません。

Var + 12  /*means that Var has to be an integer variable*/
Var  /*Is a valid expression according to my grammar but can be of any type*/

変数宣言の一般性を失い、利用可能な 2 つのデータ型を維持することなく、この削減/削減の競合を解消するにはどうすればよいですか。

4

0 に答える 0