C宣言や関数定義のリストを部分的に解析したいと思います。
つまり、それぞれが1つの宣言または関数定義を含むサブストリングに分割したいと思います。
次に、各宣言は(個別に)別のモジュールに渡されます(完全なCパーサーが含まれていますが、直接呼び出すことはできません)。
もちろん、プログラムに別の完全なCパーサーを含めることでこれを行うことができますが、これは避けたいと思います。
私がこれまでに直面したトリッキーなケースは'}'
、宣言/定義を終了するかどうかの問題を含みます。たとえば
int main(int ac, char **av) {return 0;}
...'}'
はターミネーターですが、
typedef struct foo {int bar;} *pfoo;
そうではない。次のような病理学的なコードも存在する可能性があります。
struct {int bar;} *getFooPtr(...) { /* code... */ }
ノート
- 私の関数がそれを見る前に、Cコードがすでに完全に前処理されていると仮定してください。(実際にはそうではありませんが、回避策があります。)
- 私のパーサーはおそらくLPegを使用してLuaに実装されます