【发布时间】:2022-01-02 10:22:37
【问题描述】:
众所周知,Lua 5.3 以这种方式处理交互式 REPL 来区分表达式和语句:
在交互模式下,Lua 反复提示并等待一行。读完一行代码后,Lua 首先尝试将这行代码解释为一个表达式。如果成功,则打印其值。否则,它将该行解释为语句。如果您编写的语句不完整,解释器会通过发出不同的提示等待其完成。
但是,这不是我想要的行为。例如,我有一些代码“f()”要评估,无论发生什么,f 都会出错。它也改变了lua的内部状态。上述方法会导致错误,因为它会改变内部状态两次。
所以,我想知道,有没有办法实现自动消除表达式和语句歧义的 REPL?我是否必须添加一些语法分析才能实现这一点?
【问题讨论】:
-
为什么不管发生什么函数都会抛出错误?那没有意义。你为什么要实现这样的功能?是什么阻止您正确处理这些错误?也许它会帮助分享一些代码以及你如何称呼它以使事情变得清晰
-
f()怎么可能两次改变内部状态?当前的 REPL 如何不消除表达式和语句的歧义? -
你们说得对,我没搞清楚编译和运行的区别。