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

📄 funcdraw.l

📁 编译原理实验
💻 L
字号:

// -------------------------- funcdraw.l ------------------------------

%{
# include "semantics.h"
# include "y_tab.h"				// 由XDYACC根据源程序生成
unsigned int LineNo;			// 行号
struct Token tokens;			// 记号
%}

// ----------------- 入口声明 -----------------
%x comment_entry c_comment_entry

// ----------------- 辅助定义 -----------------
name	   [a-z]([_]?[a-z0-9])*
number     [0-9]+ 
ws         [ \t]+
newline    \n
comments   "//"|"--"
// 姜江解答模式:
c_comments "/*"([^\*]|(\*)*[^\*/])*(\*)*"*/"
// 习题解答模式:c_comments "/*"([^\*]|\*[^/])*"*/"
// 多重入口模式:c_comments "/*"

%%
// ----------------- 翻译规则 -----------------
{comments}			BEGIN comment_entry ;		// Ada或C++注释
// 多重入口模式:{c_comments}		BEGIN c_comment_entry ;		// C注释
// 单个入口模式:
{c_comments}		;							// C注释
{ws}				;							// 白空
{newline}			LineNo ++;					// 换行

// ------------------- 保留字与变量 -------------------
"origin"|"原点"		return ORIGIN;
"scale"|"横纵比例"	return SCALE;
"rot"|"旋转角度"	return ROT;
"is"|"是"			return IS;
"for"|"令"			return FOR;
"from"|"自"			return FROM;
"to"|"至"			return TO;
"step"|"步长"		return STEP;
"draw"|"绘制"		return DRAW;
"t"					return T;

// ------------------- 常量名、函数与符号 -------------------
"pi"	tokens.type = CONST_ID; tokens.value   = 3.14159;	return CONST_ID;
"e"		tokens.type = CONST_ID; tokens.value   = 2.71828;	return CONST_ID;
"sin"	tokens.type = FUNC;     tokens.FuncPtr = sin;		return FUNC;
"cos"	tokens.type = FUNC;     tokens.FuncPtr = cos;		return FUNC;
"tan"	tokens.type = FUNC;     tokens.FuncPtr = tan;		return FUNC;
"exp"	tokens.type = FUNC;     tokens.FuncPtr = exp;		return FUNC;
"ln"	tokens.type = FUNC;     tokens.FuncPtr = log;		return FUNC;
"sqrt"	tokens.type = FUNC;     tokens.FuncPtr = sqrt;		return FUNC;
"-"		return MINUS;
"+"		return PLUS;
"*"		return MUL;
"/"		return DIV;   
","		return COMMA;
";"		return SEMICO;
"("		return L_BRACKET;
")"		return R_BRACKET;
"**"	return POWER;

// ------------------- 常量字面量 -------------------
{number}(\.{number}+)?	{	tokens.value = atof(yytext) ;  
							tokens.type = CONST_ID;
							return CONST_ID ;
						}
// ------------------- 其他均为错误 -------------------
{name}	return ERRTOKEN;
.		return ERRTOKEN;

// ------------------- 注释的匹配 -------------------
<comment_entry>.	;
<comment_entry>\n	BEGIN 0;  LineNo ++;

<c_comment_entry>"*/"	BEGIN 0;
<c_comment_entry>.		;
<c_comment_entry>\n		LineNo ++;

⌨️ 快捷键说明

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