热门关键字:  ubuntu  分区  Fedora  linux系统进程  函数

当前位置 :| 主页>Linux教程>Linux命令>

yacc的man

来源: 作者: 时间:2008-06-04 Tag: 点击:
名称



yacc -根据指定的语法规则产生 LR 分析程序的程序。



用法



yacc [-vltds] [-b prefix] [-N number] [-p symbol_prefix] [-P pathname]

grammar



标准



本文中的接口遵循下列工业标准:



yacc: XPG4, XPG4-UNIX



选项



-b prefix

定义所有输出文件名的前缀(prefix.tab.c, prefix.tab.h, 和 prefix.output)。



-d

产生 y.tab.h 文件,它包含yacc赋予的标记值的预定义。这可以使其它的源文件

通过包含该头文件来访问代码。



-l

在 y.tab.c 文件中不包含#line语句。仅在语法和相关动作被彻底调试后使用。



-N number

[Compaq] 提供给yacc额外的存储以创建它的先行LR(1)文法分析程序分析表(LALR),

这在编译非常大的语法时很重要。使用此选项时 number 值应大于40000。



-p symbol_prefix

允许多个yacc分析程序连接在一起。使用symbol_prefix前缀来代替 yy 表示全局符号。



-P pathname

指定可选的分析程序(替代/usr/ccs/lib/yaccpar)。



-s

[Compaq] 将yyparse()函数分解为几个小的函数,因为它的尺寸有些与语法成比例,这可能导致

yyparse()函数太大而不能被编译、优化或有效地执行。



-t

编译运行时调试代码。缺省情况下,当y.tab.c 被编译时不包含该代码。如果YYDEBUG具有非零值,

C编译器将会包含调试代码,而不管 –t 选项是否使用。不包含调试代码时,函数yyparse()将执行

的更快。



-v

生成y.output文件,它包含有关分析表的可读的描述以及由语法含糊导致的冲突的报导。



操作数



grammar

包含输入指令的文件。



描述



yacc的语法可以是不明确的;指定的优先规则用于打破这种不明确性。



你必须用C语言编译器编译输出文件y.tab.c 以产生yyparse() 函数。该函数必须与yylex

词法分析函数一起被调用,同样的还有main() 和 yyerror(),后者为错误处理函数(你必须

提供这些函数。当创建yacc可用的词法分析器时命令lex很有用。



yacc程序从文件/usr/ccs/lib/yaccpar中读取分析框架。使用环境变量 YACCPAR 可以指定其它

的分析框架。如果使用该环境变量,-P 选项将被忽略。



输入文件的语法



此段将对yacc输入文件(一般具有 .y 后缀)进行描述,同时提供一系列yacc所认识的

特殊值,宏和函数。



yacc输入文件的一般格式:



[ definitions ]

%%

[ rules ]

[ %%

[ user functions ]]



其中



definitions

此区域定义在以后的语法(如规则区域)中使用的变量,以及包含文件和处理条件。

此区域是可选的。



rules

定义语法分析的规则。此项必选。



user functions

定义可被规则区域使用的用户自定义函数。此项为可选项。



空字符(NULL)不能被用于语法规则,也不能在字面上使用。定义区域中的每一行可为:



%{



%}

所包含的 C 代码将输出为输出文件中的全局定义。此域通常包含预处理指令及外部

变量和函数的声明。



%token [type] token [number] [name [number]...

列出输入文件其它部分使用的标记和结束符号。对那些没在其它 % 中定义的标记此行

是必须的。如果type已经存在,此行定义的所有标记的 C 类型被声明为由type参考

的类型。如果标记后跟一个实际的整数值,该值将赋给标记。



%left [<type>] token [ number][name[number]]...

指出每一个标记都是操作符,且此定义中的所有标记具有相同的优先级,求值顺序为

从左到右。



%right [<type>] token [number] [name [number]]...

指出每一个标记都是操作符,且此定义中的所有标记具有相同的优先级,求值顺序为

从右到左。



%nonassoc [<type>] name [ number ] [name [ number]]...

指出每一个标记都是操作符,且此定义中的标记不能连在一起使用,也就是这些操作符

不能结合使用。


上一篇:crontab定时任务
下一篇:lex的man


相关文章:
unix与linux中的inode
高级 Linux 命令精通指南
Linux命令集合
Linux补丁工具 diff + patch
section.1 start
tar命令详解
Linux - chattr & lsattr
ln 命令的使用
Linux关机命令学习
Linux - chown 中的 -R 参数
linux - umask
linux初级使用命令
sed 命令
cp 命令
Linux必学的60个命令(1)-安装与登陆
Linux必学的60个命令(2)-文件处理
APT-CDROM
[Unix通用命令]与用户相关的命令
[Unixt通用命令]定位命令
dircolors
declare
rmmod
passwd
linux的kill命令与信号控制
怎么样把man手册的内容保存到某个文件里面?
linux 逐级显示文件命令--tree
Linux grep命令的使用
7个极具危险性的Linux命令
tr命令使用方法
apt-move 制作本地源