我希望能夠預測模式匹配是否出現在單詞字符之後或非單詞字符之後。換句話說,我想在flex/lex不支持的模式開始處模擬\ b分詞正則表達式字符。在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
我這樣做是因爲我想做類似the dialectizer的事情,我一直想學習如何使用真正的詞法分析器。有時我想要替換的模式需要是單詞的片段,有時它們只需要是整個單詞。
我想你會忘記`%start`指令下的`%%`? – dyomas 2016-11-11 21:34:16