Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/luozijun/es
A ECMAScript Parser and Interpreter written in Rust
https://github.com/luozijun/es
ast compiler ecmascript es es2018 interpreter lexer parser
Last synced: 14 days ago
JSON representation
A ECMAScript Parser and Interpreter written in Rust
- Host: GitHub
- URL: https://github.com/luozijun/es
- Owner: LuoZijun
- License: mit
- Created: 2018-07-07T23:38:03.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2021-08-02T05:26:04.000Z (over 3 years ago)
- Last Synced: 2024-04-15T13:11:13.429Z (7 months ago)
- Topics: ast, compiler, ecmascript, es, es2018, interpreter, lexer, parser
- Language: Rust
- Homepage: https://luozijun.github.io/es/ecmascript/
- Size: 4.75 MB
- Stars: 10
- Watchers: 2
- Forks: 1
- Open Issues: 6
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
ECMAScript
==================================.. contents::
Work in progress (WIP).
项目状态
----------* ✅ 词法分析器 (Lexer)
* 🦋 语法分析器 (Parser)
* 🔜 编译器 (Compiler)
* 🔜 解释器 (Interpreter)**Lexer**:
*JSX*:
* ❌ JSXText
**Parser**:
* ✅ EmptyStatement
* ✅ DebuggerStatement
* ❌ Expression* ✅ Identifier
* ✅ LiteralNull
* ✅ LiteralBoolean
* ✅ LiteralString
* ✅ LiteralNumeric
* ✅ LiteralRegularExpression
* ✅ LiteralTemplateExpression
* ❌ LiteralArray
* ❌ LiteralObject
* ✅ ThisExpression
* ✅ MemberExpression ( include `SuperMemberExpression` )
* ✅ NewTargetExpression
* ✅ NewExpression
* ✅ PrefixExpression
* ✅ InfixExpression
* ✅ PostfixExpression
* ✅ AssignmentExpression
* ✅ ConditionalExpression
* ✅ YieldExpression
* ✅ CallExpression ( include `SuperCallExpression` )
* ✅ TaggedTemplate
* ✅ SpreadExpression
* ✅ CommaExpression
* ✅ ParenthesizedExpression ( Grouping )
* ❌ ObjectBindingPattern ( Destructuring )
* ❌ ArrayBindingPattern ( Destructuring )
* ✅ ClassExpression
* ✅ FunctionExpression
* ✅ GeneratorExpression
* ✅ AsyncFunctionExpression
* ✅ AsyncGeneratorExpression
* ✅ ArrowFunctionExpression
* ✅ AsyncArrowFunctionExpression* ❌ VariableStatement
* ✅ BlockStatement
* ❌ IfStatement
* ❌ DoWhileStatement
* ❌ WhileStatement
* ❌ ForStatement
* ❌ ForInStatement
* ❌ ForOfStatement
* ❌ ForAwaitOfStatement
* ❌ ContinueStatement
* ❌ BreakStatement
* ❌ ReturnStatement
* ❌ WithStatement
* ❌ SwitchStatement
* ❌ LabelledStatement
* ❌ ThrowStatement
* ❌ TryStatement
* ✅ FunctionDeclaration
* ✅ ClassDeclaration*JSX*:
* ❌ JSXFragment
* ❌ JSXElement ( JSXSelfClosingElement, JSXNormalElement, )*Scripts and Modules*:
* ❌ ImportDeclaration
* ❌ ExportDeclaration原则
----------1. 完全尊重 ECMAScript 语言规范,规范之外的内容均不会考虑(JSX 将是唯一的一个例外)。
2. 语法分析器和解释器只支持严格模式,这意味着一些在非严格模式下的语法都将会直接抛出错误。
3. 分号自动补全问题,这个还没有定,个人倾向于必须写。愿景
----------1. 语法分析器完整支持 ECMAScript 已发布语法规范(Release),处于提议阶段的语法特性或其它组织定义的语法都不会考虑(JSX例外)。
2. 编译器支持编译为 字节码(ByteCode) 和 低版本的源代码(ES2011 - ES2018)。
3. 实现一个简单的解释器。友好的错误提示
---------------.. code::
~/P/es> cargo run --example esc -- < in.js
SyntaxError: Unexpected Character `/`
--> src/main.js:1:1
|
1 | #/usr/bin/env python3
| ^用例
---------这是设想当中的使用方法,目前处于不可用状态。
.. code:: bash
esc src/main.js
esc src/index.html
esc --to es2011 src/main.js
esc --to es2011 --bundle src/main.js
esi src/main.jsFAQ
--------会考虑支持 ECMAScript 语言的一些超集或子集(如: TypeScript/Flow)吗?
除了 `JSX` 其它的都不会考虑。
会考虑实现目前尚处于提议阶段的语法特性和内建API设计吗?
不会,如果最终这些提议能够顺利进入发布阶段,那个时候肯定会去实现改提议的特性。
一些在现有生态代码里面非常常见的写法(如 Babel 支持它),但它不是 ECMAScript 规范的一部分,这样的语法特性会考虑兼容吗?
不会。
License
---------MIT license (LICENSE or http://opensource.org/licenses/MIT)