📄 scan.lex
字号:
%{#include <stdio.h>#include <string.h>#define PROGRAM 1#define BEGIN 2#define END 3#define CONST 4#define SEMI 5 /* ; */#define WORD 6#define BOOLEAN 7#define TRUE 8#define FALSE 9#define INT 10#define REAL 11#define ARRAY 12#define LF 13 /* [ */#define RF 14 /* ] */ #define COMA 15 /* , */#define ASSIGN 16 /* := */#define IF 17 #define THEN 18#define ELSE 19#define WHILE 20#define DO 21#define REPEAT 22#define UNTIL 23#define FOR 24#define TO 25#define READ 26#define WRITE 27#define OPER 28 /* +,-,*,etc */#define LOGIC 34 /* and , or ,not */ #define MATH 37 /* < ,<=, etc*/#define ICON 43 /* intconst */#define FCON 44 /* floatconst*/#define MAOHAO 45 /* : */#define LB 46 /* ( */#define RB 47 /* ) */void output(int cate,char *content);%}digit [0-9]+float [+-]?[0-9]*\.[0-9]+ word [a-zA-Z][a-zA-Z0-9]*logic and|or|notmath >|>=|=|<>|<|<=oper [+|-|*|/]%%program {output(PROGRAM,yytext);}begin {output(BEGIN,yytext);}end {output(END,yytext);}const {output(CONST,yytext);}";" {output(SEMI,yytext);}boolean {output(BOOLEAN,yytext);}true {output(TRUE,yytext);}false {output(FALSE,yytext);}int {output(INT,yytext);}real {output(REAL,yytext);}array {output(ARRAY,yytext);}"[" {output(LF,yytext);}"]" {output(RF,yytext);}"," {output(COMA,yytext);}":=" {output(ASSIGN,yytext);}"(" {output(LB,yytext);}")" {output(RB,yytext);}if {output(IF,yytext);}then {output(THEN,yytext);}else {output(ELSE,yytext);}while {output(WHILE,yytext);}do {output(DO,yytext);}repeat {output(REPEAT,yytext);}until {output(UNTIL,yytext);}for {output(FOR,yytext);}to {output(TO,yytext);}read {output(READ,yytext);}write {output(WRITE,yytext);}{oper} {output(OPER,yytext);}{math} {output(MATH,yytext);}{logic} {output(LOGIC,yytext);}{digit} {output(ICON,yytext);}{float} {output(FCON,yytext);}{word} {output(WORD,yytext);}":" {output(MAOHAO,yytext);}[ \t\n] ;%%void output(int cate,char *content){ switch(cate) { case 1:fprintf(yyout,"(PROGRAM,%s)\n",content);break; case 2:fprintf(yyout,"(BEGIN,%s)\n",content);break; case 3:fprintf(yyout,"(END,%s)\n",content);break; case 4:fprintf(yyout,"(CONST,%s)\n",content);break; case 5:fprintf(yyout,"(SEMI,%s)\n",content);break; case 6:fprintf(yyout,"(WORD,%s)\n",content);break; case 7:fprintf(yyout,"(BOOLEAN,%s)\n",content);break; case 8:fprintf(yyout,"(TRUE,%s)\n",content);break; case 9:fprintf(yyout,"(FALSE,%s)\n",content);break; case 10:fprintf(yyout,"(INT,%s)\n",content);break; case 11:fprintf(yyout,"(REAL,%s)\n",content);break; case 12:fprintf(yyout,"(ARRAY,%s)\n",content);break; case 13:fprintf(yyout,"(LF,%s)\n",content);break; case 14:fprintf(yyout,"(RF,%s)\n",content);break; case 15:fprintf(yyout,"(COMA,%s)\n",content);break; case 16:fprintf(yyout,"(ASSIGN,%s)\n",content);break; case 17:fprintf(yyout,"(IF,%s)\n",content);break; case 18:fprintf(yyout,"(THEN,%s)\n",content);break; case 19:fprintf(yyout,"(ELSE,%s)\n",content);break; case 20:fprintf(yyout,"(WHILE,%s)\n",content);break; case 21:fprintf(yyout,"(DO,%s)/n",content);break; case 22:fprintf(yyout,"(REPEAT,%s)\n",content);break; case 23:fprintf(yyout,"(UNTIL,%s)\n",content);break; case 24:fprintf(yyout,"(FOR,%s)\n",content);break; case 25:fprintf(yyout,"(TO,%s)\n",content);break; case 26:fprintf(yyout,"(READ,%s)\n",content);break; case 27:fprintf(yyout,"(WRITE,%s)\n",content);break; case 28:fprintf(yyout,"(OPER,%s)\n",content);break; case 34:fprintf(yyout,"(LOGIC,%s)\n",content);break; case 37:fprintf(yyout,"(MATH,%s)\n",content);break; case 43:fprintf(yyout,"(ICON,%s)\n",content);break; case 44:fprintf(yyout,"(FCON,%s)\n",content);break; case 45:fprintf(yyout,"(MAOHAO,%s)\n",content);break; case 46:fprintf(yyout,"(LB,%s)\n",content);break; case 47:fprintf(yyout,"(RB,%s)\n",content);break; default:break; }}int main(int argc,char ** argv){ argc--;argv++; if(argc > 0)
{ if((yyin = fopen(argv[0],"r")) == NULL) { printf("%s can not be opened",argv[0]); return 0; } } else { yyin = stdin; } yyout = fopen("result.txt","w"); yylex(); return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -