Ruby代码的分词与解析:深入探究
1. Ruby分词代码解析
如果你熟悉C语言,并且想深入了解Ruby如何对代码文件进行分词,可以查看Ruby版本中的 parse.y 文件。 .y 扩展名表明 parse.y 是一个语法规则文件,包含了Ruby解析引擎的一系列规则。这个文件非常庞大复杂,代码行数超过10000行。
现在先忽略语法规则,在文件大约三分之二处(约第6500行)搜索名为 parser_yylex 的C函数。这个复杂的C函数包含了实际对代码进行分词的代码。仔细观察,会看到一个很大的 switch 语句,起始代码如下:
u retry:
v last_state = lex_state;
w switch (c = nextc()) {
nextc() 函数返回代码文件文本流中的下一个字符,可以将其想象成之前图表中的箭头。 lex_state 变量记录了Ruby当前正在处理的代码状态或类型。
这个大的 switch 语句会检查代码文件中的每个字符,并根据字符的不同采取不同的操作。例如,下面的代码用于查找空白字符,并通过跳转到 switch 语句上方的 retry 标签来忽略它们:
/* white
超级会员免费看
订阅专栏 解锁全文
72

被折叠的 条评论
为什么被折叠?



