看板Programming
标 题Re: [问题] 如何学写COMPILER? [纯抛砖引玉]
发信站KKCITY (Fri Apr 27 19:55:32 2007)
转信站ptt!ctu-reader!ctu-peer!news.nctu!netnews.chu!Leo.mi.chu!zoonews.ee.nt
※ 引述《[email protected] (绝对命运默示录)》之铭言:
> ※ 引述《halajohn (Wei Hu)》之铭言:
> : C 能用 LL(1) parse 是令人惊奇的
> : C grammar 里面有至少六个 ambigious 的地方,
> : 其中有些地方他的 lookahead 各数还不是 1 或 2 或 3 或 4 就可以解决的
> : 当然或许用 left corner transform 可以转换出 lookahead count 比较少的
> : grammar,
> : 但那样就变成好 recognizing, 反而不好 parsing 了
> : 所以目前我看过几乎所有的 C parser 都没有用 LL(1) 就解决的
> : 因为实用上的 parser 是要 parsing 而不是 recognizing.
> 我也对这点感到有疑问
> C++语法本身的ambigious真的只能靠LL(1)就能parse吗?
> 目前我知道的作法都是syntactic和semantic分析要混在一起
> 没办法切得很开的
> 网路上搜寻John Lilley後发现他的网页已经挂了
> 不知大大也没有更进一步的资讯可以参考
其实 C++ 无法 100% 用 LL or LR 处理,
也就是该把 grammar 和 code 并在一起用最佳 ( 竟被学界称为 worst case)
可参考 www.cs.usfca.edu/~parrt 及 www.antlr.org
compiler 不是为了证明 xx 演算法, 是要拿来用的
C++ 被定标准的人弄成非 LL/LR 不代表不能 parse, 还是比 perl 好搞多了
就把 code 拆成子集用条件判断即可, 何难之有
----
数学系老爱用 sigma 一类的东西来描述流程也是找麻烦
用 diagram or programming language 描述流程有何不好
我宁愿看 for 也不要 sigma
--
┌─────◆KKCITY◆─────┐ ◢
◤ 找歌最方便 KKBOX 歌词搜寻!!
│ bbs.kkcity.com.tw │ \^_^ / ★http://www.kkbox.com.tw★
└──《From:59.120.53.7
》──┘ ◤ 唱片公司授权,音乐尽情下载
--