当我对代码进行标记时,如何确定模糊终结符的含义?

时间:2015-11-22 07:14:10

标签: parsing compilation lexer

在python中,单词in表示表达式1 in [1,2,3]中的运算符。但是,在声明for i in range(10)中,它表示'的关键字'声明。我写了一个基于正则表达式的词法分析器。我使用规则(\+|-|\*|/|is|in)来匹配运算符,并使用(for|in|if|elif|else)来匹配关键字。我不知道是否应该将in放在运算符或关键字的规则中。他们俩都会失去一个意义。似乎我应该在解析中解决这个问题。但我需要在标记化中给in一个标签。我该怎么办?

1 个答案:

答案 0 :(得分:1)

称之为“token_in”:)通常最好不要在词法分类器中进行分类;解析器负责分析令牌的语法目的。

在任何情况下,我都没有看到词法分析器为不同的关键词生成单一的令牌类型。 ifelse在语法上是不同的令牌,解析器想要知道它正在看if;它带有“关键字”的事实对它来说并不是特别有用。