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

📄 casl.y

📁 这是一个软件水平资格考试中使用的CASL汇编语言的编译器,实现文件中包括一个编译器,一个虚拟机,一个类似于Debug的调试器.
💻 Y
字号:
%{
#include <math.h>
#include <malloc.h>
#include <stdlib.h>
%}
%token DECIMAL
%token HEX
%token ID
%token LABEL
%token DS
%token DC
%token GR0
%token GR1
%token GR2
%token GR3
%token GR4
%token LD
%token ST
%token LEA
%token ADD
%token SUB
%token AND
%token OR
%token EOR
%token CPA
%token CPL
%token SLA
%token SRA
%token SLL
%token SRL
%token JMP
%token JPZ
%token JMI
%token JNZ
%token JZE
%token PUSH
%token POP
%token CALL
%token RET
%token START
%token END
%token IN
%token OUT
%token EXIT
%%
PROGRAM:  START BODY END {printf("Input Ok!\n");};

BODY: DEFPART EXECPART;

DEFPART: DEFPART  DEFDETAIL | ;

DEFDETAIL: DSDEF | DCDEF;

DSDEF: LABEL  DS  DECIMAL;

DCDEF: LABEL  DC  CONST;

CONST: HEX | DECIMAL | LABEL;

EXECPART: EXECSTMT EXECPART | EXECSTMT;

EXECSTMT: MEMSTMT | 
	  MATHSTMT |
	  LOGSTMT | 
	  RELSTMT |
	  CONDSTMT | 
          STACKSTMT|
	  PROCSTMT |
          MACROSTMT
MEMSTMT: LDSTMT | LEASTMT | STSTMT

LDSTMT:  LD GR','EA;

LBLSTMT: LABEL | ;

GR: GR0 | GR1 | GR2 | GR3 |GR4;

EA: ADDR XRADDR;

ADDR: DECIMAL | LABEL;

XRADDR: ','GR | {;};

STSTMT: LBLSTMT ST GR','EA;

LEASTMT: LBLSTMT LEA GR','EA;

MATHSTMT: ADDSTMT | SUBSTMT;

ADDSTMT: LBLSTMT ADD GR','EA;

SUBSTMT: LBLSTMT SUB GR ',' EA;

LOGSTMT: ANDSTMT | ORSTMT | EORSTMT;

ANDSTMT: LBLSTMT AND GR ',' EA;

ORSTMT: LBLSTMT OR GR ','  EA;

EORSTMT: LBLSTMT EOR GR ',' EA;

RELSTMT: CPASTMT | 
	 CPLSTMT |
	 SLASTMT |
	 SRASTMT |
	 SLLSTMT |
	 SRLSTMT 
CPASTMT: LBLSTMT CPA GR ',' EA
CPLSTMT: LBLSTMT CPL GR ',' EA
SLASTMT: LBLSTMT SLA GR ',' EA
SRASTMT: LBLSTMT SRA GR ',' EA
SLLSTMT: LBLSTMT SLL GR ',' EA
SRLSTMT: LBLSTMT SRL GR ',' EA

CONDSTMT: JMPSTMT | 
	  JPZSTMT | 
	  JMISTMT |
	  JNZSTMT |
	  JZESTMT
JMPSTMT: LBLSTMT JMP EA
JPZSTMT: LBLSTMT JPZ EA
JMISTMT: LBLSTMT JMI EA
JNZSTMT: LBLSTMT JNZ EA
JZESTMT: LBLSTMT JZE EA

STACKSTMT: PUSHSTMT | POPSTMT
PUSHSTMT: LBLSTMT PUSH EA
POPSTMT: LBLSTMT POP GR
PROCSTMT: CALLSTMT | RETSTMT
CALLSTMT: LBLSTMT CALL EA
RETSTMT: LBLSTMT RET
MACROSTMT: EXITSTMT | INSTMT | OUTSTMT
EXITSTMT: LBLSTMT EXIT
INSTMT: LBLSTMT IN LABEL ',' LABEL
OUTSTMT: LBLSTMT OUT LABEL ',' LABEL
%%
#include "Lex.yy.c"

	int yyerror(char *s)
	{
	   
	   printf("%s\n",s); return;
	 }

int main()
{
   FILE * fp;
   fp = fopen("test.casl", "r");
   if (NULL != fp)
   {
	yyin = fp;     
   }
   else
   {
	yyin = stdin;
   }

   yyparse();
   return 0;
}

⌨️ 快捷键说明

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