如何为此构建LEX?

时间:2009-12-24 03:10:47

标签: compiler-construction

我想让自动机接受使用lex和yacc的正则表达式。正则表达式是R =(ab + a)*。

任何人都可以帮我用lex和yacc构建这个自动机。

感谢。

1 个答案:

答案 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
    ;

我不完全确定语法是否有效或有任何减少冲突。