45 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package parser
 | |
| 
 | |
| import (
 | |
| 	"errors"
 | |
| 
 | |
| 	"github.com/laytan/php-parser/internal/php7"
 | |
| 	"github.com/laytan/php-parser/internal/php8"
 | |
| 	"github.com/laytan/php-parser/pkg/ast"
 | |
| 	"github.com/laytan/php-parser/pkg/conf"
 | |
| 	"github.com/laytan/php-parser/pkg/version"
 | |
| )
 | |
| 
 | |
| // ErrVersionOutOfRange is returned if the version is not supported
 | |
| var ErrVersionOutOfRange = errors.New("the version is out of supported range")
 | |
| 
 | |
| // Parser interface
 | |
| type Parser interface {
 | |
| 	Parse() int
 | |
| 	GetRootNode() ast.Vertex
 | |
| }
 | |
| 
 | |
| func Parse(src []byte, config conf.Config) (ast.Vertex, error) {
 | |
| 	var parser Parser
 | |
| 
 | |
| 	if config.Version == nil {
 | |
| 		config.Version = &version.Version{Major: 7, Minor: 4}
 | |
| 	}
 | |
| 
 | |
| 	if config.Version.InPhp7Range() {
 | |
| 		lexer := php7.NewLexer(src, config)
 | |
| 		parser = php7.NewParser(lexer, config)
 | |
| 		parser.Parse()
 | |
| 		return parser.GetRootNode(), nil
 | |
| 	}
 | |
| 
 | |
| 	if config.Version.InPhp8Range() {
 | |
| 		lexer := php8.NewLexer(src, config)
 | |
| 		parser = php8.NewParser(lexer, config)
 | |
| 		parser.Parse()
 | |
| 		return parser.GetRootNode(), nil
 | |
| 	}
 | |
| 
 | |
| 	return nil, ErrVersionOutOfRange
 | |
| }
 |