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