問題タブ [yacc]
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.
yacc - MKS Yacc が提供する「選択設定」を使用した人はいますか?
私の質問に対する回答がまったく得られなかったので、MKS Yacc に代わる、選択設定の構文または非常に類似したものをサポートするものはありますか? 、より基本的な質問をします。
- MKS Yacc が提供する「選択設定」を使用した人はいますか?
持っている場合、何に使用しましたか。また、ルールの最後の位置以外で使用する意味はありますか?
次のような規則を表す文法に注意する必要があります。
私が何かを誤解していない限り、埋め込まれた選択設定は、このコンテキストでは何の価値もありません。
バックグラウンド
MKS Yacc は、彼らの Web サイトで「選択設定構文」と呼ばれる表記法をサポートしています。図示されていませんが、トークンまたはキャレット付きの角括弧内のトークンのリスト (オプションの場合があります) で構成され、特定のトークンがこの構造に従ってはならないことを示しますが、そのトークンは一部としてカウントされません。このルールの:
したがって、このルールは、次のトークンが a でない限り、 a の後に aTOKEN1
が続き、non_terminal2
aTOKEN2
がa であることを示しています。non_terminal1
ただし、次のトークンが a のTOKEN3
場合は、他のルールが適用されます。
(角かっこで囲まれた項目が非終端記号になるかどうかはわかりません。表記法を使用して見たコードは、常にトークンまたはスペースで区切られたトークンをいくつか使用し、非終端記号を使用することはありません。私もそうではありませんキャレットが必要かどうかを明確にしてください。繰り返しますが、私が見たすべての例でキャレットが使用されています。)
lisp - yacc の Lisp 文法
Lisp 文法を構築しようとしています。簡単ですよね?どうやらそうではありません。
これらの入力を提示すると、エラーが発生します...
これが文法...
私が知る限り、プログラムとして定義された単一の非端末が必要であり、その上で解析ツリー全体がハングアップします。しかし、私はそれを試してみましたが、うまくいかないようでした。
編集-これは私の「トップターミナル」アプローチでした:
ただし、次のような問題が発生する可能性があります。
Edit2: FLEX コードは...
オーバーマッチングの例...
ここでのエラーは何ですか?
編集: エラーはレクサーにありました。
c++ - C/C++ パーサー/アナライザーを作成するための優れたツール
C/C++ コードの解析と解析をすばやく開始するための優れたツールは何ですか?
特に、C/C++ プリプロセッサと言語を処理するオープン ソース ツールを探しています。できれば、これらのツールは文法に lex/yacc (または flex/bison) を使用し、複雑すぎないようにする必要があります。最新の ANSI C/C++ 定義を処理する必要があります。
ここに私がこれまでに見つけたものがありますが、それらを詳細に見ていません (考え?):
- CScope - 古い学校の C アナライザー. ただし、完全な解析は行わないようです。C 関数を見つけるための美化された「grep」として説明されています。
- GCC - みんなのお気に入りのオープン ソース コンパイラ。非常に複雑ですが、すべてを実行しているようです。GEMと呼ばれる GCC 拡張機能を作成するための関連プロジェクトがありますが、GCC 4.1 (2006) 以降更新されていません。
- PUMA - ピュア マニピュレーター。(ページから: 「このプロジェクトの目的は、C/C++ ソースの分析と操作のためのクラスのライブラリを提供することです。この目的のために、PUMA はスキャン、解析、そしてもちろん C/C++ ソースの操作のためのクラスを提供します。」) . これは有望に見えますが、2001 年以降更新されていません。明らかに PUMA はAspectC++に組み込まれていますが、このプロジェクトでさえ 2006 年以降更新されていません。
- さまざまな C/C++ 生の文法。c-c++-grammars-1.2.tar.gzを入手できますが、これは 1997 年以降維持されていません。少し Google で検索すると、出発点として役立つ他の基本的な lex/yacc 文法が引き出されます。
- 他のもの?
これを、C/C++ ソースを新しい玩具言語に翻訳するための出発点として使用したいと考えています。
ありがとう!-マット
(2/9 追加): 明確化: C/C++ コード自体に加えて、プリプロセッサからセマンティック情報を抽出したいと考えています。「#define foo 42」が整数「42」に消えないようにしたいのですが、「foo」という名前に付けたままにしておきます。残念ながら、これにより、最初にプリプロセッサを実行し、C/C++ 解析ツリーのみを提供するいくつかのソリューションが除外されます)。
c# - Lex / Yacc for C#?
実際、本格的なLex/Yaccではないかもしれません。Webアプリを管理するためのコマンドインタープリターフロントエンドを実装しています。文法定義を取得して、オブジェクトのメソッドを直接呼び出すパーサーに変換するものを探しています。ASP.NET MVCが呼び出すコントローラーメソッドを把握する方法、および引数をポニーアップする方法と同様です。
したがって、ユーザーがコマンドプロンプトで「createfoo」と入力した場合、メソッドを透過的に呼び出す必要があります。
ああ、そしてそれがそれらのコントローラーメソッドの(例えば)属性からヘルプテキストを生成することができれば、それも素晴らしいでしょう。
shell - yacc、ルールを1回だけ適用する
yaccとlexを使用してシェルを作成しようとしていますが、I/Oリダイレクタでいくつかの問題が発生しています。現在、<および>演算子は問題なく任意の順序で使用できますが、問題は、「ls>log>log2」などのエラーなしで2回リダイレクトできることです。
私のルールコードは以下のとおりですが、これを修正するためのヒントを教えてもらえますか?ありがとう!
編集:TAと話した後、コマンドに修飾子を1つだけ持つ必要はなく、同じI/Oリダイレクトの複数のコピーを実際に持つことができることを学びました。
c++ - C ++言語の標準のBNFまたはYACC文法はどこにありますか?
レガシーC/C ++ブレンドプロジェクトの単体テストを支援するために、一種のコードジェネレーターに取り組んでいます。宣言からスタブコードを生成できる独立したツールはありません。だから私はそれを作ることにしました、それはそれほど難しいことではないはずです。
どうか、誰でも私に標準の文法リンクを教えてください。yacc言語でよりよく説明されています。
私が車輪の再発明をしていないことを願っています。その場合は私を助けてください。
よろしく、ケビン
parsing - Flex/LexとYacc/Bisonの違いは何ですか?
Flex&LexとYacc&Bisonの違いは何ですか。私はインターネットを乱暴に検索しましたが、確かな答えは見つかりませんでした。
Ubuntuに純粋なLexとYaccをインストールできますか、それともflexとbisonのみをインストールできますか。私は混乱しています。
- LexまたはYaccはまだ誰かによって維持されていますか?
- それらはすべて無料ですか?
Lexが無料でない場合、なぜUbuntuディストリビューションにインストールするのですか?
/li>
dictionary - lex/yacc での辞書データ構造の使用
lex/yacc を使用して作成しているマイクロプロセッサ用のアセンブラを書いています。
アセンブラ コードにラベルを実装したいと考えています。そのための良い方法は、{name:line#} の形式でラベルの辞書を作成することです。次に、ラベルを挿入するときに、ラベルが既に定義されている場合はエラーであることを確認できます。
では、lex/yacc で辞書構造を使用するにはどうすればよいでしょうか?
parsing - 同じアプリケーションで 2 つ以上の Lex/Yacc パーサーを使用することは可能ですか?
ある種類の文法用のパーサーを既に持っているアプリケーションがあり、別の目的のために別の文法を追加する必要があります。
複数持つことは可能ですか?
もしそうなら、どうやって別のエントリポイントを取得しますか?
ありがとう
デビッド・アラン・フィンチ
bison - Lex/Yacc: 入力前にメッセージを表示
lex/yacc (flex/bison) を使用しているときにメッセージ/プロンプトを表示する方法を見つけようとしています。
たとえば、メインは次のようになります。
どちらが yacc を呼び出し、どちらが yylex() を呼び出します。これにより、STDIN で待機する空白行が生成されます。のようなメッセージを表示するにはどうすればよいですか...
それ以外の
アンダースコアはカーソル位置を表し、STDIN からの入力を待機しています...
言及するのを忘れていましたが、プロンプトを繰り返し出力したいと思います...そのため、毎回 lex/yacc が stdin からの入力を要求する前に..