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

《编译与反编译技术实战》——1.3 语法分析生成器YACC

本节书摘来自华章计算机《编译与反编译技术实战》一书中的第1章,第1.3节,作者 刘晓楠 陶红伟 岳峰 戴超,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.3 语法分析生成器YACC

语法分析的任务是分析句子是否符合语法规范。YACC(Yet Another Compiler Compiler)是一个经典的语法分析生成器。YACC最初是由AT&T公司的Steven C. Johnson为UNIX操作系统开发的,后来一些兼容的程序如Berkeley YACC、GNU Bison、MKS YACC和Abraxas YACC陆续出现,它们都是在此基础上做了少许改进或者增强,但是基本概念是相同的。现在YACC也已普遍移植到Windows及其他平台上。

语法分析生成器是一个指定某个格式中的一种语言的语法作为它的输入,并为该语言产生分析过程以作为它的输出的程序。在历史上,语法分析生成器被称作编译–编译程序,这是由于按照规律可将所有的编译步骤作为包含在语法分析程序中的动作来执行。现在的观点是将语法分析程序仅考虑为编译处理的一个部分,所以这个术语也就有些过时了。YACC迄今为止仍是常用的语法分析生成器之一。

作为YACC对说明文件中的“%token NUMBER”声明的对应,YACC 坚持定义所有的记号本身,而不是从别的地方引入一个定义,但是却有可能通过在记号声明中的记号名之后书写一个值来指定将赋给记号的数字值。

YACC的输入是巴科斯范式(BNF)表达的语法规则以及语法归约的处理代码,YACC输出的是基于表驱动的编译器,包含输入的语法归约的处理代码部分。

由于所产生的解析器需要词法分析器的配合,因此YACC经常和词法分析器的产生器(通常就是LEX)联合使用,把两部分产生的C程序一并编译。IEEE POSIX P1003.2标准定义了LEX和YACC的功能和需求。

需要指出的是,本书的第4章还有对YACC及其用法更加详细的介绍。

相关文章:

  • 《微信公众平台应用开发实战(第2版)》一第1章 微信公众平台介绍
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 用JS获取地址栏参数的方法
  • QA 应该更新的测试工具
  • 智慧社区APP引领2016生活服务新趋势
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • 苹果希望政府提供iPhone解锁技术愿望落空?
  • hive理论
  • 最大化混合云收益
  • Spring请求参数校验
  • 十年之后大数据的价值主张
  • NetCore偶尔有用篇:NetCore项目添加MIME
  • amazeui学习笔记--css(常用组件15)--CSS动画Animation
  • 诺基亚推出 第一个“百岁级”路由器
  • 解决idea中maven拉不下jar包问题
  • Docker: 容器互访的三种方式
  • ES6--对象的扩展
  • ES学习笔记(12)--Symbol
  • GitUp, 你不可错过的秀外慧中的git工具
  • input的行数自动增减
  • Laravel Mix运行时关于es2015报错解决方案
  • mongo索引构建
  • oschina
  • php面试题 汇集2
  • Spring Cloud中负载均衡器概览
  • Twitter赢在开放,三年创造奇迹
  • 创建一种深思熟虑的文化
  • 对JS继承的一点思考
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 聊聊directory traversal attack
  • 聊一聊前端的监控
  • 每天一个设计模式之命令模式
  • 深入浅出webpack学习(1)--核心概念
  • 使用docker-compose进行多节点部署
  • ​第20课 在Android Native开发中加入新的C++类
  • #git 撤消对文件的更改
  • #数学建模# 线性规划问题的Matlab求解
  • (第二周)效能测试
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (力扣)循环队列的实现与详解(C语言)
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)Scala的“=”符号简介
  • (转)VC++中ondraw在什么时候调用的
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • *1 计算机基础和操作系统基础及几大协议
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET HttpWebRequest、WebClient、HttpClient
  • .Net6使用WebSocket与前端进行通信
  • .net实现客户区延伸至至非客户区
  • @Autowired多个相同类型bean装配问题
  • []C/C++读取串口接收到的数据程序