看板Programming
标 题Re: [问题] 如何学写COMPILER? [纯抛砖引玉]
发信站政大狂狷年少 (Fri Apr 27 21:40:10 2007)
转信站ptt!ctu-reader!ctu-peer!news.nctu!netnews.csie.nctu!news.cs.nthu!WHSHS
※ 引述《[email protected] (绝对命运默示录)》之铭言:
> 我也对这点感到有疑问
> C++语法本身的ambigious真的只能靠LL(1)就能parse吗?
> 目前我知道的作法都是syntactic和semantic分析要混在一起
> 没办法切得很开的
> 网路上搜寻John Lilley後发现他的网页已经挂了
> 不知大大也没有更进一步的资讯可以参考
会让 LL 炸的原因,
主要是 common prefix 和 left recursive,
但是这两项透过 grammar 改写就 ok 了,
比较会有争议的其实还是那个 (1),
大家怀疑的重心都是落在那上面。
至於实务上当然不会这麽无聊去搞这些理论,
要故意把 parser 做成是 LL(1) 到 LL(∞) 弹性变动是很容易的,
虽然 boost 官方在列表上是以 LL parser (学术上习惯没写就当 1),
但实质上它是 LL(∞),
在 wikipedia 上有明确记载它是 flexible LL(∞)。
也因为实务上的弹性太大,
所以大家才在怀疑 C++ 一定要 LL(k), k >= 2 才能 parsing,
也因此引来了一些没事干的数学玩家。
那个早期的理论是否还适用 C++03 和 C++0x,
我就不晓得了,
C++ 的爸爸打算让 vector<vector<int>> 能用,
这可能会造成某种程度的影响。
--
Name: Tseng, Ling-hua E-mail Address:
[email protected]
School: National Tsing Hua University Department: Computer Science
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage:
https://it.muds.net/~uranus
--
╔═══╗ ┼────────────────────────╮
║狂狷 ║ │
* Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮
║ 年少║ ┼╮
< IP:140.119.164.252 > ╰─╮
╚╦═╦╝ ╰
* From:61-230-220-241.dynamic.hinet.net
─╨─╨─ KGBBS ─ ◎ 遨翔"BBS"的狂狷不驯;属於年少的轻狂色彩 ◎