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

📄 lex.txt

📁 一个使用yacc工具编程的小例子
💻 TXT
字号:
.y文件
%{
#include <stdlib.h>
int yylex(void);
%}
%token NUMBER VARIABLE
%left '+' '-'
%left '*' '/'

%%
Elist  : Elist  E '\n'
       |
        ;
E : E '+' T              { printf("E->E+T\n"); }
       | E '-' T         { printf("E->E-T\n"); }
       | T               { printf("E->T\n");   } 
       ;

T : T '*' F			     { printf("T->T*F\n"); }
	   | T '/' F 		 { printf("T->T/F\n"); }
	   | F               { printf("T->F\n");   }
	   ;

F : VARIABLE 			 { printf("F->id\n");  }
	   | '(' E ')' 	     { printf("F->(E)\n"); }
	   | NUMBER         { printf("F->num\n"); }
	   ;

.l文件

%{
#include <stdlib.h>
void yyerror(char *);
#include "myyacc_1.h"
extern int yylval;
%}
letter        [a-zA-Z] 
digit         [0-9]
num           {digit}+(.{digit}+)?(E[+|-]?{digit}+)?
id            {letter}({letter}|{digit})*
%%
{num}         { yylval=atoi(yytext); return NUMBER;  }
[-+()*/\n]    { return *yytext; }
{id}          { yylval=atoi(yytext); return VARIABLE; }
[ \t]         { /*do nothing*/ }
.             { yyerror("无效字符"); }

%%
int yywrap(void){

    return 1;
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -