当前位置: 首页 > news >正文

flex与bison学习之识别计算器的记号

第1章例子-识别计算器的记号

识别计算器的记号

代码(001_4_calculator_tokens.l)

/* 识别出用于计算器的记号并把他们输出 */
%{enum yytokentype {NUMBER = 258,ADD = 259,SUB = 260,MUL = 261,DIV = 262,ABS = 263,EOL = 264 /* 行尾结束符 */};int yylval;
%}%%
"+"         { return ADD; }
"-"         { return SUB; }
"*"         { return MUL; }
"/"         { return DIV; }
"|"         { return ABS; }
[0-9]+      { yylval = atoi(yytext); return NUMBER; }
\n          { return EOL; }
[ \t]       { /* 忽略空白字符 */ }
.           { printf("Mystery character %c\n", *yytext); }%%
main (int argc, char **argv)
{int tok;while (tok = yylex()) {printf("%d", tok);if (tok == NUMBER) {printf(" = %d\n", yylval);} else {printf("\n");} }
}

Makefile(model.Makefile)

FILE_NAME = $(file_name)FLEX_INPUT_FILE = $(FILE_NAME).l
FLEX_OUTPUT_FILE = $(FILE_NAME).c
FLEX_CMD = flex
FLEX_FLAG = -oGCC_CMD = gcc
GCC_COMPILE_FLAG = -c
GCC_OUTPUT_FLAG = -o
GCC_LINK_FLAG = -lfl
GCC_OBJECT_FILE = $(FILE_NAME).oTARGET_FILE = $(FILE_NAME)all: clean flex_main gcc_mainflex_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: cleanclean:@rm -f $(FLEX_OUTPUT_FILE)@rm -f $(GCC_OBJECT_FILE)@rm -f $(TARGET_FILE)

编译指令

make -f model.Makefile file_name=001_4_calculator_tokens

image-20260223171341505

测试指令

./001_4_calculator_tokens
#输入以下信息,按Ctrl+D结束
a / 34 + |45

image-20260223171423983

输出信息

image-20260223171449651

http://www.jsqmd.com/news/405827/

相关文章:

  • flex与bison学习之简易计算器
  • flex与bison学习之一个简单的flex词法分析器
  • 2026年谷歌独立站多语种建站公司/服务商深度评测推荐:五强对比与中立对比助决策 - 深圳昊客网络
  • OpenClaw:2026年爆红的本地优先 AI 智能体引擎全解析
  • CrafterCMS 认证RCE漏洞利用 - Groovy沙箱逃逸 (CVE-2025-6384)
  • flex与bison学习之英式英语转换为美式英语
  • sql注入之文件读写
  • 从入门到实战:构建企业级交通实时路况监控系统的Python爬虫架构指南
  • DenseFramelet-DFD:基于密集框架小波变换和自适应阈值降噪的机械故障诊断方法(MATLAB)
  • 探索导弹六自由度运动模型及其MATLAB/Simulink实现
  • 总结了近期考MOS认证学员问的比较的问题
  • 题解:CF1210F2 Marek and Matching (hard version)
  • CF1322B
  • 2026年3月百度推广竞价广告开户代运营公司/服务商深度评测:深圳昊客网络 引领榜单 - 深圳昊客网络
  • 根脉与花开:AI元人文——中华文化思想在智能时代的原创性理论发展
  • AI Agent 框架探秘:拆解 OpenHands(7)--- Agent
  • 视频孪生之上:镜像视界矩阵视频融合驱动三维智慧交通升级——以重庆万州复杂立体交通场景为样本的统一空间坐标体系与跨摄像连续表达工程实践
  • 视频孪生之上 · 空间主权构建:镜像视界矩阵视频融合打造三维连续表达控制体系——基于统一坐标矩阵与动态修正机制的空间级主动感知与连续表达平台
  • 状压dp临行枚举类问题
  • 新的开始
  • CF1313D
  • 【Linux】进程地址空间的内核空间
  • [特殊字符] 基于YOLOv5/v8/v10的商超货架商品陈列面占比分析系统【完整源码+数据集】
  • JAVA WEB学习6
  • 【YOLO目标检测】基于YOLOv5/v8/v10的交通拥堵检测系统:从数据集构建到可视化界面全解析
  • 基于深度学习的鸡数量统计系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
  • 算法题避坑指南:数组/循环范围的 `+1` 到底什么时候加?
  • Neo4j学习笔记1
  • upload
  • 2026年生产力革命:实测上百款AI工具后,这5款真正重塑了我的工作流