Yacc - 一个生成 LALR(1) 文法分析器的程序
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) 文法分析器的程序的更多相关文章
- python 写一个生成大乐透号码的程序
""" 写一个生成大乐透号码的程序 生成随机号码:大乐透分前区号码和后区号码, 前区号码是从01-35中无重复地取5个号码, 后区号码是从01-12中无重复地取2个号码, ...
- C# 写的一个生成随机汉语名字的小程序
最近因为要做数据库相关的测试,频繁使用到测试数据,手动添加太过于麻烦,而且复用性太差,因此干脆花了点时间写了一个生成随机姓名和相关数据的类,贴在这里,有需用的同志们可以参考一下.代码本身质量不好,也不 ...
- .net又一个生成缩略图的方法,不变形
生成缩略图是一个十分常用功能,找到了一个方法,重写部分代码,实用又好用,.net又一个生成缩略图的方法,不变形 /// <summary> /// 为图片生成缩略图 by 何问起 /// ...
- .net又一个生成缩略图的方法,不变形,非常好用
生成缩略图是一个十分常用功能,找到了一个方法,重写部分代码,实用又好用,.net又一个生成缩略图的方法,不变形 /// <summary> /// 为图片生成缩略图 by 何问起 /// ...
- captcha.js一个生成验证码的插件,使用js和canvas生成
一.captcha`captcha.js`是一个生成验证码的插件,使用js和canvas生成的,确保后端服务被暴力攻击,简单判断人机以及系统的安全性,体积小,功能多,支持配置. 验证码插件内容,包含1 ...
- python3 - 写一个生成双色球号码的一个程序,生成的号码写到文件里面
写一个生成双色球号码的一个程序,生成的号码写到文件里面 # 中奖号码由6个红色球号码和1个蓝色球号码组成 # 篮球范围:01-16 # 红球范围:01-33 def swq(num): random. ...
- 使用 WebView2 封装一个生成 PDF 的 WPF 控件
使用 WebView2 封装一个生成 PDF 的 WPF 控件 最近在迁移项目到 .net6,发现项目中用的 PDF 库不支持 .net6,于是想着换一个库.结果找了一大圈,发现不是版本不支持,就是收 ...
- 五:用JAVA写一个阿里云VPC Open API调用程序
用JAVA写一个阿里云VPC Open API调用程序 摘要:用JAVA拼出来Open API的URL 引言 VPC提供了丰富的API接口,让网络工程是可以通过API调用的方式管理网络资源.用程序和软 ...
- 2.第一个ASP.NET MVC 5.0应用程序
大家好,上一篇对ASP.NET MVC 有了一个基本的认识之后,这一篇,我们来看下怎么从头到尾创建一个ASP.NET MVC 应用程序吧.[PS:返回上一篇文章:1.开始学习ASP.NET MVC] ...
随机推荐
- Linux/x86-64 - setuid(0) & chmod ("/etc/passwd", 0777) & exit(0) - 63 byes
/* Title: Linux/x86-64 - setuid(0) & chmod ("/etc/passwd", 0777) & exit(0) - 63 by ...
- 一句话概括 tcp三次握手
服务端和客户端都需要直到自己均可收发,因此需要三次握手. 简化三次握手: <img width="487" alt="2018-07-10 3 42 11" ...
- shell常见的返回状态码
- 检查目录下 文件的权限-linux shell脚本
#!/bin/bash #History: #2019/07/23 Fsq #This Program will check Permissions on dir PATH=/bin:/sbin ...
- secureCRT 如何上传下载文件
首先连接相应服务器,然后在文件选项当中,打开SFTP功能,这个时候会生成一个新的标签栏. 下载: cd 到要下载文件的路径下 lcd 要存放文件的本地路径 get {filename} 例: cd ...
- kindeditor加入方法
1.editor文件夹拷进来 2. editor里jsp子文件夹里找到几个jar拷贝到网站的web-app里的lib下 3. 网页里 head里加个这个 <link rel="sty ...
- Mysql学习笔记(004)- 条件查询
条件查询 #进阶2:条件查询 /* 语法: select 查询列表③ from 表名① where 条件筛选② 分类: 一.按条件表达式筛选 条件运算符:> < = != <> ...
- d3js 折线图+柱图
<!DOCTYPE html> <html> <body> <div id="vis"><svg></svg> ...
- 一文带你了解 Flink Forward 柏林站全部重点内容
前言 2019.10.7~9号,随着70周年国庆活动的顺利闭幕,Flink Forward 也照例在他们的发源地柏林举办了第五届大会.虽然还没有拿到具体的数据,不过从培训门票已经在会前销售一空的这样的 ...
- iOS导航栏的背景颜色设置
方法一: (1) self.navigationController.navigationBar.barStyle = UIBarStyleDefault; self.navigationContro ...