#lexer #javascript-compiler #javascript #compiler #js #javascript-parser

boa_engine

Boa是一个用Rust编写的JavaScript词法分析器、解析器和编译器。目前,它支持该语言的一些特性。

8个版本 (5个破坏性更新)

0.19.0 2024年7月11日
0.18.0 2024年3月7日
0.17.3 2023年9月26日
0.17.0 2023年7月8日
0.14.0 2022年3月15日

#3 in 编程语言

Download history 5648/week @ 2024-05-03 6148/week @ 2024-05-10 5154/week @ 2024-05-17 4530/week @ 2024-05-24 4773/week @ 2024-05-31 5094/week @ 2024-06-07 5665/week @ 2024-06-14 6013/week @ 2024-06-21 5843/week @ 2024-06-28 6227/week @ 2024-07-05 8103/week @ 2024-07-12 7115/week @ 2024-07-19 6322/week @ 2024-07-26 6722/week @ 2024-08-02 7354/week @ 2024-08-09 6929/week @ 2024-08-16

每月下载量28,643
用于 21 个crate(13个直接使用)

Unlicense OR MIT

7MB
116K SLoC

Boa

Boa logo

这是一个用Rust编写的实验性JavaScript词法分析器、解析器和解释器。目前,它支持该语言的一些特性。

Build Status codecov Crates.io Docs.rs Discord Matrix

实时演示(WASM)

现在在实时WASM游戏场中试用引擎!点此

更喜欢命令行界面?请随意试用boa_cli

Boa Crates

Boa目前发布并积极维护以下crate

  • boa_ast - Boa的ECMAScript抽象语法树
  • boa_cli - Boa的命令行界面和REPL实现
  • boa_engine - Boa的ECMAScript内置对象和执行实现
  • boa_gc - Boa的垃圾回收器
  • boa_interner - Boa的字符串池
  • boa_parser - Boa的词法分析和解析器
  • boa_profiler - Boa的代码分析器
  • boa_icu_provider - Boa的ICU4X数据提供者
  • boa_runtime - Boa的WebAPI功能
  • boa_string - Boa的ECMAScript字符串实现。

请注意:Boaboa_unicodecrate已弃用。

Boa Engine 示例

要使用Boa,只需按照以下步骤操作。

将以下依赖项添加到您的Cargo.toml

[dependencies]
boa_engine = "0.19.0"

然后在main.rs中复制以下内容

use boa_engine::{Context, Source, JsResult};

fn main() -> JsResult<()> {
  let js_code = r#"
      let two = 1 + 1;
      let definitely_not_four = two + "2";

      definitely_not_four
  "#;

  // Instantiate the execution context
  let mut context = Context::default();

  // Parse the source code
  let result = context.eval(Source::from_bytes(js_code))?;

  println!("{}", result.display());

  Ok(())
}

现在,剩下的只是执行以下命令:

恭喜!您已使用Boa执行了您的第一个JavaScript

文档

有关Boa API的更多信息,请查看我们的文档。

API文档

一致性

要了解Boa覆盖了多少ECMAScript规范,您可以检查运行此处ECMASCript Test262测试套件的结果。

贡献

请查看CONTRIBUTING.md文件,了解如何在项目中贡献力量。您需要安装Rust和一个编辑器。我们为VSCode准备好了配置。

调试

有关调试的更多信息,请查看debugging.md

Web Assembly

这个解释器可以暴露给JavaScript!您可以使用以下命令在本地构建示例:

npm run build

在控制台中,您可以使用window.evaluate传入JavaScript。要在Web Assembly方面进行开发,您可以运行

npm run serve

然后转到http://localhost:8080

使用方法

  • 克隆此仓库。
  • 在项目根目录下运行cargo run -- test.js,其中test.js是包含任何有效JS代码的现有JS文件的路径。
  • 如果任何JS无法工作,则表示存在错误。请提出问题

示例

Example

命令行选项

Usage: boa [OPTIONS] [FILE]...

Arguments:
  [FILE]...  The JavaScript file(s) to be evaluated

Options:
      --strict                        Run in strict mode
  -a, --dump-ast [<FORMAT>]           Dump the AST to stdout with the given format [possible values: debug, json, json-pretty]
  -t, --trace                         Dump the AST to stdout with the given format
      --vi                            Use vi mode in the REPL
  -O, --optimize
      --optimizer-statistics
      --flowgraph [<FORMAT>]          Generate instruction flowgraph. Default is Graphviz [possible values: graphviz, mermaid]
      --flowgraph-direction <FORMAT>  Specifies the direction of the flowgraph. Default is top-top-bottom [possible values: top-to-bottom, bottom-to-top, left-to-right, right-to-left]
      --debug-object                  Inject debugging object `$boa`
  -m, --module                        Treats the input files as modules
  -r, --root <ROOT>                   Root path from where the module resolver will try to load the modules [default: .]
  -h, --help                          Print help (see more with '--help')
  -V, --version                       Print version

路线图

请参阅里程碑

基准测试

请参阅基准测试

性能分析

请参阅性能分析

变更日志

请参阅CHANGELOG.md

通信

如果您有任何问题,请随时通过Matrix联系我们。如果您有兴趣贡献,贡献讨论将在同一个Matrix Space上进行。我们还有一个Discord用于任何问题或问题。

许可证

此项目根据您的选择,在UnlicenseMIT许可证下授权。

依赖关系

~11–19MB
~255K SLoC