lex實現的簡單詞法分析

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。上圖程序實現了對標識符、數字以及運算符的詞法分析,並在識別後打印。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章