暂停问题和后台编译?

时间:2009-02-25 14:39:00

标签: scripting autocomplete compilation halting-problem

我正在试图弄清楚如何为Lua编写自动完成算法,但由于与许多脚本语言一样,它缺少静态类型系统,我认为我需要后台编译,但在后台编译期间,很容易停止问题所以我想知道是否有人之前已经解决过这种问题,解决编译和停止的标准策略是什么?

2 个答案:

答案 0 :(得分:1)

基于静态文本分析的自动完成听起来比尝试在后台编译更合理。大多数提供自动填充功能的文本编辑器都使用此方法,尽管它不够准确。

为此,您可以解析文档以查找名称并记录它们所属的范围。当点遍历文档时,您的自动完成功能会记录当前所在的范围,并提供此时应该可用的名称。

由于默认情况下LUA是全局作用域,如果程序员没有使用“local”关键字来缩小作用域,则可能最终会得到一个相当污染的命名空间。

答案 1 :(得分:1)

你可以

  • 实际执行代码以查看特定变量表示哪种对象,如果花费的时间太长则在中间执行
  • 如果Lua有类型,
  • 猜测实际变量的类型。这意味着您必须创建一个类型系统,这是一项非常重要的任务(您必须具有足够的限制性以允许对对象模型进行推理,并且足够允许足够的Lua程序实际符合您的模型)。然而,所有闪亮的新javascript引擎都试图这样做,AFAIK,所以你可以在那里寻找指针。
  • 从语法中猜测。例如,emacs完成,只查找相同的前缀,在其他IDE通常失败的情况下就像魅力(C ++模板)