♥ 學習筆記Learning 程式語言 Coding

[程式] parser generator (Lemon x Lex)

最近要寫的主程式,第一部份要做parser這件事,input是一個gate-level的verilog檔,
如果用暴力法直接用c寫,可能會曠日費時,又效果不佳,因此間接得知一個有趣的程式。

Lex 字彙分析用的與用於文法分析的yacc或lemon。

在學習一些compiler的課程時,有可能會接觸到這些程式,不過小的大學時的課堂沒有學到這個QQ
一個文本分析的程式,事實上有許多的應用,甚至可以分析一本小說,裡頭每個角色之間的關係。
一些web相關的程式語言,也有類似功能的語言,不同的是lemon產生的output是可供執行的c source file。而網頁程式可能是產生一個網頁。

以下筆記是程式弱咖的雷米的紀錄,避免自己快速失憶。

首先,我們藉由以下這個網頁開始了解lemon。
http://freshmeat.net/articles/lemon-parser-generator-tutorial

—————————————————————————————————————————————-
話說在前頭,筆者是程式弱咖,英文也很爛,對linux也沒有很熟~= =a 唉唉~~~
萬丈高樓平地起!!!所以我來蓋平地了,請不要取笑我,謝謝(淚奔Q_______Q)

第一件事:灌好你的linux、灌好lemon與flex。(已完成)
第二件事:打開terminal 終端機,輸入”vim 檔名”,注意的是lemon的副檔名是*.y,而lex的副檔名*.l。
第三件事:規劃好你的輸入檔的關係,以及你所要產生的輸出檔(這是廢話,不過還是要花時間去做。)
這邊指的是當讀入輸入檔案,切好token,判斷每個token的意義與數值,並將每個token的值去作運算或關係建表,得出自己要得結果。
在這裡,我們會需要讓程式去判別哪些是我們需要的關鍵字,哪些是數值,哪些是沒有意義的符號與空白,而哪些變數與數值之間要有對應關係。

該是講重點的時候囉!

以下兩個程式,都會產生c source file,而那兩個c source file就會變成我們主程式的一部分。

一顆檸檬 🙂
輸入:lemon.y 文法輸入檔
輸出:c source file *lemon.c , header file  *lemon.h , out file

一個Lex 🙂
輸入:lex.l 字彙分析檔
輸出:c source file *lex.c

我們的主程式~

一個parser  🙂
輸入:Netlist
輸出:Netlist的關係表
過程:撰寫一個parser c 將lemon.c 與 lex.c還有lemon.h都include進來一起做事:P

About the author

蕾咪

蕾咪,來自台東,卻不定期旅居歐洲的工程師女孩,身兼作家、部落客、創業家等多重身份。畢業於台大電子所,曾在義大利商與美商擔任研發工程師;走訪世界後,發現對台灣有段割捨不了的愛,讓我們一起努力成為想要的自己吧!:) 合作邀稿請聯繫:ramihaha@gmail.com

Leave a Comment