yacc的运行参数

yacc是一个根据指定的语法规则生成LR分析程序的工具。它使用C语言编译器编译输出文件,生成yyparse()函数,需要与词法分析器yylex配合使用。yacc支持各种选项,如-b指定输出文件前缀,-d生成包含标记值的头文件,-v生成解析表描述等。此外,yacc输入文件包含定义、规则和用户函数三个部分,用于定义语法、规则和自定义功能。在处理复杂的语法时,yacc可以帮助开发者创建和调试解析器。
摘要由CSDN通过智能技术生成

名称

 

  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额外的存储以创建它的先行LR1)文法分析程序分析表(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编译器将会包含调试代码,而不管 选项是否使用。不包含调试代码时,函数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]]...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值