2010-11-26 7 views
1

例を教えてください。次のようにしているテキストファイルの内容を仮定 :LexとYaccをプログラムして部分ファイルを解析する方法

機能FUN1 {
    int型A、B、Cと、
   関数fun2 {
        int型D、E。
        char fg;
       機能fun3 {
            int型H、I。上記テキストファイルで
       }
   }

、開く括弧の数は、閉括弧の数に一致されていません。ファイル全体が構文に従わない。しかし、部分関数fun2とfun3は構文に従います。通常、テキストファイルは非常に大きいです。

ファイル全体、つまり関数fun1を解析したい場合、中括弧が一致しないので、プログラムはエラーを出力する必要があります。しかし、ユーザが部分ファイル、すなわち関数fun2/fun3のみを解析したい場合、中括弧が一致するので、プログラムはエラーを投げてはならない。

今質問があります 1. LexとYaccに部分ファイル のみをロードさせる方法はありますか?もしそうなら、どのようにして行う必要がありますか?

答えて

2

bison/flexまたはplain yacc/lexを使用していますか? 私はyaccで遊んだのは長い時間です。

技術的な回答は、両方のツールで異なります。

フレックスでthe buffer mechanismを処理する必要があります。 最後のコードはよりクリーンになります。

レックスを使用すると、すべて手作業で行う必要があります。 少なくとも、入力マクロと入力マクロは再定義する必要があります。 また、yyinとfseekで試してみることもできます。

エラー管理に対処する必要がありますパーサ側で

yyerrokマクロ)とerrorトークン

http://dinosaur.compilertools.net/bison/bison_9.html#SEC81

関連する問題