28个稳定版本

1.7.8 2024年8月7日
1.7.4 2024年7月29日
1.5.8 2022年12月22日
1.5.4 2022年10月19日
0.1.0 2022年7月20日

#39 in 编程语言

Download history 126/week @ 2024-05-18 111/week @ 2024-05-25 149/week @ 2024-06-01 167/week @ 2024-06-08 188/week @ 2024-06-15 118/week @ 2024-06-22 401/week @ 2024-06-29 429/week @ 2024-07-06 237/week @ 2024-07-13 333/week @ 2024-07-20 767/week @ 2024-07-27 477/week @ 2024-08-03 88/week @ 2024-08-10 13/week @ 2024-08-17

1,394每月下载量

MIT许可证

3.5MB
2.5K SLoC

赫拉克利特

Crate API

赫拉克利特是一个用Rust编写的开源编译器前端。它将被用作诸如Amber火焰等编程语言的基础。

赫拉克利特 - 编译器前端

使用赫拉克利特,您可以通过跳过繁琐的词法分析步骤并使用便捷的解析方法来创建自己的语言,从而快速开始您的语言。

您需要的主要构造是 Compiler。编译器将标记您的代码并以您可以使用的方式组装它,从而通过实现帮助您解析代码的预定义特质来创建抽象语法树。

这非常简单。为了开始,您需要三个步骤

  1. 创建词法规则
  2. 创建您的AST节点,并让它们实现此包提供的特质
  3. 创建编译器并连接所有组件

好了!🎉

现在您已经拥有了一个可以分析/解释/验证/编译AST的现成工具。

准备好开始了吗?

示例

use heraclitus::prelude::*;
Compiler::new("HerbScript", rules);

建议使用包含的预定义导入仅导入所需的项。

代码编译器需要词法规则才能存在。

let cc = Compiler::new("HerbScript", rules);
let tokens = cc.tokenize()?;

变更日志 🚀

版本 1.7.8

修复

  • 防止日志记录器在尝试显示超出范围的区域时引发恐慌

版本 1.7.4

修复

  • Logger::text现在不以换行符结尾

功能

  • 添加了Logger::line方法,该方法在末尾添加新行(与旧的Logger::text相同)

版本 1.7.2

修复

  • PositionInfo::from_between_tokens即使在结束标记为None时也会显示范围

版本 1.7.1

修复

  • 修复计算标记开始索引的bug

版本 1.7.0

功能

  • 标记现在包含关于源代码中第一个字符索引的信息
  • 添加了PositionInfo::from_between_tokens方法,用于在消息中选择两个标记之间的区域

版本 1.6.2

修复

  • 修复了处理不当的转义

版本 1.6.1

修复

  • 移除调试信息

版本 1.6.0

修复

  • 当错误发生在文件边界之外时,赫拉克利特不再崩溃

版本 1.5.9

修复

  • 转义键的转义现在将其视为字符

版本 1.5.8

修复

  • 现在正确处理了转义区域

版本 1.5.7

修复

  • 主要的修复导致词法分析器在定义一个比一个字符更长的起始规则的区域时产生未定义的行为。

版本 1.5.6

修复

  • 编译器现在不再强烈依赖于提供源代码。它现在可以打开路径中提供的文件。这可以极大地提高编译器处理导入时的性能。

版本 1.5.5

功能

  • 在解析器调试模式下显示经过的时间

版本 1.5.4

修复

  • 偏移量现在支持负值

版本 1.5.3

修复

  • 令牌现在推导 Default 特性

版本 1.5.2

修复

  • 消息现在在显示时不会消耗自身
  • 由于我们看不到使用它们的原因,因此移除了 warn*info*

版本 1.5.1

功能

  • 添加了 error_atwarn_atinfo_at

版本 1.5.0

功能

  • 重大变更:所有新的 Failing API
  • 语法结果现在返回 Failing 枚举
  • 现在鼓励将错误传播回 AST 的根
  • 添加了 context 宏以支持更好的开发者体验

版本 1.4.0

功能

  • 跟踪

修复

  • 终端颜色(对非 truecolor 控制的支持)
  • 日志记录器现在将错误打印到 STDERR

版本 1.3.1

修复

  • 多行区域无法解析

版本 1.3.0

功能

  • 添加了对 UTF 符号的支持

版本 1.2.6

修复

  • 存在一个关键错误,即非可标记区域被标记

版本 1.2.5

功能

  • 修改了 Logger API,以改进添加代码片段
  • Logger::new_err 现在称为 Logger::new_err_at_position
  • Logger::new_warn 现在称为 Logger::new_warn_at_position
  • Logger::new_info 现在称为 Logger::new_info_at_position

版本 1.2.4

修复

  • 在显示代码片段时,Logger 中的坏令牌高亮显示

版本 1.2.2

修复

  • 存在一个主要的错误,即标记的插值以错误的方式解析。
  • 现在在编译时内联了密集使用的代码

版本 0.2.1

功能

  • ErrorDetails::from_token_option(...) 现在可以用于在给定令牌的位置创建错误

版本 0.2.0

功能

  • 添加了化合物
  • 日志记录器现在可以显示与代码无关的消息
  • 新的检索当前令牌的方法
  • 新的调试功能

修复

  • 将所有函数参数的字符串引用更改为 impl AsRef<str>

依赖项

~0.4–10MB
~43K SLoC