問題タブ [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.

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

jflex - CUP で EOF トークンを解析する

CUP パーサーが EOF トークンを解析するのに問題があります。%cupJflexコードでフラグを使用すると、次のようなものが存在することを意味するというドキュメントを読みました。

これはすべて問題ありませんが、文法 (CUP ファイル) で次の最初の規則を試してみると、次のようになります。

EOF が CUP によって宣言されていないというエラー メッセージが表示されます。

わかりましたので、CUP ファイルに以下を追加します。

いいえ、CUP が教えてくれるからです。

ただし、終端の EOF を定義せずに、sym.javaCup が生成するクラスを調べたところ、次のことがわかりました。

だから私はこれを修正する方法についてかなり迷っています。両方のドキュメントは、この問題について非常に曖昧です。

編集: EOF トークンを解析したい主な理由は、最後にシンボル テーブルとその他のものをデバッグ目的で出力したいからです。

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

flex-lexer - JFLEX AND CUP、正常に動作しない

jflex と cup を使用して、html パーサーを作成しようとしていますが、正しく動作させることができません。

Netbeans, コンパイル プロセスは停止せず, 常に続行します. パース ツリーに "トークン" を正しく追加できません. また "TEXTO" にスペースを追加できません. これによりツリー全体が壊れます.

lexicoh.jlex

シンタティコーカップ

Java メイン

ありがとう ここに画像の説明を入力

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

parsing - Java CUP と JFlex の相互作用

プロジェクトに CUP パーサー ジェネレーターを使用することを検討しています。コンパイルしようとしている言語のいくつかの構造を正しく解析するには、シンボル テーブル (解析テーブルではなく、格納するテーブルを意味します) からの情報を使用するために (JFlex によって生成された) レクサーが必要です。 next_token() メソッドが呼び出されたときに正しいトークン タイプを生成するためのパーサーの識別子に関する情報)。シンボル テーブルの情報はプログラム テキストに静的に依存するため、これは next_token() メソッドがパーサーと「ロックステップで」呼び出された場合にのみ機能します。つまり、パーサーが別のトークンを必要とするたびにレクサーを呼び出す場合、これは機能しますが、(たとえば) レクサーを呼び出してトークンをキューにバッファリングする並列スレッドがある場合は機能しません。

したがって、問題は次のとおりです。CUP はどのようにレクサーを呼び出しますか? 次のトークンが必要なときはいつでもそれを呼び出しますか? もちろん、CUP 文法仕様を記述し、生成されたパーサーのソース ファイルを検査して何が起こっているかを確認することもできますが、それは必要以上の作業になる可能性があります。関連するウェブサイトでこれに関する情報を見つけることができませんでした。

あなたが提供できる助けをありがとう!

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

java - CUPとjflexの連携


http://www2.cs.tum.edu/projects/cup/examples.php
http://www.cs.princeton.edu/~appel/ のヘルプを使用して、parser.java と yylex.java をリンクしようとしています。現代/Java/CUP/manual.html
http://jflex.de/manual.html

しかし、これらのエラーが発生しています。

エラー: Yylex は抽象的ではなく、スキャナーの抽象メソッド next_token() をオーバーライドしません

エラー: Yylex の next_token() は Scanner の next_token() を実装できません

それらを解決するには?

私の mini.flex ファイルは次のとおりです。

私の mini.cup ファイルは次のとおりです。

私は以下を使用してコンパイルします:

スローされるエラーは次のとおりです。

Parser.java:19: 警告: [非推奨] lr_parser の lr_parser() は非推奨になりました public Parser() {super();}
^ Parser.java:22: 警告: [非推奨] lr_parser の lr_parser(Scanner) は非推奨になりましたpublic Parser(java_cup.runtime.Scanner s) {super(s);}
^ Parser.java:96: 警告: [非推奨] lr_parser の lr_parser(Scanner) は非推奨になりました public Parser (java.io.Reader input) { super (新しい Yylex(入力)); }
^ Parser.java:137: 警告: [キャスト] Object への冗長なキャスト Object start_val = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value ;
^ Yylex.java:12 :エラー: Yylex は抽象化されておらず、スキャナー
の public クラスの抽象メソッド next_token() をオーバーライドしていません Yylex はjava_cup.runtime.Scanner を実装しています() in Scanner public int next_token() throws java.io.IOException { ^ return type int is not compatible with Symbol Yylex.java:631: error: incompatible types { return new java_cup.runtime.Symbol(sym.EOF); } ^ 必須: int検出: シンボル3 エラー4 警告









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

haskell - cupファイルのhaskell文法

JLex と cup を使用して Java で書かれた haskell コンパイラに取り組んでいます。lexer ファイルを完成させ、今は parser.cup ファイルに取り組んでおり、端末、非端末、および文法を定義する必要があります。私はすでに端末部分と非端末部分を完成させましたが、今は文法部分で立ち往生しているので、誰かが私を助けたり、この形式でhaskellの文法を見つけることができるリンクにリダイレクトしたりできます:

任意の助けをいただければ幸いです。