1

こんにちは、レクサーに関するいくつかの概念を理解しようとしています。文字列内の個々の文字をトークンと呼ばれる形式に分離するために、コンパイラでレクサーが使用されることを理解しています。しかし、私を混乱させるのは、マッチング部分です。文字を対応する位置に一致させる必要がある理由の論理がわかりません。

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 ループの後、コードが何をしようとしているのかよくわかりません。なぜ文字を位置に合わせなければならないのですか?

4

2 に答える 2