📄 second.txt
字号:
%{
int id_or_keyword(char * text);
#define END 2
#define VAR 3
#define INTEGER 4
#define WHILE 5
#define IF 6
#define THEN 7
#define ELSE 8
#define DO 9
#define COLON 10
#define PLUS 11
#define MINUS 12
#define STAR 13
#define DIVOP 14
#define EQU 15
#define LITTLE 16
#define BIG 17
#define EQUBIG 18
#define EQULITTLE 19
#define NOTEQU 20
#define ICON 21
#define COMMA 22
#define SEMI 23
#define NAME 25
#define PROGRAM 26
#define REAL 27
#define GIVE 28
#define WHITE 200
#define ERROR 300
%}
dight [0-9]
alpha [a-zA-Z]
alnum [a-zA-Z0-9]
white [\t\n\040]
%%
":=" return GIVE;
":" return COLON;
"/" return DIVOP;
"*" return STAR;
"+" return PLUS;
"-" return MINUS;
"=" return EQU;
"<=" return EQULITTLE;
">=" return EQUBIG;
"<" return LITTLE;
">" return BIG;
"<>" return NOTEQU;
"," return COMMA;
";" return SEMI;
"0"|[1-9]{dight}* return ICON;
{alpha}{alnum}* return id_or_keyword(yytext);
{white}+ return WHITE;
. {printf("unknow invalid char %s \n",yytext);
return ERROR;}
%%
#include <ctype.h>
#include <stdio.h>
#include <string.h>
typedef struct{char *name;int val;} KWORDSTRUCT;
KWORDSTRUCT kwds[]={
{"begin",1},
{"do",DO},
{"program" , PROGRAM},
{"end",END},
{"while",WHILE},
{"if",IF},
{"else",ELSE},
{"integer",INTEGER},
{"var",VAR},
{"then",THEN}
};
KWORDSTRUCT *bsrch(KWORDSTRUCT *a,KWORDSTRUCT *tab,int number)
{
int i;
for(i=0;i<number;i++)
if(!strcmp(a->name,tab[i].name)) return &tab[i];
return NULL;
}
int id_or_keyword(char * lx)
{
KWORDSTRUCT *p;
KWORDSTRUCT dummy;
static int number=sizeof(kwds)/sizeof(KWORDSTRUCT);
dummy.name=lx;
p=bsrch(&dummy,kwds,number);
return (p?p->val:NAME);
}
yywrap()
{
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -