使用 yacc 程序来创建解析器
yacc 程序创建定义并强制计算机程序的字符输入结构的解析器。
要使用此程序,您必须提供下面的输入:
- 语法文件
- 包含对要识别语言的说明的源文件。 此文件还包含 main、yyerror 和 yylex 子例程。 您必须提供这些子例程。
- main
- C 语言子例程至少包含对 yacc 程序所生成的 yyparse 子例程的调用。 在 yacc 库中提供了此子例程的有限格式。
- yyerror
- 处理解析器操作过程中可能出现的错误的 C 语言子例程。 在 yacc 库中提供了此子例程的有限格式。
- yylex
- 对输入流进行词法分析、并将标记传递给解析器的 C 语言子例程。 您可使用 lex 命令生成此词法分析器子例程。
当 yacc 命令获取规范时,它会生成名为 y.tab.c的 C 语言函数文件。 使用 cc 命令编译时,这些函数构成 yyparse 子例程并返回一个整数。 被调用时,yyparse 子例程调用 yylex 子例程获取输入标记。 yylex 子例程继续提供输入,直到解析器检测到错误或者 yylex 子例程返回结束符标记表示已到操作的末尾。 如果出现错误,且 yyparse 子例程无法恢复,那么它会将值 1 返回给 main 子例程。 如果找到结束符标记,那么 yyparse 子例程将值 0 返回给 main 子例程。