yacc

news/2024/11/29 20:32:04/

根据BNF自动生成语法分析器代码的程序,最后输出一颗语法树出来。

全称

  yacc(Yet Another Compiler Compiler)

编辑本段简介

  是Unix/Linux上一个用来生成 编译器 的编译器(编译器代码生成器)。yacc生成的编译器主要是用C语言写成的语法解析器(Parser),需要与词法解析器Lex一起使用,再把两部份产生出来的C程序一并编译。yacc本来只在Unix系统上才有,但现时已普遍移植往Windows及其他平台。

编辑本段分析程序生成器

  分析程序生成器(parser generator)是一个指定某个格式中的一种语言的语法作为它的输入,并为该种语言产生分析过程以作为它的输出的程序。在历史上,分析程序生成器被称作编译-编译程序( compiler- compiler ),这是由于按照规律可将所有的编译步骤作为包含在分析程序中的动作来执行。现在的观点是将分析程序仅考虑为编译处理的一个部分,所以这个术语也就有些过时了。合并 LALR(1) 分析算法是一种常用的分析生成器,它被称作 Yacc( yet another compiler- compiler )。给出 Yacc 的概貌来,将使用Yacc为 TINY 语言开发一个分析程序。
  作为 Yacc 对说明文件中的 %token NUMBER 声明的对应。Yacc 坚持定义所有的符号记号本身,而不是从别的地方引入一个定义。但是却有可能通过在记号声明中的记号名之后书写一个值来指定将赋给记号的数字值。
  yacc的输入是巴科斯范式(BNF)表达的语法规则以及语法规约的处理代码,Yacc输出的是基于表驱动的编译器,包含输入的语法规约的处理代码部分。
  yacc是开发编译器的一个有用的工具,采用LALR(1)语法分析方法。
  Yacc最初由AT&T的Steven C. Johnson为Unix操作系统开发,后来一些兼容的程序如Berkeley Yacc,GNU bison,MKS yacc和Abraxas yacc陆续出现。它们都在原先基础上做了少许改进或者增加,但是基本概念是相同的。
  由于所产生的解析器需要词法分析器配合,因此Yacc经常和词法分析器的产生器——一般就是Lex——联合使用。IEEE POSIX P1003.2 标准定义了Lex和Yacc的功能和需求。
  http://dickey.his.com/byacc/byacc.html Berkeley Yacc 一般认为是目前最好的yacc变种。与bison相比,避免了对特定编译器的依赖。
  http://www.informatik.uni-freiburg.de/proglang/software/essence/ Essence,Scheme的LR(1)语法解析器的生成器
  http://download.plt-scheme.org/scheme/plt/collects/parser-tools/ 用于DrScheme的语法解析工具
  http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/ Coco/R Java和C#的扫描和解析器
  http://mhss.nease.net/unix/yacc.html Yacc: 另一个编译器的编译器,Stephen C. Johnson

http://www.ppmy.cn/news/481411.html

相关文章

ASAN

ASAN(Address-Sanitizier)早先是LLVM中的特性,后被加入GCC 4.8,在GCC 4.9后加入对ARM平台的支持。因此GCC 4.8以上版本使用ASAN时不需要安装第三方库,通过在编译时指定编译CFLAGS即可打开开关。 1、编译选项 1.1 Gcc…

Bani Yas

第一个子阶段的项目说明在下面列出,首要任务是创建一个restfulApi能够被前端首要来交互数据 Web Service “Bani Yas”将提供需要你创建的 web services (网站服务) 的列表/清单 Web service specification (网站服务说明) 将包含网站服务的 URL path,请求方法, URL…

CASIA FASD 3D-MAD database Print attack

哪位兄弟要是有这三个数据集 ,我可以有偿购买,邮箱是970851545qq.com,必有重谢。

中阳期货程序化交易模型

中阳期货是目前国内领先的金融期货交易公司之一,公司致力于构建程序化交易系统,实现高效的交易决策与执行。程序化交易系统基于量化模型,利用历史数据进行回测和验证,形成稳定的交易信号以制定交易策略。 中阳期货程序化交易模型包括三个模块:信号生成模块、交易控制模块和交易…

【verilog】多功能数字钟的设计

实验目的 掌握数字钟的工作原理。掌握计数器级联构成更大模值计数器的方法。 能用verilog描述简单的时序逻辑电路。 实验原理 多功能数字钟应该具有的基本功能有:显示时-分-秒、整点报时、小时和分钟可调等。首先要知道钟表的工作机理&…

全球主流智能手环传感器模块拆解大揭秘

如果说前几年消费电子市场的热点是是功能手机向智能机的转换过渡,那么近几年则逐渐偏移到智能设备的便携化、智能化。近年来,国内外豪杰纷纷聚 焦智能硬件,Google Glass问世,Galaxy Gear 接踵…… 今年9月份Apple Watch的亮相更是…

智能手环一些模块总结

该智能手环可实现实时显示日期,温湿度,心率,血压,计步消耗卡路里等功能。 首先介绍关于心率血压的测量模块介绍: 核心IC为HP-6,用于测量心率血压。 1)目前测量心率血压方法: 1.1…

【FPGA入门】第五篇、按键消抖

目录 第一部分、按键抖动现象 第二部分、消抖思路及代码 1、简单的按键消抖思路 2、实际按键消抖思路 3、实际按键消抖模块代码 第三部分、总结 第一部分、按键抖动现象 只要学习过单片机的都会知道,按键在按下去和松开的那个瞬间都存在抖动,在单片…