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

| 假设我正在对ruby方法定义进行词法分析:
def print_greeting(greeting = \"hi\")  
end
lexer的工作是维护状态并发出相关令牌,还是应该比较愚蠢?请注意,在上面的示例中,“ 1”参数的默认值为“ 2”。在不同的上下文中,“ 3”是变量分配,它将“ 1”设置为“ 2”。词法分析器应该发出诸如ѭ6之类的通用令牌,还是应该具有上下文意识并发出诸如ѭ7之类的东西?     
已邀请:
        我倾向于使词法分析器尽可能地愚蠢,从而使它发出
IDENTIFIER EQUALS STRING
标记。在词法分析时,(大多数情况下..)没有关于标记应代表什么的信息。在词法分析器中拥有这样的语法规则只会用(非常)复杂的语法规则对其进行污染。这就是解析器的一部分。     
        我认为词法分析器应为\“哑\”,并且在您的情况下应返回以下内容:DEF IDENTIFIER OPEN_PARENTHESIS IDENTIFIER ESTRES STRING CLOSE_PARENTHESIS END。 解析器应该进行验证-为什么要分担责任。     
        不使用ruby,但使用编译器和编程语言设计。 两种方法都可以使用,但是在现实生活中,使用变量,参数和保留字的通用标识符更容易(“哑文法器”或“哑文法器”)。 以后,您可以将那些通用标识符“投射”到其他令牌中。有时在您的解析器中。 有时,词法分析器/扫描器有一个代码段,而不是解析器,它允许执行多个“语义”操作,包括将通用标识符转换为关键字,变量,类型标识符等。您的词法分析器规则检测到通用标识符令牌,但是将另一个令牌返回到解析器。 另一种类似的常见情况是,当您有一种表达式或语言将\“ + \”和\“-\”用于二进制运算符和一元符号运算符时。     
        词法分析和语法分析之间的区别是任意的。在许多情况下,您根本不需要单独的步骤。就是说,由于性能通常是最重要的问题(否则,解析将大部分是琐碎的任务),那么您需要确定并可能衡量词汇分析期间进行的其他处理是否合理。没有普遍的答案。     

要回复问题请先登录注册