import "go/parser"

Goのソースファイル用のパーサーです。様々な形式の入力(各Parse~関数を参照)をサポートしており、Goのソースを表現した抽象構文木(AST)として出力されます。Parse~関数のどれかを呼び出すことで解析が実行されます。

パッケージファイル

interface.go parser.go

定数

Parse~関数のmodeパラメータには、フラグの組み合わせ(または0)を渡します。これらは、ソースコードの解析箇所の指定や、その他のパーサーのオプション機能を制御します。

const (
    PackageClauseOnly uint = 1 << iota // パッケージ文のあとで解析を終える
    ImportsOnly                        // インポート宣言のあとで解析を終える
    ParseComments                      // コメントを解析し、ASTに追加する
    Trace                              // 解析結果のトレースを出力する
)

ParseDeclList関数

func ParseDeclList(fset *token.FileSet, filename string, src interface{}) ([]ast.Decl, os.Error)

ParseDeclListは、Goの宣言リストを解析し、それに対応するASTノードのリストを返します。引数fset、filename、srcについては、ParseFileと同じなので、そちらの説明を参照ください。エラーが起きたときは、返されるノードリストはnil、もしくはASTの一部分だけが格納されています。

ParseDir関数

func ParseDir(fset *token.FileSet, path string, filter func(*os.FileInfo) bool, mode uint) (map[string]*ast.Package, os.Error)

ParseDirは、pathで指定したディレクトリ内のファイル毎にParseFileを呼び出し、そのなかのすべてのパッケージを含むマップ(パッケージ名->パッケージのAST)を返します。filterがnilでないときは、os.FileInfoエントリをパラメータとして受け取るフィルタ関数を通過したファイルだけが処理されます。modeビットはそのままParseFileに渡されます。位置情報は、ファイルセットfset内に記録されます。

ディレクトリが読めなかったときは、nilマップと、エラーが返されます。解析エラーが発生したときは、エラーとともに返されるマップはnilではありませんが、正しい値ではありません。

ParseExpr関数

func ParseExpr(fset *token.FileSet, filename string, src interface{}) (ast.Expr, os.Error)

ParseExprは、Goの式を解析し、それに対応するASTノードを返します。引数fset、filename、srcについては、ParseFileと同じなので、そちらの説明を参照ください。エラーが起きたときは、返される式はnil、もしくはASTの一部分だけが格納されています。

ParseFile関数

func ParseFile(fset *token.FileSet, filename string, src interface{}, mode uint) (*ast.File, os.Error)

ParseFileは、Goの一ソースファイル内のソースコードを解析し、それに対応するast.Fileノードを返します。ソースコードは、ソースファイルのファイル名、またはsrcパラメータで渡します。

src != nilのときは、ParseFileはsrcからソースを解析し、このときfilenameは位置情報を記録するためだけに使用されます。srcパラメータの引数の型は、string、[]byte、io.Readerのいずれかでなければなりません。

src == nilのときは、filenameで指定したファイルを解析します。

modeパラメータは、ソースコードの解析箇所の指定や、その他のパーサーのオプション機能を制御します。位置情報は、ファイルセットfset内に記録されます。

ソースが読み込めなかったときは、nilと、エラーとなった理由が返されます。ソースは読み込めても、構文エラーを見つけたときは、ASTの一部(エラー箇所のソースコードを示すast.BadXノード)が返されます。複数のエラーが起きたときは、ファイルの位置順にソートされたscanner.ErrorListが返されます。

ParseFiles関数

func ParseFiles(fset *token.FileSet, filenames []string, mode uint) (pkgs map[string]*ast.Package, first os.Error)

ParseFilesは、filenamesリストの各ファイル毎にParseFileを呼び出し、そのなかのすべてのパッケージを含むマップ(パッケージ名->パッケージのAST)を返します。modeビットはそのままParseFileに渡されます。位置情報は、ファイルセットfset内に記録されます。

解析エラーが起きたファイルは無視されます。そのときのパッケージマップは、不完全(パッケージが欠落、もしくは不完全)である可能性があります。また、そのときに返されるエラーは一番最初に発生したエラーです。

ParseStmtList関数

func ParseStmtList(fset *token.FileSet, filename string, src interface{}) ([]ast.Stmt, os.Error)

ParseStmtListは、Goのステートメントリストを解析し、それに対応するASTノードのリストを返します。引数fset、filename、srcについては、ParseFileと同じなので、そちらの説明を参照ください。エラーが起きたときは、返されるノードリストはnil、もしくはASTの一部分だけが格納されています。