随笔-91  评论-137  文章-0  trackbacks-0

分析器

LR项目内有一宏定义可定义为LR0或SLR1
LR1分析器分析速度过慢有待优化..
求Follow集用了非递归算法,发现递归算法容易引起无限循环.
希望对正在学习编译原理的同学有所启发.
posted on 2010-07-18 18:02 lwch 阅读(4704) 评论(6)  编辑 收藏 引用 所属分类: NScript

评论:
# re: LR(0),SLR(1),LR(1)分析器源码 2010-07-18 20:55 | 陈梓瀚(vczh)
显然这只能说明递归退出条件没做好  回复  更多评论
  
# re: LR(0),SLR(1),LR(1)分析器源码 2010-07-18 22:19 | lwch
优化完Debug版本效率差不多提升了一半,Release版本差不多2,300毫秒
开启代码的完全优化Debug版本和之前相比提升了10倍左右..
算法主要时间基本都消耗在反复读取指针的值上  回复  更多评论
  
# re: LR(0),SLR(1),LR(1)分析器源码 2010-07-19 12:57 | 陈梓瀚(vczh)
@lwch
根据经验,release独立运行比Debug调试运行要快32倍,不然就是你IO太多……  回复  更多评论
  
# re: LR(0),SLR(1),LR(1)分析器源码 2010-07-19 15:32 | lwch
@陈梓瀚(vczh)
没算上IO时间,时间主要消耗在DFA的状态机生成上..  回复  更多评论
  
# re: LR(0),SLR(1),LR(1)分析器源码 2010-07-19 15:54 | lwch
现在156个状态435条边Release版本需要15秒左右..  回复  更多评论
  
# re: LR(0),SLR(1),LR(1)分析器源码 2010-07-20 16:58 | lwch
采用新的算法生成DFA状态机,现在生成126个状态,408条边仅需1.1秒..  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理