問題タブ [javacc]

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 投票する
4 に答える
1480 参照

java - javascriptコードを出力するJavaccのバージョンはありますか?

Javacc文法ファイル(.jj)を受け入れ、(Javaではなく)Javascriptでパーサーを生成するパーサージェネレーターを探しています。そのようなものは存在しますか?あるいは、.jjファイルをANTLR(Javascriptを出力できる)が理解できるものに変換するのはどれほど難しいでしょうか?

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

string - JavaCCで改行にバックスラッシュエスケープ文字を使用するには?

字句アナライザーを作成する割り当てがあり、1 つのビットを除いてすべてが機能しています。改行を受け入れる文字列を作成する必要があり、文字列は二重引用符で区切られています。文字列は、任意の数字、文字、指定された句読点、バックスラッシュ、および区切り文字内の二重引用符を受け入れます。改行文字をエスケープする方法がわかりません。改行やタブなどの文字をエスケープする特定の方法はありますか?

これが役立つかもしれない私のコードの一部です

したがって、私の文字列は引用符を許可し、次にバックスラッシュ、空白、数字などの次の文字のいずれかを許可し、その後に別の引用符を続ける必要があります。「\n」のような改行文字が機能していません。前もって感謝します!

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

parsing - javacc + PMD を使用した COBOL パーサー

この文法を使用して COBOL パーサーを生成しています。

javacc を使用してパーサーを生成し、Java Tree Builder を使用してこの文法から AST を生成します。

PMDと呼ばれる Eclipse プラグインをカスタマイズして、COBOL ファイルを読み取り、AST を生成しています。ソース コードから AST を入力できる Designer という UI があります。

以下のソース コードを使用しようとすると、次のエラー メッセージが表示されます。

エラーメッセージ

COBOL コード

私は COBOL プログラマーではないので、この文法のどこが間違っているのか理解できませんでした。

誰でも私を助けることができますか?

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

json - ソースコードを生成するときにjavaccが文字をエスケープしないようにするにはどうすればよいですか?

javacc 5.0を使用して、文法ファイルを使用してjsonパーサーを生成します:https ://github.com/inqwell/json/blob/master/src/main/javacc/com/inqwell/json/JSON.jj

ただし、生成されたJavaソースコードにはいくつかのエラーがあります。

そして、文法ファイルでは、それらは次のとおりです。

これらのケース文字はエスケープするべきではありませんが、どのように行うのですか?


アップデート

コードをIDEAでコンパイルできません。スクリーンショットを参照してください。

ここに画像の説明を入力してください

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

parsing - javaccトークンプレフィックス

クエリ言語で次のような文字列を許可しようとしています。

ここで、最初-はその用語が除外されることを示します。問題は-、除外トークンとして解析されるのではなく、トークンテキストに含まれることになります。私は簡単なものを見逃していると確信していますが、それを完全に理解することはできません。

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

compiler-construction - 間接的な左再帰の排除

私の脳は、生産ルールからいくつかの左再帰を排除しようとして揚げられています。JavaCCを使用してコンパイラを構築しており、次の2つのプロダクションルールを使用する必要があります。

しかし、問題は、フラグメントがフラグメントに関連する式に関連していることです。つまり、間接的な左再帰です。

私はインターネットを見回しましたが、誰もがここにあるこのアルゴリズムを使用しているようです。そのサイトでは、ここで見つけることができる直接左再帰の除去については説明していません

私は次のようなルールになります:

それらはJavaCCで使用されるコードで書かれているので、うまくいけば理解できます。基本的に、再帰を処理するためのルールKを導入しましたが、問題はまだ存在します。ただし、Kの最初の部分は*(0回以上)であるため、K-> k()が残り、残りが少なくなるため、ゼロに減らすことができます。再帰!!

ここからどこへ行けばいいのかわからず、髪の毛がたくさん抜けてしまいました。任意の洞察をいただければ幸いです!

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

java - 先を見越さずに選択の競合を取り除く-JavaCC

JavaCCで次のプロダクションルールを作成しようとしていますが、選択の競合エラーが発生します。先読みを使用して修正する方法は知っていますが、割り当てに使用することは許可されていないという印象を受けています。

どんな考えでも大歓迎です!

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

java - 文法にJJTreeを実装する方法

私には、JavaCCを使用して、講師から提供された言語のセマンティック分析を使用したトップダウンパーサーを作成する割り当てがあります。制作ルールを書き留めてあり、エラーはありません。私は自分のコードにJJTreeを使用する方法に完全に固執しており、チュートリアルのためにインターネットを精査する時間はどこにもありません。コードにJJTreeを実装する方法を説明するために誰かが時間を割くことができるだろうかと思っていますか?または、どこかに隠されたステップバイステップのチュートリアルがある場合、それは大きな助けになります!

役立つ場合に備えて、私の制作ルールをいくつか紹介します。前もって感謝します!

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

grammar - この選択の競合を解決する方法 - JavaCC

私は、単純な式と条件付きステートメントを使用して単純なスクリプト言語を定義する javacc 文法を持っています。

最初の明らかな問題は、Expression の定義方法にあり、IfStatement の定義に使用されるため、簡単に次のような結果になる可能性があります。 If (variable1 < variable2 >= variable3 )

次のように、条件式のロジックを一般的な式のロジックから分離することで、それを修正しようとしています。

生成された jj ファイルをコンパイルすると、次の警告が表示されました: 警告: 210 行目、3 列目の (...)* 構造の選択競合。 " ネストされた展開には 2 以上の先読みを使用することを検討してください。

エラー行番号は、生成された jj ファイル内の行の番号です。解析されているものが ConditionalExpression であるか Expression であるかを判断できないため、SimpleExpression に遭遇したときに競合が発生すると想定しました。

その後

しかし、それは消えませんでした。選択の競合があると言っているjjファイルの行は

もう 1 つの問題は、演算子の優先順位が何らかの形で台無しになっていることです。 IF ( "a" == "a" | "c"=="c" ) のようなものは | 2 番目のオペランドとして "c" を使用する 2 番目の == 演算子の前に解釈され、それが ClassCastException を与えるため、これを修正するには文法全体を書き直す必要があると結論付けたので、複合の単一の条件の周りに括弧を強制することを考えましたこのような条件文 if ( ("a" == "a") | ( "c" == "c" ) ) 方法がわかりません。

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

java - JavaCC による C コメントの削除

SKIP 宣言を使用してこれらのコメントをスキップする方法は知っていますが、C ソースを取得して同じソースをコメントなしで出力するだけで済みます。

そこで、出力にコピーされるトークン <GENERIC_TEXT: (~[])+ > を宣言し、コメントはスキップされません。私は、このトークンがすべての入力を自分自身で受け取るのではないかと考えています。

誰か助けてくれませんか?

ありがとうございました