lex识别变量以及遇到的坑

首先我们去写一个lex的描述文件

%%
"LET" {printf("Keyword");}
[0-9A-Fa-f]+H { printf("Number"); }
[A-Za-z][A-Za-z0-9]* { printf("Identifier");}
"=" { printf("Operator"); }
. {}
%%

这里需要注意的是如果我们把LET放在第一行是没问题的,但是如果我们把LET那一行给放到后面的会就会报错,报了warning, rule cannot be matched的错误,原因就是因为在处理LET的时候就会实现匹配了前面的规则,后面的规则就无效了

然后我们创建一个.txt文件,在里面输入字符串LET Something01 = DeadBeefH,然后进行用生成的词法分析程序进行分析,得到了下面的结果

KeywordIdentifierOperatorNumber

因为LET正好和Keyword匹配,而Something01正好和Identifier匹配,然后Operator是和=号相匹配的,以及Number是和DeadBeefH匹配的

猜你喜欢

转载自blog.csdn.net/zcmuczx/article/details/80597196