这是词法分析器的工作吗?

rye*_*guy 4 compiler-construction parsing lexical-analysis tokenize

假设我正在对 ruby​​ 方法定义进行词法分析:

def print_greeting(greeting = "hi")  
end
Run Code Online (Sandbox Code Playgroud)

词法分析器的工作是维护状态并发出相关标记,还是应该相对愚蠢?请注意,在上面的示例中,greeting参数的默认值为"hi"。在不同的上下文中,greeting = "hi"变量赋值设置greeting"hi"。词法分析器应该发出诸如 之类的通用标记IDENTIFIER EQUALS STRING,还是应该具有上下文感知能力并发出诸如 之类的东西PARAM_NAME EQUALS STRING

Jas*_*ers 5

我倾向于让词法分析器尽可能地愚蠢,从而让它发出令牌IDENTIFIER EQUALS STRING。在词法分析时,(大多数时候......)没有关于标记应代表什么的可用信息。在词法分析器中拥有这样的语法规则只会使其受到(非常)复杂的语法规则的污染。这就是解析器的部分。