語法分析器生成工具 YACC
Yacc 代表 Yet Another Compiler Compiler。 Yacc 的 GNU 版叫做 Bison。它是一種工具,將任何一種編程語言的所有語法翻譯成針對此種語言的 Yacc 語 法解析器。它用巴科斯范式(BNF, Backus Naur Form)來書寫。按照慣例,Yacc 文件有 .y 后綴。編譯行如下調用 Yacc 編譯器:
$ yacc <options> <filename ending with .y> |
在進一步闡述以前,讓我們復習一下什么是語法。在上一節中,我們看到 Lex 從輸入序列中識別標記。如果你在查看標記序列,你可能想在這一序列出現時執行某一動作。這種情況下有效序列的規范稱為語法。Yacc 語法文件包括這一語法規范。它還包含了序列匹配時你想要做的事。
為了更加說清這一概念,讓我們以英語為例。 這一套標記可能是:名詞, 動詞, 形容詞等等。為了使用這些標記造一個語法正確的句子,你的結構必須符合一定的規則。一個簡單的句子可能是名詞+動詞或者名詞+動詞+名詞。(如 I care. See spot run.)
所以在我們這里,標記本身來自語言(Lex),并且標記序列允許用 Yacc 來指定這些標記(標記序列也叫語法)。
用 Yacc 來創建一個編譯器包括四個步驟:
- 通過在語法文件上運行 Yacc 生成一個解析器。
- 說明語法:
- 編寫一個 .y 的語法文件(同時說明 C 在這里要進行的動作)。
- 編寫一個詞法分析器來處理輸入并將標記傳遞給解析器。 這可以使用 Lex 來完成。
- 編寫一個函數,通過調用 yyparse() 來開始解析。
- 編寫錯誤處理例程(如 yyerror())。
- 編譯 Yacc 生成的代碼以及其他相關的源文件。
- 將目標文件鏈接到適當的可執行解析器庫。
本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!