查看:518|回复:2
- 1
编译器parsing问题
请问大家在写程序parsing一段代码的时候,
读取问题:
是一个字符一个字符的读;
还是整个代码全部一次性读取?
parsing问题:
是从左到右一个字符一个字符的分析?
还是从两边,向中间,一块字符一块字符的分析?
举个例子
while (x>1) {
print x;
}
大家是把{ print x;} 整个提取?
还是先提取{
再提取print x;
最后提取}
后者是以前的旧技术。整个提取听说是当今编译器的最新技术。
旧技术是一个指针。从左到右的读取和分析。
新技术是两个指针,从左右两边同时分别开始读取和分析。
大家说说,你认为哪个更先进?
再举个例子来说明这个问题。
(1+2) * (3+4)
传统方法是从左到右,(, 1, +, 2, ), *, (, 3, +, 4, )
新方法是从左右两边同时开始
左 (1+2)
右 (3+4)
左 * 右
When you buy via links in posts, huaren.us may earn a commission
Advertisement
Advertisement
回复 1楼microsat的帖子
compiler construction: principles and practise. 这书看过就没这困惑了。
读取和读文本文件的方式有关系,一般逐行/块读,一直到EOF。 先是解析出一个个token。
应用递归下降分析文法,构造AST。
还有一些应用bison,lalr(1)解析器。 或者ANTLR,LL(1)解析器。根据lex/文法定义,抽取生成ast
查看:518|回复:2
- 1
Advertisement