問題タブ [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.
java - 文法のあいまいさへの対処(ポーカーファイルの解析)
私は現在、独身プロジェクトの一環としてポーカーハンドヒストリーパーサーに取り組んでいます。私は過去数日間いくつかの調査を行っており、いくつかの優れたパーサージェネレーターに出くわしました(プロジェクト自体はJavaでコーディングされるため、JavaCCを選択しました)。
ハンドヒストリーの文法は非常に基本的でわかりやすいものですが、プレーヤーのニックネームに使用できる文字のセットが原因で、あいまいさの問題があります。
次の形式の行があるとします。
トークンmyNickname
には、空白だけでなく任意の文字を含めることができます。これは、との両方(1500 in chip
がSeat 5:
有効なニックネームであることを意味します。これは、最終的にあいまいさの問題につながります。長さ(4〜12文字)を除いて、プレーヤーのニックネームに制限はありません。
プレーヤーのニックネーム(たとえば、この特定の場合の座席位置とチップの量)とともにいくつかのデータを解析して保存する必要があるので、私の質問は、ここでの私のオプションは何ですか?
私はJavaCCを使用してそれをやりたいと思っています。
現在は機能しません(前述の問題のため)
また、GLRパーサー(あいまいな文法を処理しているようです)も検索しましたが、Bisonを除いて、ほとんどが放棄されているか、文書化が不十分であるようですが、Java用のGLRパーサーはサポートされておらず、複雑すぎて操作できない可能性がありますとにかく(あいまいさの問題は別として、私が述べたように、文法自体はかなり基本的です)
または、文字列を自分でトークン化することに固執し、indexOf(), lastIndexOf()
etcを使用して必要なデータを解析する必要がありますか?それがあまりにも醜い私見であり、いくつかのケースを見逃すかもしれないので、それが残っている唯一のオプションである場合にのみそれを選びます(それは間違った構文解析につながるでしょう)
java - JavaCC でのイプシロンの定義
JavaCCでイプシロンを定義するにはどうすればよいですか?? 私は何かをしようとしています
しかし、うまくいきません。
token - JavaCC のトークン: シンボルが 1 行で 1 つであることを確認してください
"{" は 1 行に 1 つである必要があります。したがって、それを認識するトークンを使用する必要があります。これは正しい例です:
また
そして、これは間違った例です:
また
次に、次のようなトークンがあります。
しかし、記号「{」を1つ以上の「\n」の間に正確に入れる方法が思いつきません。そして、それを認識した後、正確に書く必要があります:
私が試してみると:
これは実行されますが、入力にあったように非常に多くの「\n」が書き込まれます。
string - JavaCC による文字列の解析
別のトークンと誤って一致させることなく、JavaCC を使用して文字列を解析する良い方法を考えようとしています。これらの文字列には、スペース、文字、数字を含めることができます。
私の識別子と番号トークンは次のとおりです。
私の現在の文字列トークンは次のとおりです。
理想的には、引用符の中にあるものだけを保存したいと思います。変数と値を実際に保存する別のファイルがあります。そこの引用符を削除する必要がありますか?
私はもともとパーサーファイルに次のようなメソッドを持っていました:
しかし、ご想像のとおり、これにはスペースや数字を使用できませんでした。変数名などの識別子については、文字のみを許可したいと考えています。
そのため、文字列リテラルをキャプチャする方法についてアドバイスをお願いしたいと思います。特に、次のような文字列を作成したいと思います。
私の構文で有効です。
string - JavaCC の英語以外のトークン
私はすでにこのリンクを試しました: Print in JavaCC。しかし、なんらかの理由で、その答えはうまくいきませんでした。テキストをコピーしてファイルに貼り付けて実行しましたが、µ
たとえば と入力しても何も出力されませんでした。
文字列トークンで非英語を使用できるようにしたいと考えています。テスト目的のためだけに、現在私は持っています:
パーサーを実行して を含むファイルをフィードするとá, é, í, ó, ú
、たくさんの疑問符しか表示されません。
自動生成される char ストリーム ファイルを変更する必要があると読んだことがありますが、よくわかりません。
java - JavaCCへのJava正規表現
次の文字列(*)があり、JavaCCで解析する必要があります。
初期文字列:(*)
次の部分文字列を抽出する必要があります:
「[step」という単語なしで抽出する必要があります。同じ単語( "[step")を入力ストリームに保持します。
Javaの通常の式を使用する場合簡単ですが、JavaCCを使用して同じ結果を取得するためのソリューションが必要です
Javaでは、次のような通常の表現がありますSPECIAL_STEP=[^=]*(?=\r?\n\[step))
。
今JavaCCでも同じことをする必要がありますが、JavaCCで前向きな先読みができるかどうかはわかりません。
java - JavaCC: 一般的な単語を含むトークンの処理方法
次のようなソースコードのパーサーを作成しようとしています:
...そして、以下は私が定義した文法です:
問題は、パーサーがトークン (「コード テーブル」) を正しく識別することですが、トークン CODE_TAB_BEGIN (つまり「コード」) に既に含まれている単語が含まれているため、トークン IDENT (「code_table_name」) を識別しません。パーサーは、「コードの後に無効な文字 _ が続いている」と文句を言います...
そうは言っても、パーサーを正しく機能させるために何が欠けているのか疑問に思っています。私は初心者で、どんな助けも本当に感謝しています;-)
ありがとう、j3d
regex - JavaCC 行頭
JavaCC は '^' のような改行正規表現をサポートしていますか?
私はこのようなトークンを持っています
次の正規表現のみに一致させたい
次のことを試しましたが、どちらも機能しません
regex - 特定の文字列を除くすべての文字列に一致するJavacc正規表現
これらの文字列を除いて、
何にでも一致する正規表現は何ですか: =>
、|
?
javaccに精通している場合は、ANYTHING
以下に示すようにトークンを定義しようとしています。
ありがとう
javacc - 解析用のJavacc'
私はCFGのセットのパーサーを書いています。(注:RHSは大文字のみにすることができます)
/*宣言などを無視します。これがコードの主要部分です*/
これは明らかにいくつかのエッジケースを見逃しました。
A => A | a | D E => e
それで、私は何を間違えましたか?