Provided by: manpages-zh_1.5.2-1.1_all bug

NAME

       Yacc - 一個生成 LALR(1) 文法分析器的程式

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

DIAGNOSTICS 診斷

       如果有些規則永不歸約,在標準錯誤輸出上報告這些規則的數目。 如果有任何 LALR(1) 沖突,在標準
       錯誤輸出上報告這些沖突的數目。

       譯注:規則永不歸約通常出現在文法有二義性規則的時候,術語叫 歸約-歸約沖突。LALR(1) 沖突術語
       上叫移進-歸約沖突,解決的方法  一種是 Lisp 風格的語言的括號總動員,一種是 C 風格的語言的優
       先 級排座次,還有一種是結構化的解決方法例如 Fortran77 的IF...ENDIF 及 Algol68 的if...fi。C
       風格語言的一個標誌就是至少有一個  從 Algol60 至今死不改悔的移進-歸約沖突--都是else(懸掛)惹
       的禍。 只要你清楚並讓使用者知道,有移進-歸約沖突可以是正常的,不像 歸約-歸約沖突那樣必須避
       免。

[中文版維護人]

       mhss

       推薦: 編譯原理及實踐/(美)Kenneth C. Louden著. -北京: 機械工業出版社, 2000.3 $39。 實踐出
       真知,無有捷徑。讀 byacc 的源程式是艱苦的事情, 但能澄清 一些似是而非的認識, 親歷編程的精真
       妙明的境界,  雖無大的實際利益,  畢竟是聊勝於無。在娑婆世界中, 一個完整的美夢是十分珍貴的。
       仁者, 何妨一試。

       推薦: 編譯原理/呂映芝等著. -北京:  清華大學出版社,1998.1  $21。  餘見到  LL(2)  感到很欣
       慰。餘以為是改進消除左遞歸和提取左因子的  算法就可以解決的事情,故不應是學術問題。餘不懂學
       術,若妄言之, 大人有大量,請海涵了。

[中文版最新更新]

       2000/11/13

《中國Linux論壇man手冊頁翻譯計劃》:

       http://cmpp.linuxforum.net