Lexical analysisについてメモ

プログラミング言語は人間が書いたコードをそのまま理解しているわけではないっぽい。ということはなんとなく理解しているのですが、もっと自分の理解を深めたくて勉強していたところLexical analysisという概念が重要そうだったのでメモします。

Lexical analysis

docs.python.org

  • プログラミング言語は人間が書いたコードをそのまま理解しているわけではない
  • コードはいくつかの段階を経て分解・変換され最終的に実行可能な形になる.
  • 最初に行われる家庭がLexical analysis(字句解析)

  • Pythonの公式ドキュメントには以下のように書かれている

    • A Python program is read by a parser. Input to the parser is a stream of tokens, generated by the lexical analyzer (also known as the tokenizer).
    • Pythonプログラムはparserによって読まれる
    • parserが直接読むのはコードの文字列ではない
    • その前にlexical analyzer(字句解析器/tokenizer)が必要
  • Parserの入力は文字ではなくトークンというのが大事なポイントっぽい

  • Lexical Analysisの役割

    • 文字の列を意味のある最小単位(トークン)に分解すること
    • x = 10のようなPythonコードもLexical analyzerはトークン列に変換する
  • 公式ドキュメントにはThe lexical analyzer determines the program text’s encoding (UTF-8 by default), and decodes the text into source characters.という文もある

    • 字句解析はファイルがUTF-8なのか正しくデコードできるかなどの低レイヤーの処理も担当している
    • ここで失敗するとSyntaxErrorになる
    • 文法以前に文字として読めない場合もSyntaxErrorになる
  • mypyやtyのような静的解析用のツールはトークン化、AST(構文木)生成を前提としているので、Lexical analysisを知っていると理解が深まりそう