查看:518|回复:2
  • 1
microsat
头像
少校
  • 少校
  • 3313
  • 4
  • 5417
  • 0
  • @2007-06-20
发表于:2023-10-03 15:21|只看楼主
字体大小:T|T

编译器parsing问题

请问大家在写程序parsing一段代码的时候,


读取问题:


是一个字符一个字符的读;

还是整个代码全部一次性读取?


parsing问题:

是从左到右一个字符一个字符的分析?

还是从两边,向中间,一块字符一块字符的分析?


举个例子


while (x>1) {

print x;

}


大家是把{ print x;} 整个提取?


还是先提取{

再提取print x;

最后提取}


后者是以前的旧技术。整个提取听说是当今编译器的最新技术。


旧技术是一个指针。从左到右的读取和分析。

新技术是两个指针,从左右两边同时分别开始读取和分析。


大家说说,你认为哪个更先进?


再举个例子来说明这个问题。

(1+2) * (3+4)

传统方法是从左到右,(, 1, +, 2, ), *, (, 3, +, 4, )

新方法是从左右两边同时开始

左 (1+2)

右 (3+4)

左 * 右






最后编辑microsat 最后编辑于 2023/10/03 15:28:37
0
When you buy via links in posts, huaren.us may earn a commission
Advertisement
NSGA
头像
中士
  • 中士
  • 943
  • 1
  • 1135
  • 0
  • @2010-01-30
发表于:2023-10-03 15:43|只看TA
字体大小:T|T

这两种读取方法并无先进后进之分。最终都是需要读取全部然后再让FSM来解析syntax。

0
Advertisement
liujan611
头像
列兵
  • 列兵
  • 13
  • 0
  • 13
  • 0
  • @2022-10-18
发表于:2023-10-05 04:52|只看TA
字体大小:T|T

回复 1楼microsat的帖子

compiler construction: principles and practise. 这书看过就没这困惑了。


读取和读文本文件的方式有关系,一般逐行/块读,一直到EOF。 先是解析出一个个token。

应用递归下降分析文法,构造AST。


还有一些应用bison,lalr(1)解析器。 或者ANTLR,LL(1)解析器。根据lex/文法定义,抽取生成ast

0
查看:518|回复:2
  • 1
Advertisement

回复贴子