首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是lexer的工作吗?

这是lexer的工作吗?
EN

Stack Overflow用户
提问于 2011-06-15 22:34:47
回答 4查看 464关注 0票数 3

假设我正在词法分析一个ruby方法定义:

代码语言:javascript
复制
def print_greeting(greeting = "hi")  
end

lexer的工作是维护状态并发出相关的令牌,还是应该相对愚蠢一些?请注意,在上面的示例中,greeting参数的默认值为"hi"。在不同的上下文中,greeting = "hi"是将greeting设置为"hi"的变量赋值。lexer应该发出诸如IDENTIFIER EQUALS STRING之类的泛型标记,还是应该是上下文感知的,并发出类似于PARAM_NAME EQUALS STRING的东西

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-15 22:40:41

我倾向于尽可能地让lexer变得愚蠢,并因此让它发出IDENTIFIER EQUALS STRING标记。在词法分析时,有(大多数时间..)没有关于令牌应该表示什么的信息。在词法分析器中有这样的语法规则只会用(非常)复杂的语法规则来轮询它。这就是解析器的一部分。

票数 4
EN

Stack Overflow用户

发布于 2011-06-15 22:43:15

我认为lexer应该是“哑巴”的,在你的例子中应该返回类似这样的东西: DEF IDENTIFIER OPEN_PARENTHESIS IDENTIFIER等于STRING CLOSE_PARENTHESIS END。解析器应该做验证--为什么要拆分责任。

票数 2
EN

Stack Overflow用户

发布于 2011-06-15 23:27:09

不要使用ruby,但要使用编译器和编程语言设计。

这两种方法都有效,但在现实生活中,使用变量、参数和保留字的通用标识符更容易("dumb lexer“或"dumb scanner")。

稍后,您可以将这些通用标识符“转换”到其他令牌中。有时在你的解析器中。

有时,词法分析器/扫描器有一个代码段,而不是解析器,它允许执行几个“语义”操作,包括将通用标识符转换为关键字、变量、类型标识符等等。您的词法分析器规则检测到一个通用标识符令牌,但向解析器返回另一个令牌。

另一种类似的常见情况是,当您的表达式或语言使用"+“和"-”表示二元运算符和一元符号运算符时。

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

https://stackoverflow.com/questions/6359427

复制
相关文章

相似问题

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