+ -
当前位置:首页 → 问答吧 → Perl Parser 的解析过程

Perl Parser 的解析过程

时间:2011-07-12

来源:互联网

之前看文档了解到 Perl 解析的过程比较复杂,手写的 tokenizer 而且还要和 yacc 交互,再就是 parse Perl 属于停机问题但没有真正理解。不过今天看过这个示例之后明白了
  1. whatever / 25 ; # / ; die "this dies!";
复制代码
解析这条语句的时候 tokenizer 必须知道 whatever 的 prototype 因为 没有原型或为 ($) 和 () 表现为两种不同的结果。

没有原型或($) 为
  1. whatever /25 ; #/;
  2. die "this dies!";
复制代码
() 为
  1. whatever /25; #剩下的全是注释
复制代码
因为函数原型可以在任何地方声明只要在该语句前面就行,甚至可以在 eval 中,所以代码必须要执行到这里才能判断这条语句到底是什么意思。

推理可知解析完一条语句,如果是 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




    不加use strict我搞不清楚是在写perl还是写erlang.

作者: 兰花仙子   发布时间: 2011-07-12