gpt4 book ai didi

c - 在 Lex/Yacc 解析中是否有捕获错误的经验法则?

转载 作者:行者123 更新时间:2023-12-02 00:42:24 25 4
gpt4 key购买 nike

我们应该在解析通用语言时尽早捕获错误(在 Lex 中)还是在更方便的地方为我们提供更多信息(在 Yacc 中)?各种语言如何解决这个问题?

最佳答案

一般来说,错误越复杂,断言错误的代码就越复杂。词法分析器和解析器相当简单(在实践中),因此可以捕获简单的错误。

  1. 词法分析器 捕获本应构成 token
  2. 的无效字符序列
  3. 语法分析工具(例如 Bison/Yacc)捕获构成语法和语句的无效标记序列。

复杂 错误通常发生在运行时的其他地方或编译时的各种翻译中。示例可能包括引用不存在的函数/方法。闭包范围/绑定(bind)、对象和引用标识符、参数有效性、重载以及大量其他语言相关的东西。

在 AST 分析或中间代码生成中,非常狭窄的标记/语法范围之外的任何东西都(或应该处理)在这些工具之外。

考虑:

a.b();
ab();

两者都应该通过面向对象语言的词法分析器/解析器,其中两个语句都是有效的。 有错误吗?

  1. 如果语言是一种相当静态的语言并且标识符可以在编译时解析,您的编译器可能会在编译时断言这一点。

  2. 您可以将这两个语句替换为要在运行时 运行的 ID 解析代码,以产生运行时错误而不是编译器错误。

运行时和编译时解析和语义之间的差异可能很微妙,并且因语言而异。

错误通常会在已知是错误并且您拥有最多信息时被捕获。这因语言和实现而异。

关于c - 在 Lex/Yacc 解析中是否有捕获错误的经验法则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2191875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com