問題タブ [bison]
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 - Bison 構文エラー (初心者向け)
私は戻ってきて、独自の言語と OS を書いていますが、独自の開発言語の開発を開始しているため、Bison を使用するといくつかのエラーが発生し、それらを解決する方法がわかりません。これは私の *.y ファイル コードです。
そして、このソース コードで Bison を使用しようとすると、次のエラーが発生します。
calc.y:1.1-5: 構文エラー、予期しない識別子:
c - Bison使用時のエラー
今、私は他のものを手に入れています。を実行するbison -d calc.y
と、コンソールに多くのソースコードが表示されます (多くのm4_define
) が、ファイルは生成されません。今私のコードは次のようになります:
元の質問
独自の開発言語を作成しようとしていますが、開始するのが非常に難しく、開始すると多くのエラーが発生し、解決方法がわかりません。これは私のコードです:
calc.y ソース コード ファイル:
そして今、コンパイラログ:
なにが問題ですか?
yacc - バイソンとレックス文字列対文字
フォームの評価と表現を試みています
expr は、特定の文字から構成される文字列または上記の関数のいずれかです。したがって、これは次のようになります
問題は、次の形式でトークンにブレーキをかけた場合です。
次のようなものがある場合、文法の構築に問題があります
文法が間違っているのか、ASTの実装が間違っているのか、よくわかりません。
nm の場合、expr は expr expr になり、n*m の値を返すため、論理に欠陥があることがわかりました。これはまだ nm です。これは無限ループを引き起こしますか?そのような式をどのように解析すればよいですか。
石を投げないでください。バイソン初心者
後で編集 して、AST といくつかのリンクされたリストの背後にあるコードをクリーンアップしてテストすることができました。唯一の問題は文法のままです。
この文法は、Frac[m^2][m^4] node / node K m^4 node K m^4 のような expr では失敗します。
bison - バイソンを使用するときにゴミを見る
私はBisonを使用してコンパイルしようとしています(これが正しい単語であるかどうかはわかりません)が、このソースコードをコンパイルしようとすると:
コンソールに「ゴミ」が表示されます(ファイルなどではありません)。http://pastie.org/650893をご覧ください。
よろしくお願いします。
c - 「\t%.10g\n」とは
私は Bison の初心者ですが、C/C++ ではありません。開発と正規表現のこの時点では、このようなことは聞いたことがありません\n
。新しい行に使用されるのは だけですが、の説明は何か知りたいです\t%.10g
。コードでは次のようになります。
よろしくお願いします。
c - Flex と Bison との字句結合
一般的な Flex/Bison パラダイムに適合しない言語を認識しようとしています。セマンティック コンテキストに応じて、完全に異なるトークン ルールがあります。例えば:
Bison は明らかにこれらのタイプの文法の認識をサポートしていますが、それらを効果的にサポートするには「字句結合」が必要です。これを行うためのインターフェイスを提供しますが、コンテキストに応じて異なるフレックス正規表現を正確に指定する方法については混乱しています。
前もって感謝します :)
c++ - Simple Flex / Bison C ++
私はすでに自分の答えを探しましたが、簡単な例ではすぐに応答がありませんでした。
C ++クラスを使用してASTなどを作成したいという理由だけで、g++を使用してflex/bisonスキャナー+パーサーをコンパイルしたいと思います。
インターネットで検索すると、いくつかのエクスプロイトが見つかりました。必要なのは、lexファイルでextern"C"を使用していくつかの関数プロトタイプを宣言することだけだということです。
だから私のshady.yファイルは
shady.lファイルは
最後に、makefileでgccの代わりにg++を使用します。
flexとbisonは正しく機能しますが、リンクすると次のエラーが発生します。
もちろん、bisonファイルの関数について何かを変更しようとすると、yylexがyyparseのスコープで宣言されていないと表示されます。
見た目よりも複雑なものを単純に解決しようとしていますか?実際、オブジェクト指向の方法で解析とレクサーにアクセスするために閉じた構造は必要ありません。それを機能させたいだけです。
bisonファイルでC++を使用して(ASTを作成し)、C ++オブジェクトからyyparse()を呼び出せるようにしたいだけです。
前もって感謝します
macros - yacc/bison lex での #define マクロの処理
#define
yacc/bison でマクロを実装するにはどうすればよいですか?
すべての定義文字は通常の変数と一致する必要があると考えていました。変数は次のように定義されて[a-zA-Z_][a-zA-Z0-9_]*
いるので、変数が定義されているかどうかを確認するためにそこにチェックを入れることができると思います。次に、テキストを本来あるべきものに置き換えます。
どうやってやるの?現時点では、BAD という単語#define BAD
を C で定義したかのように完全に無視したいと考えています。以下はその lex ルールのコードですが、間違っています。また、lex は「BA」がストリームにあることに文句を言います。以下は完全に間違っていて非論理的であることを知っているので、どのようにBADを無視し、次にそれをfloatのようなものに置き換えるにはどうすればよいですか
主な手順は、1) 定義を定義する、2) ソースでそれを検出する、3) lex にマクロ文字を忘れさせる、4) 新しい正しい文字を挿入する、ということを知っています。
warnings - Bison ビルドの警告: 「-s オプションが指定されていますが、デフォルトのルールに一致する可能性があります」
警告が表示されます
「オプションは指定されていますが、デフォルトのルールは一致する可能性があります」とグーグルで検索 すると、Flexマニュアルの診断に関する章と、診断セクションの古いFlexマンページのこのエントリが見つかります。
警告、「-s オプションが指定されましたが、デフォルト ルールを一致させることができます」は、(おそらく特定の開始条件でのみ) デフォルト ルール (任意の 1 文字に一致) が特定の入力に一致する唯一のものである可能性があることを意味します。が与えられたので
-s
、おそらくこれは意図したものではありません。
-s
私のビルドファイルにはオプションがありません。私が書いた
この警告を修正するにはどうすればよいですか?
これは、私の lex ファイルの小さなバージョンです。このファイルも警告をトリガーします
printing - 印刷機能を作成する
私はBisonを学んでいて、現時点ではrpcalcの例だけを実行していますが、印刷関数(Cなど)を実装したいのですがprintf
、これを行う方法がわからないため、計画しています。このような構文を使用する必要がありますprint ("Something here");
が、print関数を作成する方法がわからず;
、行末として作成する方法もわかりません。
ご協力いただきありがとうございます。