📄 pro.y
字号:
%{#include <stdio.h>#include <string.h>extern char yytext[];extern int column;%}%token PROGRAM,BEGINS,END%token CONST,SEMI,id,BOOLEAN,TRUE,FALSE,INT,FLOAT,ARRAY,ASSIGN,IF,THEN,ELSE,WHILE,DO%token REPEAT,UNTIL,FOR,TO,READ,WRITE,MATH,RETURN,NOT%token ICON%token FCON%token ID%nonassoc ID BOOLEAN INT FLOAT%right AND OR%right MATH%left '+''-'%left '*''/'%nonassoc LOW%nonassoc HIGH%nonassoc IFPRE%nonassoc ';'%nonassoc ELSE%left UMINUS%start s%%s : PROGRAM ID';' BEGINS sentences END {} | PROGRAM ID';' declaration BEGINS sentences END {} | PROGRAM ID';' BEGINS END {} | PROGRAM ID';' declaration BEGINS END {}declaration : CONST condef {} | vardec {} | funcdec {} | procdec {} | funcdef {} | procdef {} | CONST condef declaration {} | vardec declaration {} | funcdec declaration {} | procdec declaration {} | funcdef declaration {} | procdef declaration {} ;condef : ID '=' constv';' {} | condef ID '=' constv';' {} ;
constv : ICON {} | FCON {} | TRUE {} | FALSE {} ;vardec : type':'idtable ';' {} | type':'arraytable';' {} | type':'idtable';'vardec {} | type':'arraytable';'vardec {} ;type : INT {} |FLOAT {} |BOOLEAN {} ;idtable : ID {} |idtable','ID {} ;arraytable: ARRAY ID'['dimension']' {} | ARRAY ID'['dimension']'','arraytable {} ;dimension : ICON {} | ICON','dimension {} ;funcdec : ID'('parat')'':'type';' {} |ID'('parat')'':'type';'funcdec {} ;procdec : ID'('parat')'';' {} | ID'('parat')'';'procdec {} ;funcdef: ID'('parat')'':'type declaration BEGINS sentences RETURN ID ';' END {} %prec LOW |ID'('parat')'':'type declaration BEGINS sentences RETURN ID ';' END funcdef {} %prec LOW ;procdef: ID'('parat')' declaration BEGINS sentences END {} %prec LOW |ID'('parat')' declaration BEGINS sentences END procdef {} %prec LOW ;parat : type ID {} | type ID','parat {} ;sentences : sentence {} | sentence sentences {} ;sentence : var ASSIGN exp';' {} | IF exp THEN sentence ELSE sentence {} %prec IFPRE | IF exp THEN sentence {} %prec IFPRE
| WHILE exp DO sentence {}
| REPEAT sentence UNTIL exp';' {}
| FOR ID ASSIGN exp TO exp DO sentence {}
| BEGINS sentences END {}
| READ vartable';' {}
| WRITE exptable';' {}
| procc ';' {} ;vartable : var {} |var ',' vartable {} ;exptable : exp {} | exp ',' exptable {} ;exp : var {} | constv {} | func {} | exp '+' exp {} | exp '-' exp {} | exp '*' exp {} | exp '/' exp {} | exp AND exp {} | exp OR exp {} | NOT exp {} %prec UMINUS | exp MATH exp {} | '-' exp {} %prec UMINUS | '('exp')' {} ; var : ID {} |ID '['dimension']' {} ; func : ID'('para')' {}procc: ID'('para')' {}para : constv {} | constv','para {} | var {} | var','para {} ;%% yyerror(s)char *s;{ //fflush(stdout); printf("\n%*s\n%*s\n", column, "^", column, s);}main()
{
//yydebug = 1; int yyparse();
return(yyparse());
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -