問題タブ [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.
java - JFlexで継承は可能ですか?
XPathのレクサーを一緒にハックすることができましたが、私はJFlexとJSyntaxPaneにかなり慣れていません。
私が直面している問題は、いくつかの独自機能を備えたXPathのサブセットをサポートするプロジェクトに取り組んでいることです。厄介な私は知っています。
これが通常のJavaの問題である場合、継承に目を向けますが、1つのレクサーで以前に生成されたレクサーを拡張することによって継承を実現することはできないようです。
例えば
これにより、いくつかのfinalメソッドを拡張できないというエラーが大量に発生するようです。これはJSyntaxpaneのDefaultJFlexLexerに固有の問題ですか、それとも間違っているだけですか?誰かが同様の状況にあり、多数のレクサーである種のアドホック継承を実現する方法を見つけたことがありますか?
java - JFlex で状態を追跡する
JSyntaxpane で使用するレクサーを生成するカスタム フレックス ファイルを作成しています。
lex する必要があるカスタム言語には、一種のスタックで互いに埋め込むことができるさまざまな状態があります。
つまり、一重引用符で囲まれた文字列を含む式を作成し、特別なトークン eval() を使用して文字列内に別の式を埋め込むことができます。ただし、二重引用符で囲まれた文字列内に式を埋め込むこともできます。
例えば:
これは単純化したもので、これよりも多くの状態がありますが、DOUBLE_STRING と SINGLE_STRING に異なる状態が必要であると仮定すると、私の状況を適切に説明しています。
eval式を閉じたときに正しい状態に確実に戻るための最良の方法は何ですか(つまり、二重引用符で囲まれている場合はDOUBLE_STRINGに戻り、単一引用符で囲まれている場合はSINGLE_STRINGに戻ります)
私が思いついた解決策は、yybegin を使用して別の状態を開始する代わりに、スタックといくつかのカスタム メソッドを使用して状態を追跡することです。
これはこれを達成するための最良の方法ですか?活用できる JFlex のより単純な組み込み関数や、知っておくべきベスト プラクティスはありますか?
regex - Lua の「長括弧」文字列構文の一致
Lua 用の jFlex lexer を作成していますが、言語仕様の特定の部分に一致するように正規表現を設計する際に問題が発生しています。
リテラル文字列は、長い括弧で囲まれた長い形式を使用して定義することもできます。レベル n の左長い括弧は、左角括弧の後に n 個の等号が続き、その後に別の左角括弧が続くものとして定義します。したがって、レベル 0 の左大括弧は [[ と記述され、レベル 1 の左大括弧は [=[ と記述されます。以下同様です。閉じ長括弧も同様に定義されます。たとえば、レベル 4 の閉じ長括弧は ]====] のように記述されます。長い文字列は、任意のレベルの左長い括弧で始まり、同じレベルの最初の長い閉じ括弧で終わります。このブラケット形式のリテラルは、複数行にわたって実行でき、エスケープ シーケンスを解釈せず、他のレベルの長いブラケットを無視します。適切なレベルの閉じ括弧以外は何でも含めることができます。
一言で言えば、長い開き括弧、その間の文字列の内容、長い閉じ括弧に一致する正規表現を設計しようとしています。開始長括弧と終了長括弧の等号の数が同じである場合にのみ、一致が発生する必要があります。
antlr - Flex/Bison と比較して、ANTLR を使用することの欠点は何ですか?
私は数年前、学部生時代に Flex や Bison に取り組みました。とはいえ、今はあまり覚えていません。最近、ANTLRのことをよく耳にするようになりました。
- Flex/Bison をブラッシュアップするために、ANTLR またはそれ以上を学習することをお勧めしますか?
- ANTLR の機能は Flex/Bison より多い/少ないですか?
java - どこかにJava文字列リテラルのjflex仕様はありますか?
また、文字列リテラルとは、の\123
ような文字も含むものを意味します。私は何かを書いたが、それが完璧かどうかわからない:
実際、これが完璧ではないことはわかっています。なぜなら、\ddd
-like 文字を解析する 3 行では、文字自体を文字列に入れるのではなく、その表現を文字列に入れるからです。文字メソッドを使用して変換しようとするかもしれませんが、網羅的ではないかもしれません。処理しなかった他のエスケープシーケンスがあるかもしれません....そのための正規のjflexファイルがあれば完璧です。
java - フレックスで文字列を区別する
のような演算子に従って分割されるいくつかの文字列をトークン化する必要があります= and !=
。!=
文字列に演算子が含まれるまで、正規表現を使用して成功しました。私の場合、文字列は2つの部分に分かれていましたが、これは予想通りですが、指定さ!
れた演算子の一部であってもマークは左側にあります。したがって、正規表現はそれに適していないと考えており、恩恵を受けたいと考えていlex
ます。lex についての知識と経験が十分にないため、自分の仕事に適しているかどうかわかりません。基本的に、演算子の右側を他のデータの実際の値に置き換えようとしています。それが私の場合に役立つと思いますか?
ありがとう。
regex - 正規表現の代わりに JFlex を使用する
私はJFlexを初めて使用します。JFlex はパーサー ジェネレーターであることがわかりました。ただし、以下についてはまだ明確ではなく、同じことを明確にする必要があります。
これがパターン識別とデータ分離に正規表現を使用することとどのように異なるか、また JFlex を使用することの追加の利点は何ですか。
JFlex が正規表現よりも有用な特定のユース ケース。
とにかく、テキスト/xmlファイルの一般的な解析に役立ちますか?
前もって感謝します。
compiler-theory - 語彙エラーの例は何ですか?言語に語彙エラーがない可能性はありますか?
コンパイラー理論のクラスでは、独自に設計したプログラミング言語用の単純なインタープリターを作成する任務を負っています。私はジェネレーターとして jflex と cup を使用していますが、字句エラーとは何かに少しこだわっています。また、jflex の状態機能を使用することをお勧めしますか? パーサーがその側面を処理するのにより適しているように見えるので、それは間違っているように感じます。また、言語を作成するための他のツールをお勧めしますか? せっかちで申し訳ありませんが、締め切りは火曜日です。
regex - JFlex でグループを取得する正規表現を使用するにはどうすればよいですか?
この質問は JFlex に関するものですが、おそらく lex や flex などの他のスキャナー ジェネレーターにも当てはまります。
何らかのルールがある場合、そのルールの一部でキャプチャ グループを作成し、そのキャプチャ グループの結果をルール マッチング時に呼び出されるコードの引数として使用するにはどうすればよいですか?
たとえば、SGML タグに一致する単純なルールがあるとします。
内側の文字部分 ([a-zA-Z]+) をキャプチャして、Token コンストラクターの引数として使用するにはどうすればよいですか?
編集:単純に yytext() を使用して一致した値全体を取得し、コード内の他の部分を分離できることは承知していますが、必要以上に複雑になるようです。
java - GNUMakeからMavenへの移行
私は長い間Makeビルドシステムを使用してきましたが、Mavenビルドシステムの学習を開始することにしました。私はほとんどのオンラインドキュメントを読みましたが、私が探している類推を私に与えるものはないようです。システムのライフサイクルは理解していますが、コンパイルステップの依存関係についての参照は1つもありません。たとえば、コンパイルライフサイクルステップの一部としてJFlex文法を生成したいと思います。現在、そのステップをプリコンパイルフェーズのステップにする方法はありません。ドキュメントはこれに限定されているようです。一般に、ステップ依存関係の概念はMavenに組み込まれているようであり、変更するにはプラグインが必要です。これは本当ですか?現在、Mavenビルドシステムでは、コンパイル手順の設定方法が非常に限られているように思われるため、何が欠けていますか。