SYNOPSIS 总览

yacc [ -dlrtv ] [ -b file_prefix ] [ -p symbol_prefix ] filename

DESCRIPTION 描述

Yacc 从 filename 所指定的文件中读出文法(grammar)定义,并为之生成一个 LR(1) 分析器。分析器是由一系列 LALR(1)分析表和用 C 语言写的驱动例程组成。通常把分析表和驱动例程写到文件 y.tab.c 中。

译注:余在翻译有关编译原理的东西时,总是区别语法(Syntax)和文法 (grammar)。驱动例程指的是自动生成的 yyparse 函数和相关函数的源代码。Yacc和 Lex 自动生成的常量、变量、结构,函数等的名称通常以 yy 为前缀,目的是不与用户自己的 C 程序定义的名称冲突。LALR(1)文法的分析是通过在堆栈上通过移进(shift)和归约(reduce)实现的,任何经过良好设计的语言(例如 Lisp,C,Perl,C++,Java),用LALR(1)实现起来是容易,高效和可靠的。

可得到下面的参数:

-b file_prefix
-b 选项改变的是为输出的文件名准备的前缀,这个字符串用 file_prefix 指定,缺省的前缀是 y.。

-d
-d -d 选项导致多写一个 y.tab.h 头文件。(包含一些词法定义)

-l
如果没有指定 -l 选项,则 yacc 将在生成的代码中插入 #line 宏命令 (directive)。 #line 宏命令用于让 C 编译器把在生成的 C 代码中的错误与用户的原始 yacc 代码联系起来。如果指定了 -l 选项,yacc 将不插入 #line 宏命令。用户指定的 #line 宏命令还是将被保留的。

-p symbol_prefix
-p 选项改变的是为 Yacc生成的符号(symbols)准备的前缀,这个字符串用 symbol_prefix 指定,缺省的前缀是 yy。

-r
-r 选项导致 yacc 生成生成分开的代码和表文件。代码文件名是 y.code.c,表文件名是 y.tab.c。

-t
-t 选项更改 Yacc 生成的预处理宏命令,这样调试语句就会被结合到编译后的代码中。

-v
-v 选项导致在文件 y.output 中写出可被人阅读的对生成的分析器的描述。

如果设置了环境变量TMPDIR,TMPDIR 所指定的字符串将被用作生成临时文件的路径名。

FILES 相关文件

y.code.c
y.tab.c
y.tab.h

y.output
/tmp/yacc.aXXXXXX
/tmp/yacc.tXXXXXX

/tmp/yacc.uXXXXXX

Yacc - 一个生成 LALR(1) 文法分析器的程序的更多相关文章

  1. python 写一个生成大乐透号码的程序

    """ 写一个生成大乐透号码的程序 生成随机号码:大乐透分前区号码和后区号码, 前区号码是从01-35中无重复地取5个号码, 后区号码是从01-12中无重复地取2个号码, ...

  2. C# 写的一个生成随机汉语名字的小程序

    最近因为要做数据库相关的测试,频繁使用到测试数据,手动添加太过于麻烦,而且复用性太差,因此干脆花了点时间写了一个生成随机姓名和相关数据的类,贴在这里,有需用的同志们可以参考一下.代码本身质量不好,也不 ...

  3. .net又一个生成缩略图的方法,不变形

    生成缩略图是一个十分常用功能,找到了一个方法,重写部分代码,实用又好用,.net又一个生成缩略图的方法,不变形 /// <summary> /// 为图片生成缩略图 by 何问起 /// ...

  4. .net又一个生成缩略图的方法,不变形,非常好用

    生成缩略图是一个十分常用功能,找到了一个方法,重写部分代码,实用又好用,.net又一个生成缩略图的方法,不变形 /// <summary> /// 为图片生成缩略图 by 何问起 /// ...

  5. captcha.js一个生成验证码的插件,使用js和canvas生成

    一.captcha`captcha.js`是一个生成验证码的插件,使用js和canvas生成的,确保后端服务被暴力攻击,简单判断人机以及系统的安全性,体积小,功能多,支持配置. 验证码插件内容,包含1 ...

  6. python3 - 写一个生成双色球号码的一个程序,生成的号码写到文件里面

    写一个生成双色球号码的一个程序,生成的号码写到文件里面 # 中奖号码由6个红色球号码和1个蓝色球号码组成 # 篮球范围:01-16 # 红球范围:01-33 def swq(num): random. ...

  7. 使用 WebView2 封装一个生成 PDF 的 WPF 控件

    使用 WebView2 封装一个生成 PDF 的 WPF 控件 最近在迁移项目到 .net6,发现项目中用的 PDF 库不支持 .net6,于是想着换一个库.结果找了一大圈,发现不是版本不支持,就是收 ...

  8. 五:用JAVA写一个阿里云VPC Open API调用程序

    用JAVA写一个阿里云VPC Open API调用程序 摘要:用JAVA拼出来Open API的URL 引言 VPC提供了丰富的API接口,让网络工程是可以通过API调用的方式管理网络资源.用程序和软 ...

  9. 2.第一个ASP.NET MVC 5.0应用程序

    大家好,上一篇对ASP.NET MVC 有了一个基本的认识之后,这一篇,我们来看下怎么从头到尾创建一个ASP.NET MVC 应用程序吧.[PS:返回上一篇文章:1.开始学习ASP.NET MVC] ...

随机推荐

  1. python中datetime模块中strftime/strptime函数

    f==format p==parse 1.获取当前时间(日期格式) from datetime import datetime datetime.now()#输出 datetime.datetime( ...

  2. 树莓派4B更换国内源

    更换清华源:https://mirrors.tuna.tsinghua.edu.cn/help/raspbian/ 注意树莓派4B的Respbian是基于Debian 10 Bluster 不要选错. ...

  3. python--函数基础一

    一.函数意义:可读性,复用性强 # def my_len(s): #def 关键词开头,my_len函数名 # i=0 # for k in s: # i+=1 # print(i) # return ...

  4. JS数组 Array

    1.创建数组 var array=new Array(); 2.添加数组 array.push("111"); array.push("111"); array ...

  5. vs code 自定义代码片段

    1.快捷键Ctrl+Shift+P打开命令输入 snippet : (也可以点击文件=>首选项=>用户代码片段) 2.选择代码语言类型(这里以JavaScrpt为例) 3.在javascr ...

  6. leetcode-12双周赛-1243-数组变换

    题目描述: 自己的提交: class Solution: def transformArray(self, arr: List[int]) -> List[int]: if len(arr) & ...

  7. Vue学习笔记【9】——Vue指令之v-for和key属性

    迭代数组(普通数组.对象数组) <ul> <li v-for="(item, i) in list">索引:{{i}} --- 姓名:{{item.name ...

  8. Robot Framework:随机数

    脚本 随机数 # 随机生成几位随机数 ${num} set variable 6 ${random} evaluate "".join(random.sample(string.l ...

  9. Read Committed

    在Read Committed隔离级别下,一个事务可能会遇到不可重复读(Non Repeatable Read)的问题. 不可重复读是指,在一个事务内,多次读同一数据,在这个事务还没有结束时,如果另一 ...

  10. 【LeetCode 6】Z 字形变换

    题目链接 [题解] 还想着模拟这个过程.然后发现只有行有用啊!... 那就建个rows大小的字符串数组存每行从左到右的字符就行啦.. 然后就是i从1变到n然后又变回1反复就好了. 最后把1..rows ...