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

image-20260223164111032

输出信息

image-20260223164134678

posted @ 2026-02-23 19:33  wilshappy  阅读(5)  评论(0)    收藏  举报