📄 funcdraw.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 + -