問題タブ [cup]
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.
abstract-syntax-tree - Java でカップから AST を作成する際に助けが必要
コードで AST を作成する必要があります。Node と AST のヘルパー クラスのクラスを作成しました。
これは私のカップです
ASTを取得するためにカップで何を変更しますか? 誰でも助けてくれますか?
parsing - Java CUP による解析木生成
JFlex で CUP を使用して、式の構文を検証しています。基本的な機能は動作しています。式が有効かどうかを判断できます。
次のステップは、「1 を足す」などの単純な算術演算を実装することです。たとえば、式が「1 + a」の場合、結果は「2 + a」になるはずです。これを行うには、構文解析ツリーにアクセスする必要があります。単に数値用語を識別するだけでは不十分なためです。「(1 + a) * b」に 1 を加算した結果は、「(1 + a) * b + 1」になるはずです。 、「(2 + a) * b」ではありません。
解析ツリーを生成する CUP の例はありますか? そこから取れると思います。
追加のボーナスとして、JFlex を使用して式のすべてのトークンのリストを取得する方法はありますか? 典型的なユースケースのように思えますが、それを行う方法がわかりません。
編集:スタックオーバーフローに関する有望な手がかりが見つかりました: パーサーから抽象ツリーの問題を作成する
CUP と AST の議論:
http://pages.cs.wisc.edu/~fischer/cs536.s08/lectures/Lecture16.4up.pdf
具体的には、この段落:
パーサーによって返された Symbol は、文法の開始記号に関連付けられており、ソース プログラム全体の AST が含まれています。
これは役に立ちません。Symbol クラスにその子へのナビゲーション ポインタがない場合、Symbolインスタンスを指定してツリーをトラバースする方法は? つまり、ツリー ノードのように見えたり、動作したりしません。
parser-generator - JFlex と CUP を使用した正式な要件仕様言語のコンパイラ構築
要件仕様言語のコンパイラを構築する予定です。JFlex を語彙アナライザーとして、CUP をパーサーとして使用するアイデアを思いつきました。
正式な仕様言語として JFlex と CUP を使用できることを教えてください。すべてのドキュメントとチュートリアルは、プログラミング言語のみに関連しています。
正式な言語コンパイラを構築するために利用できる任意のチュートリアル。
parsing - カップパーサーでのシフト/競合の削減
私はこの文法を書きました:
このプログラムでパーサーを実行しようとすると:
(トークンは次のとおりです: id lp num(expr) rp)
私は得る:
だから、私はこれを削除しようとします:
そして今、私はエラーを受け取ります:
parsing - CUP パーサー文法で 2 つのトークンの間に文字列が少なくとも 1 回出現することを定義する方法
LALR(1) 文法で非終端記号を定義しようとしています (CUP パーサーを使用)。要求される
最終的に、私はこの定義を思いつきました:
はトークンSC
間の区切り記号 (セミコロン) でありhour_l
、時間のリストの非終端記号です。このソリューションには問題があります。HOUR
イプシロンは に還元できるため、 が存在しない可能性がありますhour_l
。すべての可能性を指定するか、CUP のセマンティック機能を使用するよりも賢い解決策があります (つまり、セクションに何回HOUR
存在するかのカウンターを置く)? これを達成するためにセマンティクスを使用しないことをお勧めします。実際、構文に関連しているように思えます。
java - 生成されたクラスファイルにシンボルエラーが見つかりません
私は小さなプログラミング言語用のコンパイラを設計しています。コンパイラに必要なASTを生成するJavaプリプロセッサ(GENパッケージ)が提供されます。入力文法を特定の形式でGENファイルに指定するだけです。GENファイルは、Javaクラスファイルを自動生成します。GENファイルが正しくコンパイルされています。ただし、GENコードで何を変更しても、生成されたJAVAクラスファイルには次のエラーがあります。
このエラーを検索したところ、使用されている間違ったパッケージまたは宣言されていない変数に関連していることがわかりました。ただし、私の場合、実行時にエラーが発生します。ここで何がうまくいかないのかわかりません。
PcatParser.program_ASTは、PcatParser.javaクラスファイルを生成します。#<>構文は、指定された入力のASTを生成するために使用されます。
parsing - カップパーサーでのシフト/削減の競合 (配列と行列を使用した文法)
フィールドとして配列と行列を持つクラスをサポートするはずの小さな言語用のカップパーサーを書いています。たとえば、クラス インスタンスがある場合:
フィールドには次の方法でアクセスします。
shift/reduce のコンフリクトが頻繁に発生するため、この最後の部分の作品を書くのに苦労しています。これは私の作品です:
警告 : *シンボル LSQUARE の下のデジネータ ::= デジネータ LSQUARE Expr RSQUARE ( ) とデジネータ ::= デジネータ LSQUARE Expr RSQUARE ( ) LSQUARE Expr RSQUARE の間の状態 #189 で見つかった Shift/Reduce の競合 シフトを支持して解決されました。
誰でもこれを解決するのを手伝ってもらえますか?
parsing - Java で単純な解析を作成する最も簡単な方法
CUP、javaCC、またはその他のパーサージェネレーターについて知っていますが、
しかし、複雑なツールを CUP として構成する必要なく、単純な言語を理解する機能をプロジェクトに追加したいと考えています。
この言語は、演算子を使用したいので、正規表現で解析するには少し複雑すぎます。