• Yacc


    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

  • 相关阅读:
    缓存三大问题及解决方案
    布隆过滤器
    maven 详解
    Netty是什么?
    select、poll、epoll简介
    IO
    Java并发编程:Synchronized及其实现原理
    Java并发之AQS详解
    原子更新字段类
    AtomicStampedReference解决ABA问题
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11102584.html
Copyright © 2020-2023  润新知