1 个不稳定版本

0.0.0-dev12020年8月23日

#1896 in 文本处理

MIT 许可协议

150KB
3.5K SLoC

背景

本项目旨在使用解析器组合器创建一个完整的 Ruby 语言词法分析器。

MRI 的区别

  • 控制字符可以递归转义
    "\C-\C-\\n" # => "\n"
    

实现注意事项

表达式/语句/分组

  • 在此实现中,表达式和语句之间没有语义上的区别
  • Token::Block 包含一系列语句(每个项目都被视为一个语句)
  • Token::Expression 包含构成单个语句的标记列表
  • 通过括号的使用,块和表达式标记可以嵌套
    (2 + (puts "hi"; 4 - 8;;)) * 5
    #hi
    #=> -10
    

部分输入的词法分析

可以将 Input 类型扩展为跟踪一个表示词法分析器输入是否完整或部分(如 IRB 的 REPL)的布尔字段。在部分模式下,可能未完成的组合器(如开字符串、数组等)可以返回一个 Token::IncompleteInput,以在它们的标记流末尾表示该标记尚未在用户输入的末尾完成。

我还没有确定是否应该使用开始/结束标记来处理复杂对象,但它们在处理部分输入时可能很有用。

待办事项

依赖项

~2MB
~41K SLoC