構文を追加して、カスタム .c ファイルの単純な解析を実装しようとしています。
例: test.c 。
// I don’t need this in output
int func1(int a, int b);
//I need this.
@parseme int func2(int a, int b);
//and this …
@parseme
void func3()
{
Int a;
//put here where ever
…
{
//inside block
}
return;
}
.
lexer フェーズでファジー解析アプローチを使用してから、パーサー ルールで TokenRewriteStream とテンプレートを使用してトークンを書き換えます。
まあそれはレクサーピースです…
lexer grammar Lexi;
options {filter = true;}
// Pick everything between @parseme and ';' or '{ }'
METHOD
: HEADER .* (';' | BODY )
;
fragment
HEADER
: '@' ('parseme' | 'PARSEME') ;
fragment
BODY: '{' .* '}' ;
.
… 専門家にとっては、この問題は単純です。「 @parseme void func3() … の最後の '}' に到達する前に。2- ブロック内で右カーリーが見つかった場合、レクサーは解析を停止します。3- そして確かにもっと多くのケースがまだテストされていません.
問題は本当に明白です。解決策も?? よろしくお願いします!! </p>
ありがとう。