首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >语法错误的分析代码

语法错误的分析代码
EN

Stack Overflow用户
提问于 2011-01-24 13:07:39
回答 2查看 416关注 0票数 12

分析技术在CS文献中有很好的描述。但是我所知道的算法要求源在语法上是正确的。如果遇到语法错误,解析将立即中止。

但是IDE(如Visual )通常能够在输入时提供有意义的代码完成和其他提示,这意味着语法通常不处于有效状态。例如,在函数调用中键入一个括号,IDE为函数提供参数提示,即使语法在输入结束括号之前是无效的。

在我看来,这必须依赖某种猜测或容错解析器。有人知道这方面使用了什么技术或算法吗?

EN

回答 2

Stack Overflow用户

发布于 2011-01-24 13:40:47

标准的技巧是使用解析机制进行某种错误修复,以帮助进行预测。

对于基于表的解析器(如LALR或GLR),当语法错误发生时,解析器最近处于错误尚未发生的状态。您可以在每次移位之前记录解析堆栈以记住这一点(或者在错误之前记录缩减)。如果遇到错误,则可以检查保存的堆栈的解析状态,以确定哪些标记可能是下一个标记(这也是如何根据语法标记完成代码)。更复杂的技术可以发明最小的允许错误令牌移位的令牌序列,或者最小的可能树,它可以替换错误令牌并允许下一个令牌的移位。

对于递归下降解析器来说,这并不容易,因为周围没有太多的信息可用来进行预测。对于错误恢复,一个繁琐的技巧是定义错误恢复点(例如,"stmt“可能被接受)并继续扫描直到找到";”并接受和“错误stmt”。如果您想要完成代码,这是没有帮助的。

票数 2
EN

Stack Overflow用户

发布于 2011-01-24 13:38:06

Packrat很有前途-它提供了成功和失败的关键点解析尝试的信息,这些信息可以被恢复并用于智能错误报告、完成、提示等。例如,如果游标在缓存中将所有解析尝试标记为失败,则可以为完成选项提供尝试标记的列表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4782315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档