問題タブ [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.
html - Cでインタプリタ(レクサー+パーサー)を効率的に構築するにはどうすればよいですか?
C / C ++コードに直接埋め込むことができるマークアップコード(xmlやhtmlなど)を作成するためのメタ言語を作成しようとしています。これはこの言語で書かれた簡単なサンプルです。私はそれをWDI(Web開発インターフェース)と呼んでいます。
基本的には、html用のユーザーフレンドリーなインターフェイスを備えた変更されたCソースです。ご覧のとおり、従来のタグベースのスタイルは、中括弧で区切られたブロックを使用したCのようなコマンドに置き換えられています。このコードをhtmlに変換し、後でコンパイルできるようにCに挿入するインタープリターを作成する必要があります。C部分はそのままです。wdiソース内では、プリントを使用する必要はありません。すべてのreturnステートメントが出力に使用されます(printf関数で)。プログラムの出力はクリーンなhtmlコードになります。
したがって、たとえば、見出し1のタグは次のように変換されます。
私の主な目標は、次のようにwdiソースをhtmlに変換するインタープリターを作成することです。
tag(attributes) {content}
=><tag attributes>content</tag>
次に、インタプリタから返されたhtmlコードをprintfsを使用してCコードに挿入する必要があります。wdi内で発生する変数と関数も、printfパラメーターとして使用するためにソートする必要があります(サンプルソースのtoCapital(name)の場合)。
wdiのレクサーとパーサーを作成するための効率的な(高速パーサーを作成したい)方法を探しています。すでにフレックスとバイソンを試しましたが、それらが最高のツールであるかどうかはわかりません。良い選択肢はありますか?そのようなインタプリタを作成するための最良の方法は何ですか?この問題に関する簡単な文献を教えてください。
string - Antlr Lexer 引用文字列述語
孤独な単語と引用符で囲まれた文字列をトークン化するレクサーを構築しようとしています。私は以下を得ました:
まれなケースでは、次を解析する必要があります。
3 つのトークン"string"
として: STRING およびword1"
WORDword2
として。基本的に、最後の引用符がある場合、それは WORD の一部である必要があります。引用符が空白で囲まれている場合は、WORD である必要があります。
WORD に対してこのルールを試しましたが、成功しませんでした。
c# - C# での部分 SQL の字句解析
部分的な SQL クエリを解析する必要があります (SQL インジェクション監査ツール用です)。例えば
次のようなトークンに分解する必要があります
少なくとも、私が基にしている SQL 用のレクサー、または C# 用の bison のような優れたツールはありますか (ただし、MySQL 5 のすべてではないにしてもほとんどの文法をサポートする必要があるため、独自の文法を作成したくありません)。
code-generation - JavaME用のパーサジェネレータ
最初に:私はこのSOの質問を見ましたが、残念ながらJavaMEについての言及はありません
Blackberryとその(不快な)JavaMEで実行できるコードを生成するパーサー/レクサージェネレーターを探しています。
たとえば、最初はANTLRを使用できると思っていましたが、ランタイムライブラリはJavaMEと互換性がないようです。
TIA
c# - C# には (直接) flex/yacc ポートがありますか? または、人々が C# に使用するレクサー/パーサーは何ですか?
私が間違っているかもしれませんが、今のところ、C#/.NET 用の直接的な flex/bison (lex/yacc) ポートはないようです。
LALR パーサーでは GPPG/GPLEX を見つけ、LL パーサーでは有名な ANTLR があります。しかし、flex/bison 文法をできるだけ再利用したいと考えています。
- C# 用の flex/bison の直接ポートはありますか?
- 人々が通常 C# に使用するレクサー/パーサーは何ですか? その選択に理由はありますか?
scala - BNF 文法から Scala コードを生成するレクサー/パーサー
ocamlyacc
現在、BNF 文法 (優先順位と結合性を持つファイル)から Scala コードを生成するレクサー/パーサーを探しています。それを行う方法についてほとんど何も見つけられなかったので、私はかなり混乱しています。
解析のために、私はscala-bison
(私が扱うのに多くの問題を抱えていることを)発見しました。他のすべてのツールは、Scala にインポートされた単なる Java パーサーです ( などANTLR
)。
字句解析については、何も見つかりませんでした。
Scala の有名なパーサー コンビネーターも見つけましたが (間違っていたら訂正してください)、それらが非常に魅力的であっても、主にバックトラッキングが原因で多くの時間とメモリを消費します。
だから私は2つの主な質問があります:
- 人々が _parser コンビネータだけに集中しているように見えるのはなぜですか?
- Scala で使用する最適なレクサー/パーサー ジェネレーターの提案は何ですか?
xml-parsing - bison/flex の単純な XML パーサー
bison/flex を使用して単純な xml パーサーを作成したいと考えています。検証、コメント、引数のみは必要ありません<tag>value</tag>
。値は数値、文字列、またはその他のいずれか<tag>value</tag>
です。
たとえば、次のようになります。
それが役に立てば、発生する可能性のあるすべてのタグの名前を知っています。特定のタグで保持できるサブタグの数を知っています。そのようなことをするバイソンパーサーを作成することは可能ですか:
タグとサブタグの数:
- 数値: 1 (値のみ)
- str: 1 (値のみ)
- 追加 | サブ | サブ | ムル | div: 2 (num | str | タグ、num | str | タグ)
上記のような AST を作成するための文法を教えていただけませんか?
lexer - ANTLRの「a」..「z」が$や£などのワイルドカードと一致するのはなぜですか
次の文法を実行すると:
そして私は入力「?test」を与えますなぜantlrはこれを有効な入力として受け入れるのですか?('a' ..'z')は小文字のアルファベット内の文字にのみ一致すると思いましたか?
string - パーサーとレクサーの設計ガイドライン?
少し複雑なデータ形式のレクサー (re2c を使用) とパーサー (Lemon を使用) を作成しています。引用符とコンマで囲まれているが、バランスのとれた中かっこがあるなど)、中かっこ内の文字列、およびパラメーターを含むことができる左中かっこと右中かっこを含む関数呼び出しのように見える文字列。
私が最初に試みたのは、多くの状態を持つレクサーで、各状態は特定の文字列形式に対応していました。しかし、レクサーからの多くの役に立たない「予期しない入力」メッセージ (非常に大きくなった) の後、パーサーの仕事をしようとしている可能性があることに気付きました。私は最初の試行を破棄し、状態が 1 つだけのレクサー、多くの文字トークン、およびトークンをさまざまな文字列型に結合するパーサーを使用しました。これはうまく機能し、何かがオフになっているときにパーサーからより役立つ構文エラーが表示されますが、それでもまだ正しくないと感じています。レクサーに 1 つまたは 2 つの状態を追加することを考えていますが、パーサーから状態を開始すると、特定のインスタンスでどの文字列型が必要になるかについて、より優れた「概要」が得られます。全体的に私は少しばかげているように感じます:(
私は正式なコンピュータ サイエンスのバックグラウンドを持っておらず、数学に重きを置いた理論からは少し離れています。しかし、レクサーが何をすべきか (そしてすべきでないか) とパーサーがすべき作業の部分を説明するチュートリアルや本がどこかにあるかもしれません。適切なトークン パターンを構築する方法、レクサー状態をいつ使用するか、(LALR パーサーを使用して) 再帰規則をいつどのように使用するか、あいまいな規則を回避する方法。基本を教えてくれる実用的な料理本。「Lex と YACC の入門書/HOWTO」は素晴らしかったですが、十分ではありませんでした。データ形式を解析したいだけなので、コンパイラ構築に関する本 (赤いドラゴンの本など) は少し大きすぎるように見えます。
または、誰かがここで簡単なルールを教えてくれるかもしれません。
lexer - 新しいレクサーをscintilla/sciteに追加します(...そして最終的にはwxPython StyledTextCtrl)
シンチラにレクサーを追加した人はいますか?
私はhttp://www.scintilla.org/SciTELexer.htmlで短い指示に従ってきましたが、http: //www.scintilla.org/ScintillaDoc.html#BuildingScintilla(Changing Set of Lexers)で秘密の追加の指示を発見しました。 )。
すべてがコンパイルされ、レクサーをSciTEに問題なく追加できますが、ColouriseMapfileDocメソッドが呼び出されません(printfは出力を生成しません)。たとえばColouriseLuaDocレクサーに同じコードを追加すると、すべてが正常になります(printfは出力を生成します)。
具体的には
- で
scintilla/include/Scintilla.iface
、追加val SCLEX_MAPFILE=99
- そして、品詞クラスID
- scintilla / includeディレクトリで実行し、ファイルが変更
HFacer.py
されたことを確認します。SciLexer.h
- 関数
LexMapfile.cxx
で作成ColouriseMapfileDoc
ファイルの最後で、レクサーIDと名前を関数に関連付けました。
LexerModule lmMapfile(SCLEX_MAPFILE、ColouriseMapfileDoc、 "mapfile");
実行
LexGen.py
してすべてのmakefileを生成します(秘密の指示に従って)- クローンを作成して新しいSciTEプロパティファイルを作成しました
scite/src/others.properties
- いくつかのスタイルを設定する
- の定義に追加
scite/src/SciTEGlobal.properties
されました。$(filter.conf)
open.filter
- この言語をSciTEの言語メニューに追加しました。
- ScintillaとSciTEの両方を構築しました。
- 不平を言って呪われた。
ステップ12を除いて、私は何を間違っていますか?