首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MRI Ruby 1.9.2中的词法分析

MRI Ruby 1.9.2中的词法分析
EN

Stack Overflow用户
提问于 2010-10-26 00:22:19
回答 1查看 459关注 0票数 3

目前我正在学习一些编译器理论和实践。Ruby是我日常使用的语言,所以我去看看它的词法分析器和语法。ruby有单独的lexer吗?如果是,它是在哪个文件中描述的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-26 02:03:02

在ruby源代码中有一个包含语法的parse.y文件。我相对确定ruby使用一个独立的词法分析器(就像大多数LR解析器一样)。而且看起来词法分析器是有状态的:

代码语言:javascript
复制
enum lex_state_e {
EXPR_BEG,           /* ignore newline, +/- is a sign. */
EXPR_END,           /* newline significant, +/- is an operator. */
EXPR_ENDARG,        /* ditto, and unbound braces. */
EXPR_ARG,           /* newline significant, +/- is an operator. */
EXPR_CMDARG,        /* newline significant, +/- is an operator. */
EXPR_MID,           /* newline significant, +/- is an operator. */
EXPR_FNAME,         /* ignore newline, no reserved words. */
EXPR_DOT,           /* right after `.' or `::', no reserved words. */
EXPR_CLASS,         /* immediate after `class', no here document. */
EXPR_VALUE          /* alike EXPR_BEG but label is disallowed. */
};

我想这是必要的,因为换行符在某些情况下会被忽略,而在其他情况下它会终止表达式等。另外,'class‘并不总是像'x.class’这样的关键字。

但我不是专家。

编辑:更深入地查看parse.y文件,词法分析器并不完全独立于解析器:

代码语言:javascript
复制
superclass  : //[...]
    | '<'
        {
        lex_state = EXPR_BEG;
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4016664

复制
相关文章

相似问题

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