状況は非常に単純な構文を書いていますが、コンパイルすると競合が発生します。 このようなシンプルな構文が矛盾してしまうのではないかと思います。yaccにはシフト/リダクションの競合があります
%token SCRIPT_ID
%token STRING
%start functions
%%
functions: SCRIPT_ID '(' STRING ')' {printf("script_id is %s", $3);};
%%
ファイルを解析するためにyaccを使用したいだけです。私のファイルにはscript_id( "1232444")のようなものがあります。
私はyaccマニュアルを検索し、shift/reduce競合について説明すると、 'if and else'のような例が挙げられます。そして、私が理解している理由は、prioperityが指定されていない場合、 'ifとelse'に矛盾があります。 しかし、if-else-conflictには、私が会った葛藤とは何か関係があるのか分かりません。
私のコードに何が間違っているか教えていただけますか?
SCRIPT_IDとSTRINGのトークンをどのように定義できますか? – Zuljin
yaccの詳細な出力に詳細な情報が表示されることがあります。文法を '-v'オプションでコンパイルしてください。これにより、情報が入ったファイル 'y.output'(またはそのようなもの)が生成されます。 –