看帖神器
北美华人网
追帖动态
头条新闻
每日新帖
最新热帖
新闻存档
热帖存档
文学峸
虎扑论坛
未名空间
北美华人网
北美微论坛
看帖神器
登录
← 下载
《看帖神器》官方
iOS App
,体验轻松追帖。
编译器parsing问题
查看北美华人网今日新帖
最新回复:2023年10月5日 1点52分 PT
共 (3) 楼
返回列表
订阅追帖
只看未读
更多选项
阅读全帖
只看图片
只看视频
查看原帖
m
microsat
接近 2 年
楼主 (北美华人网)
请问大家在写程序parsing一段代码的时候,
读取问题:
是一个字符一个字符的读; 还是整个代码全部一次性读取?
parsing问题: 是从左到右一个字符一个字符的分析? 还是从两边,向中间,一块字符一块字符的分析?
举个例子
while (x>1) { print x; }
大家是把{ print x;} 整个提取?
还是先提取{ 再提取print x; 最后提取}
后者是以前的旧技术。整个提取听说是当今编译器的最新技术。
旧技术是一个指针。从左到右的读取和分析。 新技术是两个指针,从左右两边同时分别开始读取和分析。
大家说说,你认为哪个更先进?
再举个例子来说明这个问题。 (1+2) * (3+4) 传统方法是从左到右,(, 1, +, 2, ), *, (, 3, +, 4, ) 新方法是从左右两边同时开始 左 (1+2) 右 (3+4) 左 * 右
N
NSGA
接近 2 年
2 楼
这两种读取方法并无先进后进之分。最终都是需要读取全部然后再让FSM来解析syntax。
l
liujan611
接近 2 年
3 楼
回复
1楼microsat的帖子
compiler construction: principles and practise. 这书看过就没这困惑了。
读取和读文本文件的方式有关系,一般逐行/块读,一直到EOF。 先是解析出一个个token。 应用递归下降分析文法,构造AST。
还有一些应用bison,lalr(1)解析器。 或者ANTLR,LL(1)解析器。根据lex/文法定义,抽取生成ast
请输入帖子链接
收藏帖子
读取问题:
是一个字符一个字符的读; 还是整个代码全部一次性读取?
parsing问题: 是从左到右一个字符一个字符的分析? 还是从两边,向中间,一块字符一块字符的分析?
举个例子
while (x>1) { print x; }
大家是把{ print x;} 整个提取?
还是先提取{ 再提取print x; 最后提取}
后者是以前的旧技术。整个提取听说是当今编译器的最新技术。
旧技术是一个指针。从左到右的读取和分析。 新技术是两个指针,从左右两边同时分别开始读取和分析。
大家说说,你认为哪个更先进?
再举个例子来说明这个问题。 (1+2) * (3+4) 传统方法是从左到右,(, 1, +, 2, ), *, (, 3, +, 4, ) 新方法是从左右两边同时开始 左 (1+2) 右 (3+4) 左 * 右
compiler construction: principles and practise. 这书看过就没这困惑了。
读取和读文本文件的方式有关系,一般逐行/块读,一直到EOF。 先是解析出一个个token。 应用递归下降分析文法,构造AST。
还有一些应用bison,lalr(1)解析器。 或者ANTLR,LL(1)解析器。根据lex/文法定义,抽取生成ast