問題タブ [jflex]
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.
regex - JFlex で先読みが機能しない
JFlex を使用してパーサーを構築しようとしていますが、非常に基本的な問題が発生します。このトークンが欲しい
「car_N」を「名詞」として認識させ、「car_NN」は認識させません。しかし、使用しても機能しません
「car_N」は認識されますが、「car_NN」は「car_N」も返します。これは私が望むものではありません。
ここにいる誰かが助ける方法を知っているのだろうか?
JFlex および Flex の先読み記号 '$' が機能していないようです
java - JFlex の否定パターン
JFlex を使用して文字列を解析しています。VARIABLE
<...> の間のすべてを解析したい状態があります
そのために、.flex
ファイルでこれを定義しました:
残念ながら[^>]+
、JFlex はどの文字列とも一致しないため、機能しません。明らかに、パターンへの単純化は[a-z]+
正しく機能します。
ありがとう
parser-generator - JFlex と CUP を使用した正式な要件仕様言語のコンパイラ構築
要件仕様言語のコンパイラを構築する予定です。JFlex を語彙アナライザーとして、CUP をパーサーとして使用するアイデアを思いつきました。
正式な仕様言語として JFlex と CUP を使用できることを教えてください。すべてのドキュメントとチュートリアルは、プログラミング言語のみに関連しています。
正式な言語コンパイラを構築するために利用できる任意のチュートリアル。
jflex - jflex でコードにコメントを付ける方法
フレックスとは異なり/* */
、\\
jlexでは動作しないようです。それらは、「語彙アクションの開始時にブレースがありません」というエラーを出します。
string - JFlexレクサー。複数行の文字列
JFlex を使用して、複数行の文字列リテラルを含む言語を解析しようとしています。
例:
2 つの状態を作成しました。
いくつかのマクロとルールを作成しました。
しかし、うまくいきません。「エラー: 入力が一致しませんでした」というメッセージが表示されます
誰でも問題を解決できますか?
parsing - メソッド宣言、定数、関数呼び出しのカウントをパーサーに含めるにはどうすればよいですか?
私はJavaに似ていますが、より単純な言語のパーサーを実装しています。レクサーを作成し、現在パーサーを作成しています。私は文法を書きました。要素のカウントを実装する必要がありますが、それを置くべきかどうかはわかりません。制作後はアクションコードに入れるべきだと思いますが、初期化するのかわかりません。
例えば
変数methodNumberとstaticMethodNumberをどこで定義して初期化する必要がありますか?
regex - ファイルの終わりを伴うオプションの JFlex 先読み
JFlex を使用して Fitnesse 用のレクサーを作成しようとしていますが、WikiWords (http://fitnesse.org/FitNesse.UserGuide.WikiWord) で問題が発生しています。
リンクされた正規表現をコピーし、トークンに次の正規表現を使用しています。
しかし、私は適切にレクシングするのに苦労してThisIsNotAWikiWord
います。大文字が 2 つ連続しているため、通常の単語とは見なされません。そのため、次の文字が文字か数字かを確認する先読みを追加する必要があります。のようなもの[A-Z]([a-z0-9]+[A-Z][a-z0-9]*)+ / [^A-Za-z0-9]
。
これは lexingThisIsNotAWikiWord
には問題なく機能しますが、一般的に lexing WikiWords を壊します。lexingWikiWord
の場合、先読み用の余分な文字がないため、一致しません。
オプションの先読みが必要だと思います。この後に文字がある場合は、これらのいずれでもない方がよいでしょう。しかし、入力に別の文字がない場合は、一致させましょう。
ドキュメンテーションは、これは不可能だと私に信じさせますが、それが私の正規表現の欠如であることを望んでいます。ドキュメントから:
字句規則では、正規表現 r の後に先読み式を続けることができます。先読み式は、「$」(行末演算子) または「/」の後に任意の正規表現が続きます。どちらの場合も、先読みは消費されず、一致したテキスト領域に含まれませんが、どのルールが最も長く一致するかを判断する際に考慮されます (4.3.3 入力が一致する方法も参照してください)。
'$' の場合、r は入力の行末でのみ一致します。行の終わりは正規表現 \r|\n|\r\n|\u2028|\u2029|\u000B|\u000C|\u0085 で示されます。したがって、a$ は / \r|\n|\r\n|\u2028|\u2029|\u000B|\u000C|\u0085 と同等です。これは、[5] で説明されている状況とは少し異なります。 JFlex $ は真の後続コンテキストであり、ファイルの終わりは行の終わりとしてカウントされません。
regex - 有効な識別子名を照合するための正規表現
私はこの正規表現の初心者です。次の規則に従う識別子に一致する正規表現を作成しようとしています。
文字で始まる必要があり、文字、数字、およびアンダースコアのみを使用できます。識別子も文字で終わる必要があり、2 つの連続したアンダースコアを使用することはできません。
このための正規表現を考え出そうとしましたが、あまり成功していません。私は助けが必要です。
java - JFlex で先読みアサーション (正規表現) が機能しない
JFlex を使用してスキャナーを生成しようとしています。
私が実装しようとしている文法の識別子規則の 1 つは次のとおりです (正規表現構文)。
上記の式が実際に有効で機能することを確認しました。ただし、jFlex 1.4.3 は、"疑問符(?!_)
" について不平を言い続けているため、私の先読みアサーションの使用を好まないようです。私が間違っていることはありますか、それともJFlexで先読みを使用するのに別の方法がありますか?
「先読み」を使用して、識別子名に 2 つの連続したアンダースコアを含めることはできないという規則を満たしています。
どんな助けでも大歓迎です。
lex - JFlexを使用してコメントを削除しますが、ラインターミネータは保持します
私はJFlexの字句仕様を書いています(flexに似ていますが、Java用です)。TraditionalComment(/* */
)とDocumentationComment(/** */
)に問題があります。これまでのところ、これはJFlexユーザーズマニュアルから抜粋したものです。
LexerToken.PASS
後で出力にラインターミネータを渡すことを意味します。今、私がやりたいことは次のとおりです。
改行ターミネータを除いて、コメント内にあるものはすべて無視してください。
たとえば、次のような入力について考えてみます。
実はです/* Some\n * quite long comment. */\n
。現在のレクサーでは、1行に変換されます。出力は単一の'\n'になります。しかし、2行にしたいのですが、'\ n\n'です。一般的に、出力には常に入力と同じ行数が必要です。どうやってするの?