1字句解析Goで作るインタプリンタを読みました。忘れないうちに内容を整理しておきます。字句解析ソースコード(文字列)を構文規則に従って、意味のある集合(トークン)へ変換することです。言語処理を行う最初のステップに当たります。10;例えば上記のようなソースコードがあったとすると、以下のように細かく分解できます。10;このように分解された、キーワードletやhoge、10といった数値は、これ以上細かく意味を持ちません。そのような、これ以上細かく分解できないかたまりをトークンといいます。字句解析器(レキサー)ソースコードを入力で受け取り、出力として対応するトークン列を返します。字句解析器では、単純にソースコードを細かく分解するだけではなく、トークンの種類である「タイプ」を付与し、トークンを分類します。5や10、15といった数値はトークンタイプを区別する必要がないので同じINTに、同様にhogeやadd、foobarといった変数名に関しても、タイプを区別する必要がないので、変数を表すIDENTをトークンタイプとして使用します。タイプに分解されます。以上を踏まえて、実装部分をざっくりと見てきます。大まかな流れを掴むのが目的なので、ソースコードは一部抜粋です。トークンのデータ構造は構造体を用いて表します。構造体は、トークンのタイプとリテラルをフィールドとして持ちます。string}続いて、字句解析器の実装です。ヘルパーメソッド等を含めて複数のメソッドを作成しましたが、重要なのは、レキサーのデータ構造と、NextToken()メソッドです。tok}レキサーのデータ構造は、以下の4つから成りたっています。input:ソースコードの文字列position:ソースで現在読んでいる位置readPosition:次に読む位置ch:現在読んているbyteまた、レキサーのNextToken()メソッドを呼び出すことで、現在読んでいるbyteに対してトークンタイプを振り分ける処理を行い、読んでいる位置を進めた上で、対応するTokenを返します。hogeといった複数の文字列からなるトークンに対応するために、ヘルパーメソッドを作成して、NexToken()メソッド内で、レキサーを読み進めながら細かくトークンタイプを振り分けられるように拡張します。実装の細かい部分は、GitHubを参照ください。入力ソースコードを入力。対応するトークン列を出力。Literal:}}まとめインタプリタが最初に行う処理、字句解析についてまとめました。字句解析の役割としては、入力されたソースコードを最小の単位であるトークンに分解し、トークンタイプを付与することで、分類を行った上で、トークン列として出力を返すことでした。字句解析を実装する第1章は、割と理解しやすかったです。次章の構文解析器からは、レベルが上がりそうなので、引き続き頑張って読み進めようと思います。最後に、「Goでつくるインタプリンタ」で扱われるトークンタイプを一覧にまとめておきます。少ないトークンの種類で、プログラミング言語を構築できることが見て取れます。