跳转到主要内容

适用于运行MININEC的最小BASIC解释器

项目描述

作者:

Ralf Schlatterbeck <rsc@runtux.com>

这是一个用于早期IBM PC中使用的旧BASIC方言的解释器,实际上是在UNIVAC上存在的更早版本的BASIC(根据[1]那里的代码),可以在Yabasi上运行(在UNIVAC上运行)。

它是用Python编写的。我周末写这个是为了能够运行旧的MININEC代码(链接的MININEC版本包含一些小的修复)。它几乎没有错误检查(它依赖于代码的正确性,而不是试图帮助你在BASIC中编写新程序,我认为世界上不需要新的BASIC代码)。如果你正在寻找一个工作的BASIC解释器,请查看pcbasic实现,它也是用Python编写的,但忠实复制了当时机器的内存限制。它似乎使用单精度浮点数。这就是我编写自己的解释器的原因:我需要比较双精度计算,而且无法将一些示例放入pcbasic的有限内存中。

我可能不会花太多精力去改进这段代码,它已经实现了目的:运行(并在Python中进行调试)旧的 MININEC 代码,以便我比较BASIC中的计算与我用Python重新实现的 MININEC,即 pymininec

但实际上,代码现在可以运行的版本比公开可用的 MININEC 版本更多,并实现了当时的一些基本二进制文件I/O机制。

更改

版本1.0:更多修复

这个版本有很多修复,不仅限于运行 MININEC,现在它可以用来读取二进制文件(MININEC 使用预处理器脚本来创建天线几何形状的二进制表示)并且它可以运行不带每行行号的程序。

  • 我们不再需要在每行上都有行号

  • 处理多行 IF/END IF

  • 动态 DIM 语句

  • 使用 GET/PUT 进行二进制文件I/O,请注意,如果指定了记录长度,则文件将以二进制方式打开,这可能在某个时候应该改为将Python字符串表示法中写入的所有内容都转换为必要的二进制,并将所有文件以二进制模式打开。我们使用Basic的默认打开文件方式,即读写打开,所以如果一个打开用于读取但不存在文件将被创建为长度为零不要感到惊讶。

  • int和float从字符串到字符串的转换 - 在Python中,字符串表示为bytes对象 - 这些是函数 MKI$MKS$ 和对 CVICVS 的修复

  • GOSUB 不是语句列表中的最后一个语句时(例如在 IF expr THEN list-of-statements),修复了错误,这没有执行之前的 GOSUB

版本0.3:修复 printlist 规则

PRINT 语句的参数语法可以使用分号(或逗号)分隔表达式,或者将表达式组合在一起而不使用分隔符。后者有一些相当随意的规则,我已经删除了其中许多,结果消除了 reduce/reduce 冲突...

版本0.2:第一个工作(发布)版本

项目详情


下载文件

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

源代码分发

yabasi-1.0.tar.gz (28.0 kB 查看散列)

源代码

构建分发

yabasi-1.0-py3-none-any.whl (26.0 kB 查看散列)

上传于 Python 3

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面