lex.c

来自「C-词法分析」· C语言 代码 · 共 79 行

C
79
字号
%{
/****************************************************************************
mylexer.l
ParserWizard generated Lex file.

Date: 2007年11月8日
****************************************************************************/
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

char reversedWords[6][10]={"else","if","int","return","void","while"};
char temp1;
char temp2;
%}
letter [a-zA-Z]
digit [0-9]
delim " "|"\t"|"\n"
ID {letter}{letter}*
NUM {digit}{digit}*
Spe "+"|"-"|"*"|"/"|"<"|"<="|">"|">="|"=="|"!="|"="|";"|","|"("|")"|"["|"]"|"{"|"}"
any {delim}+

/////////////////////////////////////////////////////////////////////////////
// declarations section

// place any declarations here

%%
"/*" { printf("Comments:\n");
	  temp1 = getchar();
	 temp2 = getchar();
	 while (!(temp1=='*'&&temp2=='/'))
	 {
		putchar(temp1);
		temp1 = temp2;
		temp2= getchar();
	 }
	 printf("\n");
		
}
{Spe} {
   printf("Special symbols:%s\n",yytext);
   }		
{ID} {
   int find = 0;
   int i;
   for( i = 0; i < 6; i++)
   {
		if( strcmp(reversedWords[i],yytext)==0){
			printf("Reserved Words:%s\n",yytext);
			find = 1;
			break;
			}
   }
   
   if(!find)
	printf("ID:%s\n",yytext);
}
{NUM} {
	printf("Num:%s\n",yytext);
	}
{any} {}
/////////////////////////////////////////////////////////////////////////////
// rules section

// place your Lex rules here

%%

/////////////////////////////////////////////////////////////////////////////
// programs section

int main(void)
{
	yylex();
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?