Я хочу иметь возможность предсказать совпадения с образцом, если они происходят после символов слова или после символов, не являющихся словами. Другими словами, я хочу смоделировать \ b word break regex char в начале шаблона, который не поддерживает flex / lex.
Вот моя попытка ниже (которая не работает должным образом):
%{
#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
Я делаю это, потому что хочу сделать что-то вроде диалектизатор , и я всегда хотел научиться использовать настоящий лексер. Иногда шаблоны, которые я хочу заменить, должны быть фрагментами слов, иногда они должны быть только целыми словами.