プログラミング言語は人間が書いたコードをそのまま理解しているわけではないっぽい。ということはなんとなく理解しているのですが、もっと自分の理解を深めたくて勉強していたところLexical analysisという概念が重要そうだったのでメモします。
Lexical analysis
- プログラミング言語は人間が書いたコードをそのまま理解しているわけではない
- コードはいくつかの段階を経て分解・変換され最終的に実行可能な形になる.
最初に行われる家庭がLexical analysis(字句解析)
Pythonの公式ドキュメントには以下のように書かれている
Parserの入力は文字ではなくトークンというのが大事なポイントっぽい
Lexical Analysisの役割
公式ドキュメントには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を知っていると理解が深まりそう