flex与bison学习之一个简单的flex词法分析器
第1章例子-一个简单的flex词法分析器
flowchart LR
A([第一章-flex与bison简介])
A-->B[字数统计]
A-->C[英式英语转换为美式英语]
A-->D[<u>一个简单的flex词法分析器</u>]
A-->E[识别计算器的记号]
A-->F[简易计算器]
A-->G[简易计算器_C语言实现词法分析]
classDef highlight fill:#ffc107,font-weight:bold;
class D highlight;
字数统计
英式英语转换为美式英语
一个简单的flex词法分析器
识别计算器的记号
简易计算器
简易计算器_C语言实现词法分析
一个简单的flex词法分析器
代码(001_3_simple_flex_app.l)
/* 识别出用于计算器的记号并把他们输出 */
%%
"+" { printf("PLUS\n"); }
"-" { printf("MINUS\n"); }
"*" { printf("TIMES\n"); }
"/" { printf("DIVIDE\n"); }
"|" { printf("ABS\n"); }
[0-9]+ { printf("NUMBER %s\n", yytext); }
\n { printf("NEWLINE\n"); }
[ \t] { }
. { printf("Mystery character %s\n", yytext); }
%%
Makefile(model.Makefile)
FILE_NAME = $(file_name)
FLEX_INPUT_FILE = $(FILE_NAME).l
FLEX_OUTPUT_FILE = $(FILE_NAME).c
FLEX_CMD = flex
FLEX_FLAG = -o
GCC_CMD = gcc
GCC_COMPILE_FLAG = -c
GCC_OUTPUT_FLAG = -o
GCC_LINK_FLAG = -lfl
GCC_OBJECT_FILE = $(FILE_NAME).o
TARGET_FILE = $(FILE_NAME)
点击展开代码剩余部分
all: clean flex_main gcc_main
flex_main: $(FLEX_INPUT_FILE)
$(FLEX_CMD) $(FLEX_FLAG) $(FLEX_OUTPUT_FILE) $(FLEX_INPUT_FILE)
gcc_main: $(FLEX_OUTPUT_FILE)
$(GCC_CMD) $(GCC_COMPILE_FLAG) $(FLEX_OUTPUT_FILE) $(GCC_OUTPUT_FLAG) $(GCC_OBJECT_FILE)
$(GCC_CMD) $(GCC_OBJECT_FILE) $(GCC_LINK_FLAG) $(GCC_OUTPUT_FLAG) $(TARGET_FILE)
.PHONY: clean
clean:
@rm -f $(FLEX_OUTPUT_FILE)
@rm -f $(GCC_OBJECT_FILE)
@rm -f $(TARGET_FILE)
编译指令
make -f model.Makefile file_name=001_3_simple_flex_app

测试指令
./001_3_simple_flex_app
#输入以下信息,按Ctrl+D结束
12+43
5 6 / 7q

输出信息


浙公网安备 33010602011771号