問題タブ [reduce-reduce-conflict]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
61 参照

antlr - トークン削減の制御

実行時にANTLRを使用してトークンのリダクション操作を制御する方法はありますか? たとえば、次のような ANTLR 文法があります。

「a」と「b」の両方に関連する正確な可能な値が実行時にわかっている場合、つまり、WORD を「a」または「b」に減らすかどうかを実行時に決定したい。

0 投票する
2 に答える
157 参照

bison - 削減 - 文法の競合を削減

n もイプシロン プロダクションであるため、bison の次の文法で reduce/reduce の競合が発生しています。

これを変更してこの競合を取り除くにはどうすればよいですか?

0 投票する
1 に答える
621 参照

grammar - 文法にポインタを導入するときの競合を減らす/減らす

自分の言語を作成することの難しさをより深く理解するために、私は小さなコンパイラーに取り組んでいます。現在、文法にポインタ機能を追加する段階にありますが、それを実行することで、reduce/reduceの競合が発生しました。

これは、によってコンパイルできる私の文法の簡略化されたバージョンですbnfc。私はhappyパーサジェネレータを使用していますが、これは、reduce/reduceの競合があることを通知するプログラムです。

私は文法がどのように機能するかを学習している段階にあります。しかし、私は何が起こるかを知っていると思います。これらの2つのプログラムを検討してください

typedefとのmain(){}部分は関連性がなく、私の文法ではありません。しかし、それらはいくつかの文脈を与えます)

a "*" b最初のプログラムでは、それがとして解析されることを望みます。Stmt ==(SExpr)==> Expr ==(EMult)==> Expr * Expr ==(..)==> Ident "*" Identつまり、基本的にSExprルールを使用してステップを開始します。

同時に、my_type * my_type_pointer_variableルールを使って拡張していきたいと思います。Stmt ==(SDecl)==> Type Ident ==(TPointer)==> Type "*" Ident ==(TAlias)==> Ident "*" Ident

しかし、文法段階では、識別子が元々型エイリアスなのか変数なのかわかりません。


(1)reduce / reduceの競合を取り除くにはどうすればよいですか?(2)この問題を抱えているのは私だけですか?明らかな解決策はありますか?c文法はこの問題をどのように解決しますか?

これまでのところ、「*」の代わりに「&」またはその他の記号を使用して言語の構文を変更することに成功しましたが、これは非常に望ましくありません。また、さまざまな公開文法からは理解できず、なぜこの問題が発生しないのかを調べようとしましたが、運が悪かったのです。

そして最後に、どうすればこのような問題を自分で解決できますか?より詳細な出力から私が理解したhappyのは、競合がどのように発生するかということだけです。賢さは、これらの競合を回避する唯一の方法ですか?たとえば、紹介するときに、さらに多くの問題に遭遇するのではないかと心配しています。EIndir. Expr = '*' Expr;

0 投票する
0 に答える
141 参照

debugging - ocamlyacc での競合

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

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

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

0 投票する
2 に答える
470 参照

compiler-construction - リデュース/リデュース コンフリクトの削除

ML-Yacc で定義されているように、次の文法を持つ言語用のコンパイラを作成しました (開始記号は、下部に定義されている「プログラム」です)。

この文法は問題ありませんが、ここでパラメトリック ポリモーフィズムを導入したいので、次の生成を文法に追加します。

そして今、次の2つの削減/削減の競合が発生していますが、解決方法がわかりません

これら2つの競合をどのように削除するか教えてもらえますか?

編集: これは mlyacc http://pastebin.com/2w26ytuVからの完全な .desc 出力です。これも 2 つの無害なシフト/リデュース エラーを示しているわけではありません

0 投票する
3 に答える
286 参照

bison - C スタイルのキャスト演算子で競合を減らす/減らす

特定のクエリ言語用に bison+flex パーサーを作成していますが、C スタイルのキャスト演算子を追加する必要があります。コードの関連部分は次のとおりです。

ここでの問題は、(typename)inがinとcastExp衝突し、reduce/reduce の競合が発生することです。(variable)generalExp

考えられる解決策は、対応する lex ファイルにすべての有効な型名 (long、int、char など) をリストすることですが、使用定義型もサポートする必要があります。

UPD: 別の解決策は、bison GLR パーサーを使用することですが、パフォーマンスが低下するため、これは望ましくありません。

bison -v出力はこちら

0 投票する
1 に答える
1971 参照

java - IntWritable から Mutation へのキャスト エラーを解決するにはどうすればよいですか? Map Reduce HBase

IntWritableマッパーからレデューサーにを渡そうとすると、次のエラーが発生します。

これは私のマッパーです:

これはリデューサーです:

そしてドライバー: