嘿伙计们,我正在尝试了解有关词法分析器的一些概念。我知道词法分析器在编译器中用于将字符串中的单个字符分隔成称为标记的形式。但让我感到困惑的是匹配部分。我不明白为什么我们需要将字符匹配到相应位置的逻辑。
import sys
import re
def lex(characters, token_exprs):
pos = 0
tokens = []
while pos < len(characters):
match = None
for token_expr in token_exprs:
pattern, tag = token_expr
regex = re.compile(pattern)
match = regex.match(characters, pos)
if match:
text = match.group(0)
if tag:
token = (text, tag)
tokens.append(token)
break
if not match:
sys.stderr.write('Illegal character: %s\n' % characters[pos])
sys.exit(1)
else:
pos = match.end(0)
return tokens
这是我不完全理解的代码。在for循环之后,我不太明白代码要做什么。为什么我们必须将字符与位置匹配?