⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mylexer.l

📁 Tiny语言的Parser Generator 2词法分析器
💻 L
字号:
%{
/****************************************************************************
test.l
ParserWizard generated Lex file.

Date: 2007年11月7日
****************************************************************************/
#include "util.h"
char tokenString[40+1];
void printToken(TokenType, const char*);
TokenType currentToken;
#define ID 257
#define NUM 258
#define INT 259
#define VOID 260
#define IF 261
#define ELSE 262
#define WHILE 263
#define ASSIGN 264
#define COMMA 265
#define SEMI 266
#define LMPAREN 267
#define RMPAREN 268
#define LPAREN 269
#define RPAREN 270
#define LLPAREN 271
#define RLPAREN 272
#define LE 273
#define LT 274
#define GT 275
#define GE 276
#define EQ 277
#define NE 278
#define PLUS 279
#define MINUS 280
#define TIME 281
#define DEVISION 282
#define RETURN 283

%}

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

// place any declarations here
letter	[A-Za-z]
digit	[0-9]
delim	[ \t]+
ID		{letter}+
NUM		{digit}+
blank	{delim}+
comment (\#[^\n]*)|(\/\*(((\*)*[^\*\/]+(\/)*)*|(\*)*|(\/)*)\*\/)|(\/\/[^\n]*)
//comment "/*"[.*|/n]"*/"
%%


/////////////////////////////////////////////////////////////////////////////
// rules section

// place your Lex rules here

"\n"		{lineno++;}	
"if"		{currentToken = IF; return IF;;}
"else"		{currentToken = ELSE; return ELSE;}
"int"		{return INT;}
"return"	{return RETURN;}
"void"		{return VOID;}
"while"		{return WHILE;}
{ID}		{return ID;}	
{NUM}		{return NUM;}
"<"			{return LT;}
">"			{return GT;}
"<="		{return LE;}
">="		{return GE;}
"=="		{return EQ;}
"!="		{return NE;}
";"			{return SEMI;}
","			{return COMMA;}
"("			{return LPAREN;}
")"			{return RPAREN;}
"["			{return LMPAREN;}
"]"			{return RMPAREN;}
"{"			{return LLPAREN;}
"}"			{return RLPAREN;}
"+"			{return PLUS;}
"-"			{return MINUS;}
"*"			{return TIME;}
"="			{return ASSIGN;}

%%

TokenType getToken(void)
{ static int firstTime = TRUE;
  TokenType currentToken;
  if (firstTime)
  { firstTime = FALSE;
    lineno++;
    yyin = source;
    yyout = listing;
  }
  currentToken = yylex();
  strncpy(tokenString,yytext,40);
  if (TraceScan) {
    fprintf(listing,"\t%d: ",lineno);
    printToken(currentToken,tokenString);
  }
  return currentToken;
}

⌨️ 快捷键说明

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