たとえば、私のレクサーは関数呼び出しパターンを認識します。
//i.e. hello(...), foo(...), bar(...)
FUNCALL [a-zA-Z0-9]*[-_]*[a-zA-Z0-9]+[-_*][a-zA-Z0-9]*\(.\)
これで flex はパターンを認識しますが、パターンの最後の文字を通過します (つまり、foo(...)
内に格納された後yytext
、レクサーは の後の次の文字を指しますfoo(...)
) 。
レクサーポインタを関数パターンの先頭にリセットするにはどうすればよいですか? つまり、 を認識した後foo(..)
、レクサーが の先頭を指すようにしたいfoo(..)
ので、トークン化を開始できます。
正規表現パターンごとに、パターンごとに 1 つのトークンしか返せないため、これを行う必要があります。つまり、一致した後、またはまたはまたはreturn ステートメントのfoo(...)
いずれかのみを返すことができますが、すべてを返すことはできません。foo
(
)