Provided by: manpages-zh_1.5.1-1_all bug

NAME

       Yacc - 一茈穻 LALR(1) 文法分析器的程式

SYNOPSIS`覽
       yacc [ -dlrtv ] [ -b file_prefix ] [ -p symbol_prefix ] filename

DESCRIPTIONyz
       Yacc  從  filename  所指定的檔案中讀出文法(grammar)定義,並為之生成 一
       LR(1)    分析器。分析器是由一系列    LALR(1)分析表和用    C    語言寫的
       驅動例程組成。通常把分析表和驅動例程寫到檔案 y.tab.c 中。

       譯注:餘在翻譯有關編譯麮z的東西時,總是區別語法(Syntax)和文法
       (grammar)。驅動例程指的是自動生成的    yyparse     函數和相關函數的源代
       碼。Yacc和    Lex   自動生成的常量、變量、結構,函數等的名稱通常以   yy
       為前綴,目的是不與使用者自己的   C    程式定義的名稱沖突。LALR(1)文法的
       分析是通過在堆棧上通過移進(shift)和歸約(reduce)實現的,任何經過良 好設-
       p的語言(例如           Lisp,C,Perl,C++,Java),用LALR(1)實現起來是容易,
       高效和可靠的。

       可得到下悸滌捊G

              -b file_prefix
                     -b        選項改變的是為輸出的檔名準備的前綴,這茼r符串用
                     file_prefix 指定,預設的前綴是 y.。

              -d     -d -d 選項導P多寫一 y.tab.h 頭檔案。(包含一些詞法定義)

              -l     如果沒有指定 -l 選項,則 yacc 將在生成的代碼中插入  #line
                     巨集  (directive)。 #line 巨集用於讓 C 編譯器把在生成的 C
                     代碼中的 錯誤與使用者的鴝l yacc  代碼聯系起來。如果指定了
                     -l  選項,yacc  將  不插入 #line 巨集。使用者指定的 #line
                     巨集還是將被保留的。

              -p symbol_prefix
                     -p 選項改變的是為  Yacc生成的符號(symbols)準備的前綴,這-
                     茼r符串用 symbol_prefix 指定,預設的前綴是 yy。

              -r     -r  選項導P  yacc  生成生成分開的代碼和表檔案。代碼檔名是
                     y.code.c, 表檔名是 y.tab.c。

              -t     -t                     選項更改                      Yacc
                     生成的預處理巨集,這樣調試語句就會被結合到編譯後的
                     代碼中。

              -v     -v                 選項導P在檔案                 y.output
                     中寫出可被人嬝牧犒鴷穻赤漱尷R器的描z。

       如果設置了環境變量TMPDIR,TMPDIR     所指定的字符串將被用作生成臨時檔案
       的路徑名。

FILES案
       y.code.c
       y.tab.c
       y.tab.h
       y.output
       /tmp/yacc.aXXXXXX
       /tmp/yacc.tXXXXXX
       /tmp/yacc.uXXXXXX

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

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

[]
       mhss

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

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

[]
       2000/11/13

mLinuxan:
       http://cmpp.linuxforum.net