[ 页的底部 | 上一页 | 下一页 | 目录 | 索引 |
法律条款
]
AIX命令参考大全,卷 6,v - z
yacc 命令
用途
从与上下文无关的语法规范所组成的输入生成 LALR(1) 语法分析程序。
语法
yacc [ -b Prefix ] [ -C ] [ -d ] [ -l ] [ -NnNumber ] [ -NmNumber ] [ -NrNumber ] [ -p Prefix ] [ -s ] [ -t ] [ -v ] [ -y Path ] Grammar
描述
yacc 命令将与上下文无关的语法规范转换成一组表格,执行 LALR(1) 分析算法的简单自动机会用到该组表格。语法可能是有歧义的;此时,使用指定的优先规则来解决语法的二义性。
必须用 C 语言编译器编译输出文件 y.tab.c,以生成 yyparse 函数。这个函数必须
由 yylex 词法分析器,main 子例程以及
yyerror 错误处理子例程(必须提供这些子例程)装入。lex 命令
对创建可供 yyparse 子例程使用的词法分析器很有用。简化版本
的 main 和 yyerror 子例程通过 yacc
库 liby.a 可以得到。而且,yacc
能够用来生成 C++ 输出。
可以用-DYACC_MSG 选项编
译 yacc 生成的 C 文
件(y.tab.c)来包含使用消息工具必须的代码。当在编译时使用该选项,
由 yyparse 子例程和 YYBACKUP 宏生成的错误消息
会从 yacc_user.cat 目录中抽取。
这允许在非英语语言环境中以不同于英语的语言接收错误消息。如果找不到目录或打不开目录,yyparse 和 YYBACKUP 子
例程显示缺省英文消息。
yacc 命令
受 LANG、LC_ALL、LC_CTYPE 和 LC_MESSAGES 环境变量影响。
标志
-b Prefix |
使用 Prefix 取代 y 作为所有输出
文件名的前缀。代码文件 y.tab.c,头文件 y.tab.h(在 -d 指定时创建)和描述文件 y.output(
在 -v 指定时创建)
分别更改为 Prefix.tab.c、Prefix.tab.h 和 Prefix.output。 |
-C |
为和 C++ 编译器一起使用生成 y.tab.C 文件取代 y.tab.c 文件。要使用输入输出的 I/O 流库,定义宏 _CPP_IOSTREAMS。 |
-d |
产生文件 y.tab.h。这包含 #define 语句,该语句将 yacc 分配的标记代码
与标记名关联起来。这允许除了 y.tab.c 的源文件通过包含头文件来访问标记代码。 |
-l |
在 y.tab.c 中不包含
任何 #line 构造。只在语法和关联操作全都调试过后才使用这个标记。 |
-NnNumber |
将标记名和非终端名数组的大小更改为 Number。缺省值是 8000。有效值应该大于 8000。 |
-NmNumber |
将内存状态数组大小更改为 Number。缺省值是 40000。有效值应该大于 40000。 |
-NrNumber |
更改内部缓冲区大小以处理大型语法。缺省值是 2000。有效值应该大于 2000。 |
-p Prefix |
使用 Prefix 取代 yy 作为
所有由 yacc 命令创建的文件外部名的前缀。受影响的外部名包
括:yychar、yylval、yydebug、yyparse( )、yylex( ) 和 yyerror(
)。(以前,-p 被用来指定备用解析器;
现在 -yPath 可以用来指定备用解析器。) |
-s |
将 yyparse 函数分解成几个更小的
函数。由于该函数的大小多少和它的文法成比例,这样有可能
yyparse 函数变得太大无法编译、优化或有效地执行。 |
-t |
编译运行时的调试代码。缺省方式下,在编译
y.tab.c 时不包含这些代码。然而,运行时调试代码是由
预处理器宏 YYDEBUG 控制的。如果 YYDEBUG 有
非零值,C 编译器(cc)包含调试代码,而不管是否
使用 -t 标志。如果不想将调试代码包含在编译器
中,YYDEBUG 应该值为 0。在不编译这个代码的情况
下,yyparse 子例程将会有更快
的执行速度。
-t 标志
会导致对调试代码的编译,但实际上它不打开调试方式。要获取调试输
出,yydebug 变量必须通过添加 C 语言声明 int yydebug=1 到 yacc 语法文件的声明部分来设置,或者设置通过 dbx 的 yydebug 进行上述设置。 |
-v |
准备文件 y.output。它包含可读的
语法分析表描述和由于文法二义性而生成的冲突报告。 |
-y Path |
使用由 Path 而不是缺省的 /usr/lib/yaccpar 文件来指定的解析器原型。(以前,-p 用来指定备用解析器。) |
退出状态
本命令返回以下出口值:
示例
- 以下命令:
yacc grammar.y
从 grammar.y 文件提取 yacc 规则,并
将输出置于 y.tab.c。
- 以下命令:
与示例 1 的作用相同,但它也产生 y.tab.h 文件,对于 grammar.y 文件中定义的每个标记,该文件
包含 C 风格的 #define 语句。
文件
y.output |
包含可读的语法分析表描述和由于语法二义性而生成的冲突报告。 |
y.tab.c |
包含输出文件。 |
y.tab.h |
包含标记名的定义。 |
yacc.tmp |
临时文件。 |
yacc.debug |
临时文件。 |
yacc.acts |
临时文件。 |
/usr/ccs/lib/yaccpar |
包含 C 程序的解析器原型。 |
/usr/ccs/lib/liby.a |
包含运行时程序库。 |
相关信息
lex 命令。
AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Creating an Input Language with the lex and yacc Commands。
AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Example program for the lex and yacc programs。
[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 |
法律条款
]