python - Ruby 和 Python 如何实现它们的交互式控制台?

标签 python ruby interpreter command-line-interface interactive

在为我的编程语言实现解释器时,我首先想到了一个简单的控制台窗口,它允许用户输入一些代码,然后作为一个独立的程序作为 shell 执行。

但是存在严重的问题:如果用户输入的每一行代码都作为一个独立的程序处理,它必须通过分词器和解析器,然后才由解释器执行——那么函数呢?

  • Python/Ruby 交互式控制台(IDLE、irb)如何“共享”代码?如何处理输入的代码?

例子:

>> def x:
>>  print("Blah")
>> 
>> x()

函数存储在哪里以便可以随时再次调用?

交互式控制台如何将输入的所有内容明显地视为一个程序,而不是一遍又一遍地执行所有内容?

最佳答案

对于 Python,表达式只有在所有圆括号、方括号等都匹配后才算完整。这很容易检测到。在输入一个完全空白的行之前,函数/类定义是不完整的。编译器然后编译输入的表达式或定义,并运行它。

与普通函数、类、模块等非常相似,REPL 有自己的本地作用域。正是这个范围用于输入到 REPL 中的变量和定义。

关于python - Ruby 和 Python 如何实现它们的交互式控制台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2649250/

相关文章:

javascript - 语法验证器

python - 是否有可能用纯 Python 编写与魔兽世界一样大的 3D 游戏?

python - Pandas 按组聚合排序并计算两列的总和

ruby-on-rails - 无论如何让RubyMine选择像Intellij Idea一样的第一个完成选择?

ruby - "uninitialized constant OpenSSL::PKey::EC"来自 CentOS 6.6 上的 Ruby

compiler-construction - 动态基本 block 与静态基本 block 和分支

javascript - 是否可以使用 shebang 但不知何故 "conceal"它来自 JavaScript 解释器?

c++ - do{}while(0) 有什么用?

python - 存储永久数据的最佳实践?

arrays - 如何使我的 ruby​​ remove_duplicates(nums) 算法更高效