bison

    3

    1答えて

    私は最初のパーサーをFlexで書こうとしています& Bison。数字を解析するときに、値をyylval構造体に保存しようとしています。問題は、レクサーが数値に達したときにyylvalがヌルであり、セグメンテーション・フォルトが発生することです。混乱の (関連ポイント:?なぜそれが最もFlexの例(例えばhere)で、yylvalは構造ではなく、構造体へのポインタであるということです私はyylval

    1

    2答えて

    私はフレックスを学ぼうとしています& Bison。私は材料を読んだことがあり、理論的レベルでどのように機能するのか理解しています。しかし、私は精神的なブロックを打つことなく、最も基本的なものを実装するように見えることはできません。 (注:私はコンパイラコースなどを取っていません...これは私の最初のものです。私は、この基本的なものが実装されたことを見れば、ずっと簡単に移動して理解することができると

    2

    2答えて

    私は、パーサーが "asdf"などの入力行やその他の文字の並びとどのように一致するかを理解するために基本的なことに戻ってきました。 マイレクサー: %{ #include %} %% "\n" {return NEWLINE; } マイパーサ: %{ #include <stdlib.h> %} % token NEWLINE %% program: |

    2

    1答えて

    私はパーサを構築する必要があるクラス用のプロジェクトに取り組んでいます。現在、yaccでパーサーを構築する段階にあります。私が現在混乱させているのは、それぞれの非終端記号に型を割り当てる必要があるということです。どのようになど、それは時々、整数またはダブル、またはブール値にはできませんので、exprに形をASSINGでき ... %union { Type dataType;

    1

    1答えて

    yaccの%unionと少し混乱しています。ユニークなユニオンはすべての単一のトークンに対して定義されていますか、またはグローバルユニオンが1つありますか?私は、ユニオン内のすべてをリストにして、データを適切な型に追加する必要があるかどうかを判断しようとしています。

    1

    1答えて

    yaccでオプションのデータをモデル化する最良の方法は何ですか? StmtBlock : '{' VariableDeclList StmtList '}' { $$ = new StmtBlock($2, $3); } ; どちらも、VariableDeclListとStmtListはオプション(イプシロン)されているので、次のように私はそれらをモデル化:私は、次のステ

    1

    1答えて

    は、CコードのビットをTheresのような何か:それは(擬似コード)のようなループに何かに呼び出される int doCommand(char* command) { // +2 on strlen is for the two extra '\0' characters // needed by flex when scanning strings. YY_BUFF

    1

    3答えて

    私はこれに対する答えを探しましたが、私が集めることができるのは、私がスコープの問題を抱えていたことだけでした。 エラーがch3-05.y読み出し:54:エラー:予想 '='、 ' ' ';' '{' トークン 前に、 'ASM' または' 属性' はここにあります私のコードはそのまま %{ #include <stdio.h> #include "ch3hdr2.h" #include <s

    3

    1答えて

    文字列を扱うとき(コメントのような独自の状態があります)、次の文字が "であるかどうか"を調べる必要があります。私の文字列の状態で文字列を終了しないでください(私は<STRING_STATE>.を使用し、手紙で手紙を処理します)。だから、最後の文字列があれば "とマークし、現在のisnt状態最後の文字をunputします。 これは奇妙な効果があります。文字列の行にエラーが発生すると、文字(通常は '

    28

    3答えて

    Bison/Flex/YaccをXCodeに統合する簡単な方法はありますか? 自分の言語を書いて、ObjCオブジェクトとやりとりすることができます。 しかし、ツールはSTDINを入力とし、ObjCの代わりにCコードしか生成しません。基本的には、コマンドラインツールでは便利なように見えますが、そうでない場合は、パーサーコードを再生成するたびに出力をオーバーライドする必要があります。