jkrecek/coffeescript

CoffeeScript 编译器移植到 PHP。

1.3.1.2 2015-12-03 11:10 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:04:20 UTC


README

CoffeeScript 编译器的 PHP 版本移植。

状态

CoffeeScript 版本 1.3.1 已完全移植(见 标签)。移植后的编译代码与参考代码有一些细微的差异(例如 #11),但它们在 100% 的情况下是一致的。

要求

PHP 5.3+(使用命名空间,匿名函数)。

安装

建议使用 Composer 安装和自动加载 CoffeeScript。另外,也可以手动加载

<?php

require 'vendor/CoffeeScript/Init.php';

// Load manually
CoffeeScript\Init::load();

?>

使用

API 非常简单(单个 compile($coffee, $options = NULL) 函数)。我没有计划进一步扩展它(保持简单)。以下是可用的选项

  • filename - 源文件名,格式化到错误信息中
  • header - 添加 "Generated by..." 标头
  • bare - 如果设置为 true,生成的 JavaScript 不会嵌入到 IIFE
  • rewrite - 启用重写器(调试)
  • tokens - 对令牌流的引用(调试)
  • trace - 写入解析器跟踪的文件(调试)
<?php

$file = 'path/to/source.coffee';

try
{
  $coffee = file_get_contents($file);

  // See available options above.
  $js = CoffeeScript\Compiler::compile($coffee, array('filename' => $file));
}
catch (Exception $e)
{
  echo $e->getMessage();
}

?>

开发

要重建解析器,请运行 php make.php。测试在浏览器中运行;只需将仓库克隆到 Apache 可以看到的地方,然后导航到 tests/。

常见问题解答

这个项目的动力是什么?

当时我大量使用 PHP,并想使用、了解更多关于 CoffeeScript 项目的内容,并可能为该项目做出贡献。我认为有一个本地版本会很好,所以我尝试了一下。

为什么不修改原始编译器以生成 PHP?

有多个原因... 首先,我不知道为什么你会想要那样。如果你觉得 PHP 不可忍受,那就不要使用它... 第二,原始编译器依赖于 Jison,它是用 JavaScript 编写的,所以你必须做些什么。第三,我认为尝试解决 JavaScript 和 PHP 之间的所有差异(对象模型、核心类和库等)将是一项更艰巨的工作。

你使用什么解析器生成器?

由于没有 Bison(参考编译器使用的)的 PHP 版本,我们使用 Lemon 的移植版本,称为 ParserGenerator

它被本地包含,因为 PEAR 包不再维护且似乎已损坏。此外,对解析器模板(Lempar.php)和实际生成器进行了一些小的修改。