golang's yacc toolを使用してパーサーを作成しようとしています。私はnexを見つけて、パーサに与えるためのレクサーの作成を簡単にしました。私の問題は、生成されたパーサには解析結果にアクセスするためのメソッドやフィールドがないことです。解析結果をグローバル変数に格納するだけでも問題はないようです。現在、私は私のparser.yファイルの先頭に最初の試みとして、以下を追加しましたgolang yacc生成パーサーの結果にアクセス
:
type ResultParser interface {
yyParser // Generated parser interface
Result() s.Expr // s.Expr is an interface for the parsed result
}
func (p *yyParserImpl) Result() s.Expr {
return p.stack[1].expr
}
func NewResultParser() ResultParser {
return &yyParserImpl{}
}
は、パーサーから結果になってのお奨め/より良い方法はありますか?
あなたは、解析結果とはどういう意味ですか? – andlabs
入力を解析すると、私はツリー構造を構築します。これは '$$。expr'に格納されます。私はその木の根を手に入れたい。上記の「Result」関数は正しい結果にアクセスするようですが、ちょっとハッキリです。私は 'p.stack [1]'がルート/解析結果が常に格納される場所であることを100%確信していません... –
yaccの文書化されていないデータ構造にうんざりしないでください。私はそれが "グローバル変数"か "yyLexerインターフェイスの基になる型のフィールド"のどちらかだと思います。私は後者を使用します – andlabs