Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
lmpythw-zh
提交
ba101d5c
L
lmpythw-zh
项目概览
OpenDocCN
/
lmpythw-zh
8 个月 前同步成功
通知
0
Star
18
Fork
5
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
lmpythw-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
ba101d5c
编写于
8月 14, 2017
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ex37
上级
737f1d71
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
43 addition
and
0 deletion
+43
-0
ex37.md
ex37.md
+43
-0
未找到文件。
ex37.md
0 → 100644
浏览文件 @
ba101d5c
# 练习 37:小型 BASIC
> 原文:[Exercise 37: Little BASIC](https://learncodethehardway.org/more-python-book/ex37.html)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
你现在要及时回到我的童年,并实现一个 BASIC 解释器。不,我这里的 BASIC 不是指“一个非常简单的基本的解释器”。我的意思是 BASIC 编程语言。它是最早的编程语言之一,最初由 John Kemeny 和 Thomas Kurtz 在 Dartmouth 创建。这个基本版本叫做 Dartmouth BASIC,
[
在 Dartmouth BASIC 维基百科页面
](
https://en.wikipedia.org/wiki/Dartmouth_BASIC
)
上,代码看起来像这样:
```
basic
5 LET S = 0
10 MAT INPUT V
20 LET N = NUM
30 IF N = 0 THEN 99
40 FOR I = 1 TO N
45 LET S = S + V(I)
50 NEXT I
60 PRINT S/N
70 GO TO 5
99 END
```
左边的数字实际上是手动输入的行号。你告诉 BASIC 每行一个数字,然后你可以只是告诉它“跳到”那一行来循环。后来在其他版本的 BASIC 中成为了
`GOTO`
,成为计算时代的象征。
BASIC 的最新版本,在
[
BASIC 维基百科页面
](
https://en.wikipedia.org/wiki/BASIC
)
上记载,该页面记载了这个语言的漫长演化过程,朝着越来越现代的形式。过了一段时间,它吸收了 C 和 Algol 这样的结构,然后它面向对象,今天你可以找到相当先进的 BASIC 版本。如果你想要现代的免费 BASIC,请查看 Gambas BASIC,网址为
<http://gambas.sourceforge.net/en/main.html>
。
## 挑战练习
你的挑战是实现原始的 BASIC 解释器 - 具有手动行号和所有 CAPS(大写)文本样式的解释器。你需要查看
[
BASIC 维基百科页面
](
https://en.wikipedia.org/wiki/BASIC
)
,来获得可能的记号和示例代码,并阅读
[
Dartmouth BASIC 维基百科页面
](
https://learncodethehardway.org/more-python-book/https//en.wikipedia.org/wiki/Dartmouth_BASIC
)
来了解更多线索。你的解释器应该能处理尽可能多的原始 BASIC 并产生有效的输出。
当你尝试这样做时,我建议你尝试简单的数学运算,打印和跟踪行号。之后,我会努力使
`GOTO`
正常工作。如果你完成它的话,你可以完成剩余部分,慢慢开发一套测试程序,来确保你的解释器工作顺利。
祝你好运!这可能花费你一段时间,但它应该很有趣。我可以看到自己花了几个月的时间在这上面,添加愚蠢的功能,像图形,所以我可以创建所有这些愚蠢的小程序,当我还是孩子的时候我编写了它们。我写了这么多 BASIC 代码,计算行号绝对扭曲了我的大脑。这可能是我这么喜欢 Vim 的原因。
## 研究性学习
这个练习很困难,但如果你想要一些额外的挑战,请执行以下操作:
+
使用像 SLY 这样的解析器生成器,创建一个替代的解释器。一旦你有了 ABNF,这可能会变得更加容易,但是对于 BASIC 这样的语言可能更难。你必须这样做才能弄清楚。
+
尝试制作一个“结构化 BASIC”的版本,它拥有函数,循环,
`if`
语句,以及你可以在较旧的非 OOP 语言(如 C 或 Pascal)中找到的所有内容。这是一个巨大的任务,所以建议你尝试不要手写 RDP 解析器。使用像 SLY 这样的工具生成你的解析器,并为更重要的东西节省你的脑力。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录