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

📄 second.txt

📁 这是编译原理的源代码
💻 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 + -