package php7 import ( "git.maride.cc/maride/php-parser/internal/position" "git.maride.cc/maride/php-parser/pkg/ast" "git.maride.cc/maride/php-parser/pkg/conf" "git.maride.cc/maride/php-parser/pkg/errors" "git.maride.cc/maride/php-parser/pkg/token" ) // Parser structure type Parser struct { Lexer *Lexer currentToken *token.Token rootNode ast.Vertex errHandlerFunc func(*errors.Error) builder *position.Builder } // NewParser creates and returns new Parser func NewParser(lexer *Lexer, config conf.Config) *Parser { return &Parser{ Lexer: lexer, errHandlerFunc: config.ErrorHandlerFunc, builder: position.NewBuilder(), } } func (p *Parser) Lex(lval *yySymType) int { t := p.Lexer.Lex() p.currentToken = t lval.token = t return int(t.ID) } func (p *Parser) Error(msg string) { if p.errHandlerFunc == nil { return } p.errHandlerFunc(errors.NewError(msg, p.currentToken.Position)) } // Parse the php7 Parser entrypoint func (p *Parser) Parse() int { p.rootNode = nil return yyParse(p) } // GetRootNode returns root node func (p *Parser) GetRootNode() ast.Vertex { return p.rootNode }