Python-based Parser Generator & ANTLR Python
前一陣子有需要利用 Parser Generator 產生 Python-based Parser,
用來 parsing Java source, 因此就做了一點 survey.
不過出乎意料的, 找不到幾個好用的工具, 大致上 Python Parser SIG [1]
裡列出的都嘗試過了, 有些雖然可以用, 但是沒有人寫好 Java grammer,
要自己寫實在有點麻煩. 有些則是看起來不錯, 也有 Java grammer, 但是卻
無法成功使用, 例如 PyBison [2].
附帶一提如果有人想嘗試 PyBison 的話, 記得裝 PyBison 時要先裝 :
sudo apt-get install python-dev
sudo apt-get install build-essential
最後我是採用有名的 ANTLR [3], 它的 Python Interface 雖然還在發展中,
但是勉強是可以用了, 小 bug 自己改一下就好.
我使用的流程如下, 提供參考(以 MS 環境為例) :
1. 首先到官方網站下載 ANTLR 3, URL : http://www.antlr.org/
2. 解壓縮到特定資料夾, 例如 C:\antlr-3.0\
3. 設定 CLASSPATH, 讓 C:\antlr-3.0\lib\ 底下的所有 .jar 檔案都在
CLASSPATH 設定內, 可以參考這裡的說明進行 :
http://www.antlr.org/wiki/pages/viewpage.action?pageId=728
4. 到 C:\antlr-3.0\runtime\Python 底下進行 python runtime 安裝, 請參考 :
http://www.antlr.org/wiki/display/ANTLR3/Python+runtime
5. 到 ANTLR 網站上下載 Java grammer file :
http://www.antlr.org/grammar/list
嘗試產生 Python-based Java parser, 請參考 :
http://www.antlr.org/wiki/display/ANTLR3/Antlr3PythonTarget
6. 上述網頁上的 Java 1.5 grammer files 有很多個, 如果是使用 Terence Parr
的 grammer file (我是用這個), 則需要對於產生出來的 JavaLexer.py 以及
JavaParser.py 作一點修改. 此修改為在按照上面網頁執行 parsing 的過程中,
會出現語法上的錯誤, 請把錯誤的部分, 從 Java 語法改為 Python 語法即可.
如果有需要對產生的 Parser 作修改的話, 可以參考 ANTLR Python API Doc. :
http://www.antlr.org/api/Python/index.html
References
[1] Python Parser SIG, URL : http://wiki.python.org/moin/LanguageParsing
[2] PyBison, URL : http://wiki.python.org/moin/PyBison
[3] ANTLR Python, URL : http://www.antlr.org/
下午2:35 | 標籤: code generation, open source, python, Software Tool | 1 Comments
Floor Planner
看到一個好玩的網站 : FloorPlanner , 可以用來幫你規劃家裡的各樓層擺設, 有商業版軟體, 但是也可以註冊他的免費帳號, 可以試用線上版 (使用 Flash 製作). 註冊只要使用 emial 帳號跟設一個自己的密碼, 門檻很低.
進去後可以 create 自己的一個新的 project, 或是開啟別人的來看, 結果我開了其中一個名為 container 的規劃圖, 共兩個樓層 :
而且他也把 tag system 用在分類大家的規劃圖, 所以使用線上系統的人, 就可以共同快速地分享自己不同空間的設計.
使用設計上相當直覺, 以 Drag&Drop 為操作基礎, 分為三個控制 menu, 一個是 (1) 新增房間, 門, 窗, 註解等等 global constructs 的 menu, 一個是 (2) 新增各種家俱的 library menu, 下拉式選單內有各種 library, 另外一個是 (4) navigation menu, 就是左移右移放大縮小啦, 另外 (3) 的編輯部分也是很容易操作, 直接用滑鼠拉空間範圍, 換顏色等等, 搭配 library menu, 很快就能作出很漂亮的設計.
以 Software Product 的角度來看, 真是一個很吸引人使用的 Software :)
下午4:50 | 標籤: software gui, Software Tool, web engineering | 0 Comments
CVSGrab
看名字就知道 CVSGrab 是用來抓取 CVS 資料用的. 不過 CVSGrab 並非一般利用 pserver 與 CVS server 作 communication 的 CVS client, 而是透過 CVS web interface, 去讀取 CSV server 內的資料.
之所以這樣做是因為, 往往要 access 某個 project 的 CVS server 時, 卻發現被網路上的某個 firewall 擋住了 pserver, 不見得是刻意檔的, 可能是公司只有開放 http port 之類的, 因此就無法利用走 pserver protocol 的 CVS client 去讀取 CVS 資料. 而 CVSGrab 利用 http, 透過各種 CVS web interface (例如 ViewCVS or CVSWeb, ViewCVS 現在叫 ViewVC 了, 因為也支援 SVN 了 ) 去抓取 CSV 上的資料, 來解決這樣的問題.
不過這樣的話, 我倒覺得名字應該叫做 WebCVSGrab 或是 CVSWebGrab 比較適切 :p
上午10:40 | 標籤: open source, project management, Software Tool | 0 Comments
Pyra Lab
最近迷上了 Blogger 上方的 "下一個 Blog>>" 連結, 想知道背後的 linking 機制是怎樣. 每次按 "下一個 Blog>>" 都會連結到其他的 Blog, 但是每次幾乎都不相同, 如果到到下一個 Blog 再 return, 再按一次結果也是會不同, 真的是隨機的嗎 ? 真是令我好奇.
學資訊的總是想挖看看別人是怎麼搞的, 看到 link 上有 next_blog.pyra , 本來以為是某種 script, 想抓卻抓不下來, 於是就找找 .pyra 是什麼格式, 結果意外發現原來 pyra 是有意義的, 應該是指 Blogger 被 Google 收購之前的母公司 Pyra , 不過現在網頁只剩下紀念性質的頁面了. 另外 Wikipedia 也可以找到 Pyra Lab 的歷史說明頁面. 不過仍然不知道 .pyra 是否是某種程式語言格式的副檔名, 畢竟公司內部有開發方便自己用的程式語言也是正常的事情.
後 來發現直接用 next_blog 的網址 : http://www.blogger.com/redirect/next_blog.pyra 也可以直接得到下一個 blog, 只是不知道他的 argument 怎樣輸入, 或許可以藉由大量蒐集 next blog 的回應, 反推其 next blog 的機制是怎樣 ?
下午6:39 | 標籤: web engineering | 0 Comments