lex是一个高效简单的实现词法分析器的工具,本文的工作只是实现了一个c语言的简易词法分析,识别出单词并打印。后续文章将会有稍微复杂的lex程序,实现了符号表等功能。
先上代码:
%{ #include <stdio.h> %}
WS [ \t\n]*
NUMBER [0123456789]+
ID [a-zA-Z][a-zA-Z0-9]*
LABRACE [{}]
EQUAL [=][=]
LPARNE [()]
SEMICOLON [;]
ASSIGN [=]
ADD [+]
SUB [-]
MUL [*]
DIV [/]
IF [i][f]
WHILE [w][h][i][l][e]
INT [i][n][t]
CHAR [c][h][a][r]
%%
{NUMBER} printf("NUMBER\n");
{IF} printf("IF\n");
{WHILE} printf("while\n");
{INT} printf("int\n");
{CHAR} printf("char\n");
{ID} printf("WORD\n");
{SEMICOLON} printf("semicolon\n");
{ADD} printf("add\n");
{SUB} printf("sub\n");
{MUL} printf("mul\n");
{DIV} printf("div\n");
{LABRACE} printf("LBRACE\n");
{ASSIGN} printf("ASSIGN\n");
{EQUAL} printf("EQUAL\n");
{LPARNE} printf("LPARNE\n");
{WS} /* do nothing */ ;
%%
main(int argc, char *argv[])
{
++argv, --argc;
if ( argc > 0 ) yyin = fopen("E:\\text1.txt", "r" );
else yyin = stdin;
yylex();
getch();
}
博主使用的PARSER_GENERATOR的lex模块,关于环境配置请自行google。上图程序实现了对标识符、数字以及运算符的词法分析,并在识别后打印。
这篇博客介绍了如何利用lex工具实现一个简单的C语言词法分析器,该分析器能够识别并打印标识符、数字和运算符。文章中提供了程序代码,并提到后续会涉及更复杂的lex程序,包括符号表功能。
358

被折叠的 条评论
为什么被折叠?



