Perl Parser 的解析过程
时间:2011-07-12
来源:互联网
之前看文档了解到 Perl 解析的过程比较复杂,手写的 tokenizer 而且还要和 yacc 交互,再就是 parse Perl 属于停机问题但没有真正理解。不过今天看过这个示例之后明白了
复制代码
解析这条语句的时候 tokenizer 必须知道 whatever 的 prototype 因为 没有原型或为 ($) 和 () 表现为两种不同的结果。
没有原型或($) 为
复制代码
() 为
复制代码
因为函数原型可以在任何地方声明只要在该语句前面就行,甚至可以在 eval 中,所以代码必须要执行到这里才能判断这条语句到底是什么意思。
推理可知解析完一条语句,如果是 use、BEGIN 等这些编译期执行的语句的时候 tokenizer 必须停下来,等它们执行完再在原地继续解析否则就会出错。
欢迎继续推理
链接 http://ebiquity.umbc.edu/blogger ... idered-undecidable/
- whatever / 25 ; # / ; die "this dies!";
没有原型或($) 为
- whatever /25 ; #/;
- die "this dies!";
- whatever /25; #剩下的全是注释
推理可知解析完一条语句,如果是 use、BEGIN 等这些编译期执行的语句的时候 tokenizer 必须停下来,等它们执行完再在原地继续解析否则就会出错。
欢迎继续推理
链接 http://ebiquity.umbc.edu/blogger ... idered-undecidable/
作者: zhlong8 发布时间: 2011-07-12
这里没考虑 whatever 是 bareword 的情况,因为用 strict 可以排除,如果是 bareword 那就是第二种情况
作者: zhlong8 发布时间: 2011-07-12
QUOTE:
这里没考虑 whatever 是 bareword 的情况,因为用 strict 可以排除,如果是 bareword 那就是第二种情况
zhlong8 发表于 2011-07-12 14:05
zhlong8 发表于 2011-07-12 14:05
不加use strict我搞不清楚是在写perl还是写erlang.
作者: 兰花仙子 发布时间: 2011-07-12
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28