[原理] Lex Yacc规则格式
历史
Lex - A Lexical Analyzer Generator.
Yacc: Yet Another Compiler Compiler.
Compilers, Principles, Techniques and Tools (2nd edition). Addison-Wesley, Reading, Massachusetts.
WinFlex和WinBison是Flex和Bison的Windows版本。

image.png
编译顺序

image.png
规则格式

Lex匹配规则

Yacc匹配规则

Lex文件格式

Lex预定义变量
Lex代码示例

ECHO

LineNo

变量名

字符统计
Yacc文法
Yacc的语法是BNF范式的变种。BNF文法可以用来表示上下文无关文法,大多数的编程语言都可以用BNF来表示。

文法

文法可以扩展的表达式

自底向上分析。默认放一个“.”在栈里面。shift操作:一个新的标识符入栈。reduce操作:使用文法进行规约。
Shift -Reduce冲突
例子中的第6步,E+E可以进行Reduce,但是也可以进行Shift。使用符号结合方向和优先级解决。
Reduce-Reduce冲突

id有两种Reduce结果:E或者T。
Yacc语法格式

语法格式
Yacc代码示例
词法分析器输出的Token类型:VARIABLE,INTEGER,-,+,(,),=,/,\n,a-z
词法标识:INTEGER,VARIABLE
符号优先级与结合方式
文法标识:program,statement,expr
int sys[26]:a-z 26个变量的数值
词法分析器匹配到的字符串
yytext相关的数值,比如:在词法分析器匹配到数字的时候,设置yylval=atoi(yytext) ,在语法分析器,就可以通过$1,$2,来读取对应的yylval。

Lex文件

Yacc文件
示例使用

几次输入输出

第1次输入
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2017-04-27 httpclient文件下载