我怎样才能创建像PHP这样的语言,它是如何工作的?

时间:2010-11-24 09:34:46

标签: php compiler-construction language-design

我想知道如何创建像PHP这样的语言。服务器如何知道如何翻译PHP文件?它是如何工作的?我想这样做是出于教育目的。一种简单的语言,具有回声等基本功能。

4 个答案:

答案 0 :(得分:4)

在基础知识中,当webserver获取处理php文件的请求时,它将此请求转换为php处理器,它可能是一个模块(如apache中的php.so)或服务(如php-cgi)。服务或模块将php脚本编译为机器代码,执行它并向服务器提供其工作的结果。您可以从http://php.net下载php源代码。源代码包括解析器,thanslator,编译器和执行php脚本作为机器代码所需的其他组件

答案 1 :(得分:4)

将您的任务划分为至少两个顶级部分:

  1. PHP只是另一种编程语言 - 你需要一个词法分析器,解析器和解释器。

  2. Web服务器的库和模块使Apache / TomCat与PHP接口。

答案 2 :(得分:2)

这是一个非常大的问题。而不是一个可以在这里真正回答的问题,而是一些可以帮助你入门的指示......

PHP公开了它的一些内部工作 - 如果你看一下:

<?php

$srctokens=token_get_all(file_get_contents(__FILE__));
print "<pre>\n";
foreach ($srctokens as $tok) {
   print token_name($tok[0]) . ' -&gt; ' . $tok[1]; 
}
?>

你会看到它将代码分成'单词'并为每一个分配元数据(它是函数名,变量,运算符......)。

然后将其构建为树结构,例如'if'语句可能有三个子节点 - 要评估的表达式(它本身会有子节点),一些代码用于评估表达式是否为真,还有一些代码用于评估表达式是否为假。

通常,它会使用一组内置函数从外部读取数据并将数据推送到外部世界。

Wikipedia或谷歌通常是了解你不了解的东西的好起点。

值得注意的是,因为它是一种解释型语言,所以使用eval()或create_function()(或仅使用临时文件)从PHP数据结构创建可执行代码很简单。实际上,您甚至可以实现结构化重写系统,使原始数据看起来不像PHP代码。例如lolcode

但是你需要非常小心,不要将这种机制暴露给可能滥用它的人。

HTH

答案 3 :(得分:2)

您也可以用PHP编写它,例如BobX。请注意,BobX实际上是 NOT 要做的一个例子。