Tag: read eval print loop

是否可以构建交互式C shell?

我只是想知道这是否可能使用(Python,Java或C)? 我正在寻找类似IPython for Python的东西。

使用Flex / Bison进行口译的REPL

我为类似C语言编写了一个解释器,使用Flex和Bison作为扫描器/解析器。 它在执行完整的程序文件时工作正常。 现在我正在尝试在解释器中实现REPL以进行交互式使用。 我希望它像Ruby或ML中的命令行解释器一样工作: 显示提示 接受该行的一个或多个陈述 如果表达式不完整 显示继续提示 允许用户继续输入行 当该行以完整表达结束时 回显评估最后一个表达式的结果 显示主要提示 我的语法以top_level生成开始,它代表语言中的单个语句。 词法分析器配置为stdin上的交互模式。 我在全文件和REPL模式下使用相同的扫描仪和语法,因为两个接口没有语义差异。 我的主要评估循环是这样构建的。 while (!interpreter.done) { if (interpreter.repl) printf(prompt); int status = yyparse(interpreter); if (status) { if (interpreter.error) report_error(interpreter); } else { if (interpreter.repl) puts(interpreter.result); } } 除了提示和回显逻辑之外,这种方法很好。 如果用户在一行上输入多个语句,则此循环将打印出多余的提示和表达式。 如果表达式在多行上继续,则此代码不会打印出连续提示。 出现这些问题的原因是提示/回显逻辑的粒度是语法中的top_level语句,但是行读取逻辑在词法分析器中很深。 重构评估循环以处理REPL提示和回显的最佳方法是什么? 那是: 如何每行显示一个提示 如何在正确的时间显示延续提示 如何判断完整表达式何时是一行中的最后一个表达式 (我宁愿不改变扫描仪语言来传递换行标记,因为这会严重改变语法。修改YY_INPUT并在Bison语法中添加一些操作YY_INPUT了。另外,我使用的是Flex 2.5.35版本与Xcode一起发布的Bison 2.3。)