私は EBNF で文法を書こうとしています (本当に正当な理由がなければ、EBNF でなければなりません)。そのためのユーティリティをいくつか探しています。私が最も探しているのは、文法をチェックできるものです。たとえば、それが LALR( n ) であるかどうか、そうである場合はnの値は何かを確認できます。そのようなユーティリティは存在しますか? 他に知っておくべき便利な文法作成ツールはありますか (パーサー ジェネレーターは探していません)。
5 に答える
TinyPGを使用してください!RegEx、EBNFでパーサーを構築し、 C#/VBコードを記述して解析ツリーで何かを行う、軽量 GUI を備えた驚くべきオールインワンコンパイラ コンパイラです。
これは、私が以前に行った短い有益な要約であり、ダウンロードへのリンクも示しています。
TinyPG についての私の理解:
TinyPGを使用すると、以下を記述および開発できます。
組み込みの IDE、Windows のみ(C#.NET で作成、オープン ソース) があります。
組み込みのRegEx ツールを使用して、正規表現を試してプレビューすることができます。RegEx 構文は .NET でサポートされています。これは、出力されたパーサー コードでさえ.NET の正規表現を使用することを意味します。
EBNF を記述して、選択した言語を記述します(最新のプログラミング言語 (C、Java、JavaScript、C#、VB.NET、SQL-89)を記述した無料で入手できる BNF Grammer をいくつか紹介します)。
TinyPG を使用すると、RegExとEBNFが解析ツリー を出力します(この図を参照)。
解析木をどうするか?コンパイラ/インタプリタ/トランスレータ用にC#/VB コード を (TinyPG 内で、BNF 文法規則に従って) 記述します。(TinyPG 内で、提供されたサンプル内の「単純な式 2.tpg」ファイルを開いて、電卓「コンパイラ」のデモを表示します)
TinyPG を使用すると、TinyPG IDE 内でトークナイザー+ パーサー + コンパイラーをコンパイルおよびテストできます。最終的に、すぐに使用できるクラスを使用して C#.NET または VB.NET (任意)のパーサー ソース コードを出力します。
大衆向けの優れたオールインワン コンパイラ コンパイラ。楽しみ!
PS:これについて間違っている場合は修正してください。
Steven Dee の提案をさらに一歩進めて、ANTLR 文法用の対話型 GUI 開発ツールであるANTLRWorksをチェックしてみてください。
文法が特定のパーサーアルゴリズムを許可するかどうかを確認するには、それをパーサージェネレーターに入れるだけです。LALR(1)の場合、文法をYACCに渡して、競合が検出されるかどうかを確認します。
CoCo/R C# がリストにありません。使い方は簡単で、非常に用途が広く、特に便利です。多種多様な言語用のコード ジェネレーターがあります。
C#、Java、C++、F#、VB.Net、Oberon、その他の言語用の Coco/R
ANTLRは、Java の GUI パーサー ジェネレーターであり、文法分析と因数分解のための広範な機能を備えています。FAQ を確認してください。あなたの求めるものをサポートしてくれるかもしれません。