lex.txt

来自「一个使用yacc工具编程的小例子」· 文本 代码 · 共 54 行

TXT
54
字号
.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 + =
减小字号Ctrl + -
显示快捷键?