📄 casl.l
字号:
%{
#include "../Common/GlobalVariableDef.h"
#include "../Common/CaslUtil.h"
using namespace CaslUtil;
int g_iLineNumber = 0;
char g_chTemp;
%}
%%
"GR0" {return (GR0);}
"GR1" {return (GR1);}
"GR2" {return (GR2);}
"GR3" {return (GR3);}
"GR4" {return (GR4);}
"DC" {return (DC);}
"DS" {return (DS);}
"LD" {return (LD);}
"ST" {return (ST);}
"LEA" {return (LEA);}
"START" {return (START);}
"END" {return (END);}
"ADD" {return (ADD);}
"SUB" {return (SUB);}
"AND" {return (AND);}
"OR" {return (OR);}
"EOR" {return (EOR);}
"CPA" {return (CPA);}
"CPL" {return (CPL);}
"SLA" {return (SLA);}
"SRA" {return (SRA);}
"SLL" {return (SLL);}
"SRL" {return (SRL);}
"JMP" {return (JMP);}
"JPZ" {return (JPZ);}
"JMI" {return (JMI);}
"JNZ" {return (JNZ);}
"JZE" {return (JZE);}
"PUSH" {return (PUSH);}
"POP" {return (POP);}
"CALL" {return (CALL);}
"RET" {return (RET);}
"EXIT" {return (EXIT);}
"IN" {return (CASL_YACC_IN); }
"OUT" {return (CASL_YACC_OUT);}
\'[^'\n\r]+\' {
//return the String Constant
g_strCurrentStrConst = yytext;
{
CaslString strTemp;
strcpy(strTemp, g_strCurrentStrConst.c_str());
if (CASL_UTIL_OP_OK == GetValueOfStringConst(strTemp)) //字符串常量数据提取成功
{
g_strCurrentStrConst = strTemp;
}
else
{
cerr << "invalid string const format" << endl;
}
}
return (STR);
}
[-]*[0-9]* {
//return the DECIMAL Constant
yylval = atoi(yytext); return (CASL_DECIMAL);
}
[A-Z][A-Z|0-9]* {
//return the Label Constant
if (yytext != NULL)
{
yylval = (int)strdup(yytext);
}
//g_strCurrentLabel = (char*)yylval;
return (LABEL);
}
("#")[A-F0-9]* {
//此处应当调用自定义的一个转化函数,根据十六进制数据字符串
//计算出对应的实际数据
//return the Hexadecimal value of the Hex Constant
if (CaslUtil::CASL_UTIL_OP_OK == CaslUtil::GetValueOfHexConst(yytext + 1, yylval))
{
return (HEX);
}
}
";" {
//处理注释行的内容
//Handle commentary contents.
#ifdef _cplusplus
g_chTemp = input();
while ( g_chTemp != '\n' && g_chTemp != EOF)
{
g_chTemp = input(); ;
}
#else
g_chTemp = yyinput();
while ( g_chTemp != '\n' && g_chTemp != EOF)
{
g_chTemp = yyinput(); ;
}
#endif
//be careful to unput the '\n' char !!
//so as to make the SYMBOL NEW_LINE can be returned to the parser!
if ('\n' == g_chTemp)
{
unput('\n');
}
}
"," {
//when meets ',', return it directly!
return (*yytext);
}
" " {
//surpass space
;
}
['\n']* {
g_iLineNumber += strlen(yytext);
return NEW_LINE;
}
\t {
//surpass tab character.
;
}
. {
//return unknown characters directly!
return (*yytext);
}
%%
int yywrap(void)
{
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -