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

📄 totac.lex

📁 一个用C++实现的C的Compiler。 代码风格良好。 原作者自己写了这个编译器
💻 LEX
字号:
ALPHA			[a-zA-Z_]
DIGIT			[0-9]
ID				{ALPHA}({ALPHA}|{DIGIT})*
BASICCHAR		[^\'\"\n]
SLASHCHAR		"\\"|\\\"|\\\'|\\n|\\{BASICCHAR}
NORMALCHAR		{BASICCHAR}|{SLASHCHAR}
STRCHAR			{NORMALCHAR}|\'
SINGLECHAR		{NORMALCHAR}|\"
STRINGCONST		\"{STRCHAR}*\"
CHARCONST		\'{SINGLECHAR}\'
DECIMAL			{DIGIT}+
HEXPREFIX		0x|0X
HEXDIGIT		[a-fA-F]|{DIGIT}
HEX				{HEXPREFIX}{HEXDIGIT}+
DOUBLECONST		{DIGIT}+"."{DIGIT}*
COMMENT			\/\/({NORMALCHAR}|\"|\')*

%x comment

%{
#include <cstdio>
#include "IDHash.cpp"

#include "toTAC.tab.c"

using namespace std;

int PROGRAM_LineNumber = 1;


%}

%%
"/*"					BEGIN(comment);
<comment>[^*\n]*		{ }
<comment>"*"+[^*/\n]*	{ } 
<comment>\n				{ PROGRAM_LineNumber ++; }
<comment>"*"+"/"		BEGIN(INITIAL);


{COMMENT}		{ }
"if"			{ return IF; }
"else"			{ return ELSE; }
"for"			{ return FOR; }
"while"			{ return WHILE; }
"break"			{ return BREAK; }
"return"		{ return RETURN; }
"="				{ return LET; }
"char"			{ return TYPECHAR; }
"int"			{ return TYPEINT; }
"void"			{ return TYPEVOID; }
"null"			{ return SYMNULL; }
"struct"		{ return STRUCT; }
"const"			{ return CONST; }
"bool"			{ return TYPEBOOL; }
"%readreg"		{ return READREG; }
"%writereg"		{ return WRITEREG; }
"%asm"			{ return ASM; }
"&"				{ return AND; }
"|"				{ return OR; }
"~"				{ return CALCNOT; }
"^"				{ return XOR; }
"<<"			{ return SHL; }
">>"			{ return SHR; }
"++"			{ return PPLUS; }
"--"			{ return MMINUS; }
"("				{ return LPAREN; }
")"				{ return RPAREN; }
","				{ return COMMA; }
"."				{ return DOT; }
";"				{ return SEMICOLON; }
"{"				{ return LBRACKET; }
"}"				{ return RBRACKET; }
"["				{ return LSQUARE; }
"]"				{ return RSQUARE; }
"+"				{ return ADD; }
"-"				{ return MINUS; }
"*"				{ return MUL; }
"/"				{ return DIV; }
"%"				{ return MOD; }
"<"				{ return LES; }
">"				{ return GTR; }
"<="			{ return LEQ; }
">="			{ return GEQ; }
"=="			{ return EQL; }
"!="			{ return NEQ; }
"&&"			{ return LOGICAND; }
"!"				{ return NOT; }
"||"			{ return LOGICOR; }
"true"			{ return TRUE; }
"false"			{ return FALSE; }
{ID}			{ yylval.intval = IDHash_ID2int(yytext); return IDENT; }
{HEX}			{ sscanf(yytext, "%x", &yylval.intval); return INT; }
{DECIMAL}		{ yylval.intval = atoi(yytext); return INT; }
{DOUBLECONST}	{ sscanf(yytext, "%lf", &yylval.dblval); return DOUBLE; }
{STRINGCONST}	{ yylval.str = yytext; return STRING; }
{CHARCONST}		{ if (yytext[1] != '\\') yylval.intval = yytext[1]; else if (yytext[2] == 'n') yylval.intval = 10; else if (yytext[2] == 't') yylval.intval = 9; else if (yytext[2] == '0') yylval.intval = 0; else if (yytext[2] == 'b') yylval.intval = 8; else if (yytext[2] == 'r') yylval.intval = 13; else yylval.intval = yytext[2]; return CHAR; }
\n				{ PROGRAM_LineNumber ++; }
[ \t]			{ }
.				{ return NIL; }

%%

int yywrap() { return 1; }

⌨️ 快捷键说明

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