跳转到主要内容

Lox编程语言的Python解释器。

项目描述

pylox

PyPI - Python Version PyPI - Version PyPI - License pre-commit.ci status Code style: black Open in Visual Studio Code

简介

这是我对Robert Nystrom的《Crafting Interpreters》中的Lox编程语言解释器进行的Python实现。

Python?

虽然文本是用Java和C实现的,作为其高级和低级实现,但我不知道如何编写它们!因此,我将使用Python进行高级实现,最终使用Rust进行低级实现。

与文本的差异

为了适应合理大小的文本,完全实现的Lox规范省略了其他编程语言用户可能错过的功能。通常这些功能在章节中以注释的形式讨论,或在章节末尾作为挑战提出。以下列出了此实现与文本参考的重大差异。

通过挑战定义的

  • (第4章):任意嵌套的块注释(/* ... */)
  • (第9章):for和while循环中可用break语句

用户选择

  • 除零返回NaN(Python的float('nan'))
  • 字符串可以使用"或'定义
  • 模运算符(%)
  • 幂运算符(^)
  • 整数除法运算符(\)
  • 都表示浮点数和整数
    • 操作的返回类型遵循Python3的语义
  • 容器
    • array()
  • 基本的include头文件系统
    • 支持标准库导入()和路径导入("path/to/file")
    • 不支持递归include
    • 导入的源代码假定是有效的

额外内置函数

除非另有说明,否则行为与同名的Python函数类似。

通用

  • 输入
  • len
  • ord
  • read_text (通过 pathlib.Path.read_text)
  • str2num
  • string_array
    • 返回一个 LoxArray,其内容与 collections.deque(<some string>) 相当

数学

  • abs
  • ceil
  • divmod
  • floor
  • max
  • min

正则表达式

对于Python等效函数返回 匹配对象 的方法,返回一个 LoxArray。数组中的第一个值始终对应于 match.group(0);如果模式包含一个或多个组,则数组将匹配 match.groups() 的输出

  • re_findall
  • re_match
  • re_search
  • re_sub

统计

  • mean
  • median
  • mode
  • std

纯Lox头文件

  • <array_sum>
  • <hello_world>
  • <map>
  • <split_on>

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分发

sco1-pylox-0.5.1.tar.gz (31.8 kB 查看散列)

上传时间

构建分发

sco1_pylox-0.5.1-py3-none-any.whl (38.5 kB 查看散列)

上传时间 Python 3

支持者