問題タブ [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/CUP といくつかの質問を使用してコンパイラを構築する
私は現在BASIC言語用の簡単なコンパイラを開発していますが、あなたに質問したい問題がいくつか見つかりました。
最初のものは簡単です。どこでトークンを定義すればよいですか? つまり、Lexer.java ファイルでは、次の式を使用してトークンをパーサーに送信します。 return symbol(sym.STATIC); STATIC は私にとってトークンですが、どこで定義すればよいかわかりません。
次に、Lexer と Parser のインスタンスを作成するメイン クラスをどこに定義すればよいでしょうか。Parser クラスか、それとも別のクラスか。
ありがとうございます。
java - 名前の問題の正規表現
[a-zA-Z_]
then .
(dot) then againになる名前を認識するための正規表現が必要[a-zA-Z_]
です。私([a-zA-Z_]+) \.([a-zA-Z_]*)
はそれが動作しません。ヘルプ ?JFlex でそれを行うための鍬をくれる人はいますか?
java - [[:jletterdigit:]] から古典的な正規表現へ
JFlex の [[:jletterdigit:]] にはどのような文字がありますか? [[:jletterdigit:]] を従来の正規表現に変換する必要があります。
java - パーサーから抽象木問題を作成する
私は大きな助けを必要としています.2つの単純なクラス Tree と Node があります (フォーラムのスペースを節約するためにインターフェイスだけを配置しました.これらのクラスを簡単に変更できます). また、フレックスファイルとパーサーファイルがあり、AST (抽象構文ツリー) を作成する必要があります. - Node オブジェクトにトークンを配置し、正しい方法で Tree を埋めるため)。
これはパーサーファイルです
これは文法です
問題はここから AST を作成する方法です。入力式のようなものを取得しました
A.open && bi ? 誰でも助けることができますか?
java - jFlex のセットアップに関する問題
jFlexを使いたかった。オンラインチュートリアルを検索しようとしました。しかし、すべてが同じリンクを指しています。自分のマシンで Flex を正常にセットアップして使用できませんでした。誰かが私に良いチュートリアルを教えてくれたらうれしいです。
事前にサンクス。
parsing - Java CUP による解析木生成
JFlex で CUP を使用して、式の構文を検証しています。基本的な機能は動作しています。式が有効かどうかを判断できます。
次のステップは、「1 を足す」などの単純な算術演算を実装することです。たとえば、式が「1 + a」の場合、結果は「2 + a」になるはずです。これを行うには、構文解析ツリーにアクセスする必要があります。単に数値用語を識別するだけでは不十分なためです。「(1 + a) * b」に 1 を加算した結果は、「(1 + a) * b + 1」になるはずです。 、「(2 + a) * b」ではありません。
解析ツリーを生成する CUP の例はありますか? そこから取れると思います。
追加のボーナスとして、JFlex を使用して式のすべてのトークンのリストを取得する方法はありますか? 典型的なユースケースのように思えますが、それを行う方法がわかりません。
編集:スタックオーバーフローに関する有望な手がかりが見つかりました: パーサーから抽象ツリーの問題を作成する
CUP と AST の議論:
http://pages.cs.wisc.edu/~fischer/cs536.s08/lectures/Lecture16.4up.pdf
具体的には、この段落:
パーサーによって返された Symbol は、文法の開始記号に関連付けられており、ソース プログラム全体の AST が含まれています。
これは役に立ちません。Symbol クラスにその子へのナビゲーション ポインタがない場合、Symbolインスタンスを指定してツリーをトラバースする方法は? つまり、ツリー ノードのように見えたり、動作したりしません。
java - 構文解析とパーサー
私はそのようなものを解析したい:
path.to.variable
「path」と「to」は「Instance」という名前のオブジェクトであり、変数はdoubleを参照します。
私は次の文法を持っています:
この文法では:
- INSTANCE_SEPARATORは「。」です。char。
- SHORTCUTは、「path」、「to」、「variable」などの文字のみで名前が付けられています。
- exprは、名前(ここでは「変数」)をとる関数getDoubleの呼び出しによって取得されたdouble値を返す必要があります。この関数は、現在選択されているインスタンスを使用します。インスタンスには、doubleまたは他のインスタンスを含むハッシュテーブルが含まれています。
- pushInstanceは、現在のインスタンスを設定する関数です
たとえば、次のようになります。
- 次のハッシュテーブルを含むインスタンス「パス」:「to」=>インスタンス「to」へのリンク
- 次のハッシュテーブルを含むインスタンス"to": "variable" => 10
- パス「path.to.variable」は10を返す必要があります。
文法がnull値を要求するため、これは実行されません。これは、パーサーがこれを行うという事実によるものです:
)。
する代わりに
なんで ?優先順位の問題はありますか?
最後に、instancePathルールを削除すると、すべてが実行されます。
例を簡略化したため、この余分なルールを削除することはできませんが、実際にはかなり複雑です。
この余分なルールを削除すると問題が解決する理由がわかりません...
regex - 複数の正規表現を優先度付きで複数の文字列に一致させるための Java ツール
無制限の文字列シーケンスと、優先度順に並べられた多数の正規表現があります。シーケンス内の各文字列について、最初に一致する正規表現と一致する部分文字列を見つける必要があります。文字列はそれほど長くはありませんが (<1Kb)、正規表現の数は数百から数千までさまざまです。
この仕事を効率的に行う Java ツールを探しています。この手法は、DFA を先に構築する必要があると思います。
私の現在のオプションは JFLEX です。JFLEX で回避できない問題は、ルールに優先順位がなく、JFLEX がテキストの最も長い部分に一致するルールを探すことです。
私の質問は、私の問題が JFLEX で解決できるかどうかです。そうでない場合は、別のJavaツール/テクニックを提案できますか?
regex - jflex:なぜこの正規表現は一致するのですか?
私のレクサーで、私は次の正規表現を書きました:
デバッグモードでbyacc/jを実行しましたが、次の行が正規表現と一致したと表示されます。
しかし、なぜこの正規表現はこの行と一致するのですか?
特殊文字の"///"\s*[^\@\s].*
場合も試してみましたが、一致します。@
oO
私の正規表現は///
、オプションの空白が後に続く文字列にのみ一致すると思いました。空白以外の文字よりも@
、必ず来る必要があり、その後に任意の文字が続きます。
編集:申し訳ありませんが、正規表現はbyacc/jではなくjflex内で使用されています。
回避策:jflexのドキュメントでエスケープシーケンスが見つからなかったため\s
、この正規表現を試してみまし"///"[ \t\f]*[^@ \t\f].*
たが、機能しました。\s
エスケープ文字はサポートされておらず、jflexによって黙って無視されているようです。
actionscript-3 - .jflex ファイルから Actionscript クラスを生成するには?
.jflex ファイルから actionscript クラスを生成する方法はありますか? Java ファイルを生成できることはわかっていますが、AS3 クラスが必要です。