問題タブ [compiler-compiler]
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 - TinyPG で BNF の既存の言語を使用しますか?
GOLD メタ構文(RegExp + BNF) にあるこれらの BNF 文法をTinyPG で使用するにはどうすればよいですか? 私は BNF を初めて使用するので、BNF を EBNF に変換するには、どのような種類の変換を行う必要がありますか?
RegExp + BNFである GOLD 文法と比較して、TinyPG は RegExp + EBNFを必要とするため、かなり単純なはずだと思います。
また、利用可能な言語の TinyPG ソース コードはありますか?
c# - TinyPG とは何ですか? また、どのように機能しますか?
TinyPG とは何ですか? また、どのように機能しますか? 「コンパイラ-コンパイラ」であることは知っていますが、C# で独自のコンパイラを作成するにはどうすればよいですか?
php - この文法はLR(1)ではありませんか?
私はPHP用のパーサジェネレータに取り組んでいます。現在、正規LR(1)パーサーを実装しようとしていますが、次の文法でreduce-reduce競合が出力されます。この文法はLR(1)ではありませんか?または、アルゴリズムを再確認する必要がありますか?
バイソン(のような)表記の文法:
編集:
計算されたテーブル:
と競合:
c# - What is the fastest parser generator tool for C# output?
I am looking for a parser generator tool which gives C# output and fairly fast. My objective is to parse JSON like text and create CLR object out of it. I used GOLD Parser engine for this but it turned out to be slow for my need. Can anyone please suggest me a good and fast parser generator tool which emits C# code? I heard about Irony and ANTLR but don't have experience with them. Do they generate considerably faster parser or is there any better options?
javascript - 1 つの LALR(1) 解析に関するヘルプが必要
Context Free Artと呼ばれる文脈自由言語を解析しようとしています。YACC のような JS LALR(1) パーサー ジェネレーターJSCCを使用して、Javascript でパーサーを作成しました。
次の CFA (Context Free Art) コードの例を見てみましょう。このコードは有効な CFA です。
A
上記のとに注意してくださいs
。s
をスケーリングするコマンドですがCIRCLE
、A
このルールの名前にすぎません。言語の文法では、トークンとして設定s
し、トークンの下にSCALE
あります(文字列に一致する正規表現があり、すべてのトークンの一番下にあります)。A
STRING
これは問題なく動作しますが、以下の場合は壊れます。
これも完全に有効なコードですが、私のパーサーはs
後にrule
as SCALE
token をマークするため、期待していたと言ってエラーになりますSTRING
。
私の質問は、これを説明するためにパーサーのプロダクション ルールを書き直す方法があるかどうかです。関連する生産規則は次のとおりです。
私が考えることができる簡単な解決策の 1 つは、上記のルールのコピーを でSTRING
置き換えて作成することSCALE
ですが、これは、そのような修正が必要な多くの同様のルールの 1 つにすぎません。さらに他にもマッチング可能な端末はたくさんありますSTRING
。つまり、ルールが多すぎるということです。
java - Java の変数キーワードと演算子をサポートするパーサー ジェネレーター (コンパイラー コンパイラー)?
さまざまなキーワードと演算子をサポートするパーサー ジェネレーター (コンパイラー コンパイラー) はありますか?
私の言語には、カスタマイズ可能なキーワードと演算子があります (複数の記号と文字を含めることができます)。以前は、特殊記号を演算子とキーワードにマッピングしてから JFlex を使用することで、この問題を回避していました。現在、構文の強調表示の問題が発生したため (そのために RSyntaxPane を使用しています)、これは単純に機能しません。
編集:ところで、レクサー部分だけが必要です。
また、いくつかの例:
ロシア語のレイアウトでは、中かっこがありません。ロシア語訳では:
キーワードはローカライズすることもできます。たとえば、"function" はロシア語訳では "функция" です。
java - 文法コンパイラ Java 用コンパイラ
私の会社は、Android 用のソフトウェアを作成しようとしています。私たちは Java を使用したいと考えており、会社のソフトウェアには C++ のコンポーネントがあり、移植する必要があります (または、少なくとも NDK を試す前に移植を試みる必要があります)。このコードはAccentを使用して作成され、文法文法を定義します。私が知る限り、元の作家 (現在は亡くなっています) は、文法を指定する方法を指定する文法を書き、その文法とアクセントを使用してコンパイラー コンパイラーをコンパイルしました。コンパイラ-コンパイラは、指定された形式の文法を取得し、バイナリ コードを生成して、その文法に準拠した文字列を解析します。文法のスニペットの例を次に示します。
私の質問は、Antlr またはその他のツールを使用して、Java でこれを行う方法です。コンパイラ-コンパイラ-コンパイラは、私にはかなり複雑に思えます。または、文法的およびセマンティックな XML 情報を含むこのタイプの文法を簡単にコンパイル/解析する方法を知りたいです。
parser-generator - どのパーサジェネレータソフトウェアがC#で実行され、左再帰で言語を解析し、抽象構文木を生成できますか?
私は午前中、ANTLRの基本を理解して、それがLLだけであることを確認しました。構文木が左から右への結合性を持つように、文法で左再帰を維持する必要があります。
編集2: 最近、私は別のパーサジェネレータを必要としていました。MPLexとMPPGは機能していましたが、構成に多少時間がかかったので、もう一度見てみようと思いました。今回、Hime Parser Generatorに出くわしました。1、2時間で、基本的な式をコンパイルして呼び出すことができるLINQ式に変換するパーサーができました。それはばかげたシンプルで、MPLexやMPPGよりもお勧めします。
編集1: GOLDパーサーは必要なことを実行しますが、そのソースが利用できないため、使用できません。
MPLexとMPPGは、それぞれLex/FlexとBison/YaccであるMicrosoftの公式製品です。それらに関するドキュメントはあまりなく、それらは前述のオープンソースプロジェクトの完全なクローンではありませんが、私がそれらを使って必要なことを行うことは可能でした。現実の政治に対処する必要がない場合は、GOLDをお勧めします。GOLDには優れたデバッグGUIとすべてが備わっていますが、オープンソースまたはMicrosoftの公式プロジェクト、MPLexおよびMPPGのいずれかを強制される場合は行く方法かもしれません。上記の2つのアプリケーションは、実際にはGPLEXとGPPGの派生物にすぎないことに注意してください。後者の2つは、Microsoftがプロジェクトを放棄したと思うので、Microsoftの派生物よりも最新のものである可能性があります。Microsoftの派生物について私が見つけた唯一のドキュメントは、VS2008SDKの2つのPDFに含まれています。マイクロソフトはPDFを取りました」VS 2010 SDKでexeを出荷しているにもかかわらず、それらの使用法を説明します。ただし、PDFもexeも2012年に出荷される予定はないようです。
antlr - DSL 文法ファイルから Java クラスを生成する
AST を設定する文法ファイル (BNF/BNF のようなもの) からパーサーを生成する方法を探しています。ただし、開発者が読み取り可能な方法でさまざまな AST クラスを自動的に生成することも検討しています。
例: 次の文法ファイルの場合
次のJavaクラスを生成したいと思います(フィールドの例を示します):
そして、実行時に、AST を表す次のオブジェクト グラフを生成する式「1+1-2」が必要です。
(演算子の優先順位は気にしないでください)。
私は DSL パーサー ジェネレーター (JavaCC/ANTLR とその仲間) を調べてきましたが、見つけた最も近いものは、ANTLR を使用して "enterExpression" と "leaveExpression" スタイルのメソッドでリスナー クラスを生成することでした。"multi" を使用して JavaCC と jjtree を使用して生成されたやや似たコードを見つけましたが、非常に扱いにくく、使いにくいものです。
私の文法ニーズはいくぶん単純なものであり、AST オブジェクト グラフの作成を可能な限り自動化したいと考えています。
ヒントはありますか?
parsing - バイソンを使用してトップダウンの「ツリー」構造を作成する方法は?
この例を見つけましたが、ツリーのボトムアップが作成されます。バイソン、フレックスを使用してツリーのトップダウンを作成することは可能ですか?
擬似コード: