robot
最新文章(10)
Mqskit 和其它相關工具
CPython 的 GC 二、三事
寫 Mecurial Extension 是件快樂的事!
Mozilla 台灣辨公室徵人啟事
關於 Apple 的兩項專利
core dump 之前的 frame
怎麼發出 beep 聲?
先承認你要找的是奴才吧!
程式碼要清的多乾淨?
FreeBSD 的 Thread-Local Storage 實作
首頁
新編
最新留言
Entries RSS
重要關鍵字(10)
coding (122)
Python (93)
FreeBSD (71)
WEB (61)
URL (48)
hardware (46)
javascript (36)
Linux (34)
blog (30)
C++ (16)
所有關鍵字
新增 URL
驚豔 M4
by thinker
2 Columns
關鍵字:
coding
沒錯,就是 linkname:[GNU M4] http://www.gnu.org/software/m4/ ,以前都沒注意這個重要的 macro language。這是一個有趣的 macro language,能展開(expansion)混雜在文字中的 macro。 例如: {{{ define(`foo', `豬') ABCD 狗咬豬, foo`'沒尾 ==> ABCD 狗咬豬, 豬沒尾 }}} 這點功能不算什麼,有趣的是他的 expansion 的方法可用下面的 pseudo-code 來表示 {{{ def expansion(content, macros): result = '' remain_content = content tkn, remain_content = get_token(remain_content) while tkn != None: if macros.has_key(tkn): args, remain_content = get_args(remain_content) # 有趣的是這個部分 remain_content = expandsion(macros[tkn](args), macros) + remain_content else: result = result + tkn return result }}} 將 macro 執行的結果,不斷的 feedback 回到待 parse 的內容,讓內容可以進行無限次的替換。 下面就是一個有趣的例子,透過不同的 macro 的組合,可以組合出新的 invoking。 {{{ define(`x', `substr(ab') => define(`y', `cde, `3', `2')') => x`'y =>de }}} 若能進一部的加強這樣的特性,就可組合各式的語法。lisp 可讓 programmer 在 parse tree 上進行操作,但 M4 則以更簡單的方式讓我們在 source code 上進行操作。這樣的特性,可讓我們用 M4 來定義和 implement 其它語言,一種完全不同的語言。 M4 是一種神奇的小語言,若放寬 macro name 限制,甚至以 regular expression 定義 macro name,將是非常精美的語言。
最後更新時間: 2006-08-26 22:50:54 CST |
引用
查詢:
COMMENTS: