問題タブ [sablecc]
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.
parsing - Sablecc は、識別子を持つプロダクションでの競合をシフト/削減します
minipython のバージョンの sablecc の仕様ファイルを作成しようとしています (後置/接頭辞のインクリメントおよびデクリメント演算子を使用)。一部のプロダクションでは当然識別子を使用する必要がありますが、解析中にこれらの競合が発生します。
私は言語の特定のbnfに従うことから始め、これにたどり着きました。文法ファイルは次のとおりです。
ここで、identifier はもちろんトークンであり、それが見つかる問題のあるプロダクションは function_call、prepost_operand、expression_value です。競合が少なくとも少し変化するかどうかを確認するために、接頭辞/接尾辞と prepost_operand を実験的に削除しましたが、最後の 2 つの競合が残るだけです。文法をあまり変更せずにこれらの競合を解決できる方法はありますか、それとも完全に間違った道をたどっていますか?
linux - Eclipse Linux への SableCC のインストール
Linux マシンの Eclipse に SableCC をインストールしようとしています。この http://web.archive.org/web/20090318023544/http://www.comp.nus.edu.sg/~sethhetu/rooms/Tutorials/EclipseAndSableCC.html に記載されている指示に従いました。 Windows ですが、手順 9 で Linux マシンに一致するファイルが見つかりません。
私が試したパスは以下のとおりです。
場所: /usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/bin/javaws
作業ディレクトリ: 「Browse Workspace...」を選択しました
引数: -classpath /home/[user_name]/Downloads/sablecc -3.7/lib/sablecc.jar org.sablecc.sablecc.SableCC [プロジェクト名]
しかし、それでもエラーメッセージが表示されます:
「netx: 無効な引数: net.sourceforge.jnlp.util.optionparser.InvalidArgumentException: [-classpath, /home/[user_name]/Downloads/sablecc-3.7/lib/sablecc.jar, org. sablecc.sablecc.SableCC、Project_Name]"
また、引数を [Project_Name] から "Variables..." から指定された ${resource_name} に変更しようとしましたが、次のエラーが発生しました:
変数は空の選択を参照しています: ${resource_name}
何か案が??前もって感謝します!:)
parsing - Sablecc を使用して競合をシフト/削減する
Sablecc を使用して、MiniPython 用の .grammar ファイルを作成することになっています。これらのシフト/削減の競合が発生しています:
トークンの一部は次のとおりです。
私の .grammar ファイルの一部は次のとおりです。
これは、左再帰を排除しようとした後の文法です。assert
プロダクションからルールを削除するsomething
と、競合が発生しないことに気付きました。また、およびルール{empty}
からルールを削除しても競合は発生しませんが、これはこれを解決する正しい方法ではないと思います。exprsn
tpwr
mltp
ヒントをいただければ幸いです。
更新: 要求に応じて、左再帰を削除する前の文法全体を次に示します。
shift/reduce 競合は次のようになります。
context-free-grammar - この任意の言語の「開始」と「終了」は、CFG に関してトークンにする必要がありますか?
そこで、SableCC 経由でコンパイラを生成する CFG 本体を作成しています。指定されたサンプルには、プログラムの先頭と末尾にそれぞれ「 Start」と「End 」があります。
サンプルコード
プロダクションには表示されないので、トークンでもあると思います。だから私は文法でそれらを次のように書きました:
自信がなく、どのように作品を書かなければならないのか、いまだに戸惑っていますが、助けてもらいたいです。