📄 lex.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 + -