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

📄 casl.l

📁 这是一个软件水平资格考试中使用的CASL汇编语言的编译器,实现文件中包括一个编译器,一个虚拟机,一个类似于Debug的调试器.
💻 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 + -