我想让自动机接受使用lex和yacc的正则表达式。正则表达式是R =(ab + a)*。
任何人都可以帮我用lex和yacc构建这个自动机。
感谢。
答案 0 :(得分:1)
首先想到的是这样的事情。不是完整的程序,而是让你开始的东西:
扫描仪(lex):
%%
a return TOKENA; /* for an a in the input */
b return TOKENB; /* for a b in the input */
\n /* ignore end of line */;
[ \t]+ /* ignore whitespace */;
%%
解析器(yacc):
commands: /* empty */
| commands command
{ printf("found a (ab + a)* pattern"); }
command:
ab
|
a
;
ab: TOKENA TOKENB
;
a: TOKENA
;
我不完全确定语法是否有效或有任何减少冲突。