パターン マッチが単語の文字の後に発生するか、単語以外の文字の後に発生するかについて述語できるようにしたいと考えています。つまり、flex/lex がサポートしていないパターンの先頭にある \b word break regex char をシミュレートしたいのです。
以下は私の試みです(これは希望どおりに機能しません):
%{
#include <stdio.h>
%}
%x inword
%x nonword
%%
[a-zA-Z] { BEGIN inword; yymore(); }
[^a-zA-Z] { BEGIN nonword; yymore(); }
<inword>a { printf("'a' in word\n"); }
<nonword>a { printf("'a' not in word\n"); }
%%
入力:
a
ba
a
期待される出力
'a' not in word
'a' in word
'a' not in word
実際の出力:
a
'a' in word
'a' in word
私がこれを行っているのは、ダイアレクタイザーのようなことをしたいからであり、実際のレクサーの使用方法を常に学びたいと思っていました。置き換えたいパターンは単語の断片である必要がある場合もあれば、単語全体のみである必要がある場合もあります。