假设我正在对 ruby 方法定义进行词法分析:
def print_greeting(greeting = "hi")
end
词法分析器的工作是维护状态并发出相关标记,还是应该相对愚蠢?注意在上面的例子中
greeting
参数的默认值是 "hi"
。在不同的上下文中, greeting = "hi"
是将 greeting
设置为 "hi"
的变量赋值。词法分析器应该发出诸如 IDENTIFIER EQUALS STRING
之类的通用标记,还是应该感知上下文并发出诸如 PARAM_NAME EQUALS STRING
之类的东西? 最佳答案
我倾向于尽可能让词法分析器变得愚蠢,从而让它发出 IDENTIFIER EQUALS STRING
标记。在词法分析时,(大部分时间..)没有关于标记应该代表什么的可用信息。在词法分析器中拥有这样的语法规则只会用(非常)复杂的语法规则污染它。这就是解析器的一部分。
关于parsing - 这是词法分析器的工作吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6359427/