問題タブ [lexer]
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.
parsing - ANTLR 解析がトークンをスキップするのはなぜですか?
非常に基本的な C++ 関数宣言の解析を実行しようとしています。入力パラメーターを解析するための私のルールは次のとおりです。
問題は、次のようなものを渡そうとしていることです:
「int」と t を一致させますが、TYPEMOD をスキップし、n と一致させようとすると * は不要であるという例外をスローし、「param」と n を一致させます。TYPEMOD トークンをスキップして一致しないのはなぜですか?
前もって感謝します!
編集:
これが私の空白ルールです(コメントルールも含めました)。クラス宣言、プロパティ、構造体などの他のものを解析すると、すべて正常に機能するようです。これらの TYPEMOD のものだけです...
parsing - Ragel でテンプレート言語を解析するには?
私は単純なテンプレート言語のパーサーに取り組んできました。ラジェルを使用しています。
要件は控えめです。入力文字列のどこにでも埋め込むことができる [[tags]] を見つけようとしています。
{{foo}} などのタグを HTML に埋め込むことができる単純なテンプレート言語を解析しようとしています。これを解析するためにいくつかのアプローチを試みましたが、Ragel スキャナーを使用することに頼らなければならず、単一の文字のみを「キャッチオール」として一致させるという非効率的なアプローチを使用する必要がありました。これは間違ったやり方だと思います。基本的に、スキャナーの最長一致バイアスを悪用して、デフォルトのルールを実装しています (1 文字の長さしかないため、常に最後の手段にする必要があります)。
(アクションはルビで書かれていますが、理解しやすいはずです)。
このような単純な言語のパーサーを作成するにはどうすればよいでしょうか? Ragel は適切なツールではないでしょうか? このような構文が予測できない場合は、Ragel の歯と爪と戦わなければならないようです。
parsing - yacc/lex の基本的な問題
非常に単純な yacc/lex プログラムに問題があります。基本的な手順をいくつか忘れている可能性があります (これらのツールを使用してから長い時間が経ちました)。
私の lex プログラムでは、次のようないくつかの基本的な値を指定します。
私の yacc プログラムでは、文法の始まりは次のとおりです (TranslationUnit は %start です)。
入力を使用してプログラムを実行すると:
私は少なくとも得ると思った:
実際に私は得る:
この結果はわかりません。少し前に文法を勉強したことがありますが、今はすべてを覚えていなくても、重要な間違いは見当たりません...
よろしくお願いします。
exception - ANTLR:同様のリテラルを持つMismatchedTokenException
私は以下を持っています
入力:
レクサーがこれとのマッチングに問題があるのはなぜですか?ANTLRが「a_b」の「a_」と一致する場合、バックトラックするか、先読みなどを使用して、トークンAと一致しないことを確認してから、トークンAを「a」と一致させてから、トークンBを「_b」と一致させる必要がありますか?
私は、antlrがどのように機能するかについて非常に基本的なことを誤解していると思います。私はANTLRドキュメントとグーグルでそれを読んでみました。しかし、レクサーとパーサーを使った経験はほとんどありません。
助けてくれてありがとう。
php - Javascript lexer / tokenizer (PHP) はありますか?
Mozilla.org で Javascript Lexer に関する 2 つの Python Javascript トークナイザーと不可解なドキュメントを見てきましたが、特に PHP 用の Javascript トークナイザーは見つかりませんでした。いずれかがあります?
ありがとう
xml - パーサーとレクサーおよび XML
私は現在、コンパイラとパーサーのアーキテクチャについて読んでいますが、1 つのことについて疑問に思っています... XML、XHTML、HTML、または SGML ベースの言語を使用している場合、ここでのレクサーの役割とトークンは何でしょうか?
トークンは、 lexerによる解析用に準備された単語のようなものだと読んだことがあります。キーワード、名前、リテラル、その他の単語のような文字列が空白で区切られている C、C++、Pascal などの言語のトークンを見つけることに問題はありませんが、XML では問題があります。どんな言葉でも!これは、マークアップ (タグ) がインターリーブされたプレーン テキストのみです。
これらのタグとプレーンテキストの断片がトークンである可能性があると思いました[TXT][TAG][TAG][TXT][TAG][TXT][TAG][TAG][TXT]...
。SGML はマークアップ区切り文字の内部にあるものを気にせず<
(>
まあ、それが見つかったとき、?
または!
次の文字として特別な処理命令と定義を認識します。コメントもそのグループに属します)、SGML トークナイザーはXML/HTML/XHTML パーサーのベースになります。
しかし、その後、他の構文の一部としてマークアップ内に文字が詰め込まれる可能性があることに気付きました<
:エディターはそれを処理し、これらをタグ区切り文字ではなく、属性値の一部として扱います。<
<
<
レクサーの単純な決定論的有限オートマトン (DFA) によってそのようなマークアップを認識する方法が見当たらないため、少し複雑になります。オートマトンがタグ内にある場合は別のコンテキストが必要であり、属性値に遭遇した場合は別のコンテキストが必要なようです。これには状態/コンテキストのスタックが必要になると思うので、DFA はそれを処理しない可能性があります。私は正しいですか?
あなたの見解は?タグ(マークアップ)とプレーンテキストからトークンを作るのは良いですか?
ここ: http://www.antlr.org/wiki/display/ANTLR3/Parsing+XML
は、ある種の異なる手法を使用しています: それらは<
and >
(および and も</
)/>
を個別のトークンとして扱い、タグ内ではGENERIC_ID
トークンとして使用します。 .通常、ほとんどの作業をパーサーに移します。しかし、トークナイザーのコンテキストも変更する必要があります。プレーンテキストでは異なるコンテキストを使用し、マークアップでは異なるコンテキストを使用します (しかし、属性値のコンテキストを忘れていたと思います>
。
では、SGML に似た言語を解析するための最良のアプローチは何でしょうか? レクサーは本当にそこで使われていますか?はいの場合、どの文字列がトークンを構成していますか?
java - ANTLR: Unicode 文字スキャン
問題: Unicode 文字を正しく印刷できません。
これが私の文法です:
レクサーを呼び出す main メソッドのコード スニペット:
入力"ठ"の場合、次の出力が得られます。
lexer は Unicode char "ठ" を 3 つの別個の文字として扱っているようです。私の目標は、「ठ」をスキャンして印刷することです。
c++ - 「検索」キーワードの最も効率的な方法
さて、私は字句解析器の一部として、キーワードとの一致を「検索」または検索する関数を作成しています。私のレクサーは、単一文字および複数文字の演算子(+ - * / > < = == etc
)などのすべての明白なトークンをキャッチします(コメントと空白もすでに削除されています)ので、英数字(アンダースコアを含む)のみのストリームを収集した後、関数を呼び出しますstring
。次に、文字列は既知のキーワードまたは識別子として一致する必要があります。
それで、私はそれをどのように特定するのか疑問に思いましたか?基本的に、リストや配列、またはすべての組み込みキーワードの何かと比較する必要があることを知っています。それが1つのリターンに一致する場合は、対応する列挙値に一致します。それ以外の場合、一致するものがない場合は、関数または変数の識別子である必要があります。では、どのように一致を探す必要がありますか?二分探索木と呼ばれるものがそれを行うための効率的な方法であるか、ハッシュテーブルを使用することによってどこかで読んだことがあります。問題は私も一度も使用したことがないので、それが正しい方法かどうかわかりません。MySQLデータベースを使用できますか?
javascript - ANTLR - レクサー ルールの複数のトークンを発行する
ターゲット言語が JavaScript であることを考慮して、ANTLR がレクサー ルールの複数のトークンの発行をサポートしているかどうかを知りたいと思いました。Java や CSharp などの他のターゲット言語で複数のトークンをサポートしていることがわかりましたが、JavaScript でサポートされているこの機能に関するドキュメントは見つかりませんでした。
誰かがこれに関する資料を私に指摘できれば、それは素晴らしいことです.
ありがとう!!
antlr - Antlr (lexer): 正しいトークンのマッチング
私の Antlr3 文法には、次のような「重複する」レクサー ルールがいくつかあります。
100110や123などのトークンは、これらのルールの複数に一致する可能性がありますが、どのルールにする必要があるかは常にコンテキストによって決定されます。例:
入力{17}は{、INT、および}と一致するはずですが、レクサーは17が NAT トークンであるとすでに判断しています。この動作を防ぐにはどうすればよいですか? バックトラックオプションは既に true に設定されていますが、パーサー ルールにのみ影響するようです。