Re: [問題] 如何學寫COMPILER? [純拋磚引玉]
※ 引述《tinlans.bbs@whshs.cs.nccu.edu.tw (汀)》之銘言:
> 我印象中 BNF 可以描述 context-sensitive 的 syntax,
> 受到較多限制的 BNF 才會變成 context-free 和 regular expression,
> 所以我才說 BNF 可以高興怎樣寫就怎樣寫,
> 但是 parser 不見得做得出來。
舉個例子? 能用 BNF 不能用 machine 做 parse 的語法?
不能 compile 是有的, 如 int a[100000000000000]
很多 code gen 和 library 都是直接用 BNF 語法的
> > C++ 也還是老舊的, template 不是新觀念, 而且 C++ 連
> > obj dynamic linking 都沒搞定, 本質上跟 C 是一樣的
> > C++ 本來還是個 C 的 code generator: cfront
> > yacc 算是 4GL, goal oriented, 還比 C++ 新得多
> > 新應該是指 style, 而不是訂規格的日期
> 我講的 80 年代 programming 技術,
3GL 是 50 年代 programming 技術, template 從 lisp(196x), forth 就有
OO 語言的歷史比 C 還久, smalltalk(1969) 就有 dynamic typing
yacc 遠比 template, OO 先進得多!
C++ 只是把這些 196x-197x 的東西換個用辭, 大家基本上停留在 3GL
舊沒有不好, 像 assembly 還不是要學會,
商用 compiler 也還是在用 4GL, 含 yacc
很多所謂的 "library" 是 4GL interpreter, 如 SQL
寫 compiler 用 4GL 很快很省事, bug 好不好抓跟程式架構有關,
不然 perl 和一堆無法 BNF 的語言 parser 為何大多用 yacc?
> 指的是 yacc 這個工具 (無論是設計或是產生出來的 code),
> 跟 C++ 是不是新東西倒沒什麼關聯性,
> 重點是 2007 年用 yacc 去生 parser 的 code 已經非常不合時宜了,
> 做 parser 有更方便更容易除錯的 language-level library 可以使用。
> 至於 public private protected friend 這類東西,
> 會不懂的大概也只剩下 10 年前還是學生的叔叔伯伯姑姑阿姨了,
這些東西懂了嗎? 記得了嗎?
繼承以後的改變背起來了嗎?
不然 java 把 virtual 換成 interface 是為何,
常常有人 C++ 寫完編不起來去亂 public,
不然就是不知 call 得是 parent method 還是 child
> 現在的學生成天都在摸 Java 和 C# 這類東西,
> 已經是絕對不可能不會的特性。
> 「新語言機制」是因應「舊語言技巧」而產生的,
> 所以如果你用不到,
> 那麼不會本來就沒差,
> C 語言本身簡單,
> 但也因此有各種旁門左道的技巧得學,
C 語法就一點點還能用啥奇招?
再奇怪也跳不出 C 語法呀, inline assembly 之類是寫 OS 必需的,
C++ 不能寫 OS, 又有不明確的 memory map, 自然少人用 inline assembly
比 C 高階的東西用途都是受限的, 這就是為何 C++ 反而萎縮被 java, C# 吃掉
還會出來拔掉一堆東西的 embedded C++
要比省打字工, 4GL 更省, 要做 data structure, pascal, java, c# 也可以
要效能, 大家都乖乖用 C+asm 寫的 library 去了
> 甚至還沒有書可以學全,
> 更沒有一套標準 (充其量只不過是公約),
C 連 calling convention 都標準化, 跨 compiler 的 linking 都可以,
C++ 原來 function name encoding 還算有標準, 現在不同家的 obj file 無法互通
更不用說語法撿查都不一樣, gcc3->gcc4 一堆東西不能 compile
visual c 5.1->6.0->.net 也是, 更不用說 borland, ibm 只做了半套 template
C 從來沒發生過舊 code 不能 compile, 或 obj file 不能 link
如 linux kernel 還可用各種不同 compiler, 很多平臺是沒有 gcc 的
> 新一代的語言把這些技巧標準化、通用化、光明正大化、語言機制化,
> 並不代表學的人就是什麼都要學會才行,
--
┌─────◆KKCITY◆─────┐▇─┐ 優質連線服務隆/重/豋/場!!
│ bbs.kkcity.com.tw │┴ └─▇ KKADSL 帶你環遊全世界
└──《From:59.120.53.7 》──┘ KKADSL ┴ http://adsl.kkcity.com.tw
--
討論串 (同標題文章)
完整討論串 (本文為第 24 之 38 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章