prepare php5 parser files
This commit is contained in:
		
							parent
							
								
									1a045403db
								
							
						
					
					
						commit
						e1993b7b5c
					
				
							
								
								
									
										7
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								Makefile
									
									
									
									
									
								
							| @ -1,6 +1,6 @@ | |||||||
| PHPFILE=example.php | PHPFILE=example.php | ||||||
| 
 | 
 | ||||||
| all: ./php7parser/parser.go ./scanner/scanner.go | all: ./php5/php5.go ./php7/php7.go ./scanner/scanner.go | ||||||
| 	rm -f y.output | 	rm -f y.output | ||||||
| 	gofmt -l -s -w *.go | 	gofmt -l -s -w *.go | ||||||
| 	go build | 	go build | ||||||
| @ -14,5 +14,8 @@ test: all | |||||||
| ./scanner/scanner.go: ./scanner/scanner.l | ./scanner/scanner.go: ./scanner/scanner.l | ||||||
| 	golex -o $@ $< | 	golex -o $@ $< | ||||||
| 
 | 
 | ||||||
| ./php7parser/parser.go: ./php7parser/parser.y | ./php5/php5.go: ./php5/php5.y | ||||||
|  | 	goyacc -o $@ $< | ||||||
|  | 
 | ||||||
|  | ./php7/php7.go: ./php7/php7.y | ||||||
| 	goyacc -o $@ $< | 	goyacc -o $@ $< | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								main.go
									
									
									
									
									
								
							| @ -8,7 +8,7 @@ import ( | |||||||
| 	"path/filepath" | 	"path/filepath" | ||||||
| 
 | 
 | ||||||
| 	"github.com/yookoala/realpath" | 	"github.com/yookoala/realpath" | ||||||
| 	php7parser "github.com/z7zmey/php-parser/php7parser" | 	"github.com/z7zmey/php-parser/php5" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func main() { | func main() { | ||||||
| @ -23,7 +23,7 @@ func main() { | |||||||
| 				fmt.Printf("==> %s\n", path) | 				fmt.Printf("==> %s\n", path) | ||||||
| 
 | 
 | ||||||
| 				src, _ := os.Open(string(path)) | 				src, _ := os.Open(string(path)) | ||||||
| 				nodes, comments, positions := php7parser.Parse(src, path) | 				nodes, comments, positions := php5.Parse(src, path) | ||||||
| 
 | 
 | ||||||
| 				visitor := Dumper{ | 				visitor := Dumper{ | ||||||
| 					Indent:    "  | ", | 					Indent:    "  | ", | ||||||
|  | |||||||
							
								
								
									
										41
									
								
								php5/lexer.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								php5/lexer.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | |||||||
|  | package php5 | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"bufio" | ||||||
|  | 	goToken "go/token" | ||||||
|  | 	"io" | ||||||
|  | 
 | ||||||
|  | 	"github.com/cznic/golex/lex" | ||||||
|  | 
 | ||||||
|  | 	"github.com/z7zmey/php-parser/scanner" | ||||||
|  | 	"github.com/z7zmey/php-parser/token" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type lexer struct { | ||||||
|  |     scanner.Lexer | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (l *lexer) Lex(lval *yySymType) int { | ||||||
|  |     return l.Lexer.Lex(lval) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (lval *yySymType) Token(t token.Token) { | ||||||
|  |     lval.token = t | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func newLexer(src io.Reader, fName string) *lexer { | ||||||
|  | 	file := goToken.NewFileSet().AddFile(fName, -1, 1<<31-1) | ||||||
|  | 	lx, err := lex.New(file, bufio.NewReader(src), lex.RuneClass(scanner.Rune2Class)) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return &lexer{ | ||||||
|  | 		scanner.Lexer{ | ||||||
|  | 			Lexer:         lx, | ||||||
|  | 			StateStack:    []int{0}, | ||||||
|  | 			PhpDocComment: "", | ||||||
|  | 			Comments:      nil, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										52
									
								
								php5/parser.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								php5/parser.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | |||||||
|  | package php5 | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"io" | ||||||
|  | 
 | ||||||
|  | 	"github.com/z7zmey/php-parser/comment" | ||||||
|  | 	"github.com/z7zmey/php-parser/node" | ||||||
|  | 	"github.com/z7zmey/php-parser/node/stmt" | ||||||
|  | 	"github.com/z7zmey/php-parser/position" | ||||||
|  | 	"github.com/z7zmey/php-parser/token" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | var rootnode node.Node | ||||||
|  | var comments comment.Comments | ||||||
|  | var positions position.Positions | ||||||
|  | var positionBuilder position.Builder | ||||||
|  | 
 | ||||||
|  | func Parse(src io.Reader, fName string) (node.Node, comment.Comments, position.Positions) { | ||||||
|  |     yyDebug        = 0 | ||||||
|  |     yyErrorVerbose = true | ||||||
|  |     rootnode = stmt.NewStmtList([]node.Node{}) //reset | ||||||
|  |     comments = comment.Comments{} | ||||||
|  |     positions = position.Positions{} | ||||||
|  |     positionBuilder = position.Builder{&positions} | ||||||
|  |     yyParse(newLexer(src, fName)) | ||||||
|  |     return rootnode, comments, positions | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func ListGetFirstNodeComments(list []node.Node) []comment.Comment { | ||||||
|  | 	if len(list) == 0 { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	node := list[0] | ||||||
|  | 
 | ||||||
|  | 	return comments[node] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type foreachVariable struct { | ||||||
|  |     node  node.Node | ||||||
|  |     byRef bool | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type nodesWithEndToken struct { | ||||||
|  |     nodes []node.Node | ||||||
|  |     endToken token.Token | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type boolWithToken struct { | ||||||
|  |     value bool | ||||||
|  |     token *token.Token | ||||||
|  | } | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,14 +1,9 @@ | |||||||
| %{ | %{ | ||||||
| package php7parser | package php5 | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|     "io" |  | ||||||
|     "strings" |     "strings" | ||||||
|     "strconv" |     "strconv" | ||||||
|     "bufio" |  | ||||||
|     goToken "go/token" |  | ||||||
|      |  | ||||||
|     "github.com/cznic/golex/lex" |  | ||||||
| 
 | 
 | ||||||
|     "github.com/z7zmey/php-parser/token" |     "github.com/z7zmey/php-parser/token" | ||||||
|     "github.com/z7zmey/php-parser/node" |     "github.com/z7zmey/php-parser/node" | ||||||
| @ -19,73 +14,8 @@ import ( | |||||||
|     "github.com/z7zmey/php-parser/node/expr/assign_op" |     "github.com/z7zmey/php-parser/node/expr/assign_op" | ||||||
|     "github.com/z7zmey/php-parser/node/expr/binary_op" |     "github.com/z7zmey/php-parser/node/expr/binary_op" | ||||||
|     "github.com/z7zmey/php-parser/node/expr/cast" |     "github.com/z7zmey/php-parser/node/expr/cast" | ||||||
|     "github.com/z7zmey/php-parser/comment" |  | ||||||
|     "github.com/z7zmey/php-parser/position" |  | ||||||
|     "github.com/z7zmey/php-parser/scanner" |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var rootnode node.Node |  | ||||||
| var comments comment.Comments |  | ||||||
| var positions position.Positions |  | ||||||
| var positionBuilder position.Builder |  | ||||||
| 
 |  | ||||||
| type lexer struct { |  | ||||||
|     scanner.Lexer |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (l *lexer) Lex(lval *yySymType) int { |  | ||||||
|     return l.Lexer.Lex(lval) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (lval *yySymType) Token(t token.Token) { |  | ||||||
|     lval.token = t |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func newLexer(src io.Reader, fName string) *lexer { |  | ||||||
| 	file := goToken.NewFileSet().AddFile(fName, -1, 1<<31-1) |  | ||||||
| 	lx, err := lex.New(file, bufio.NewReader(src), lex.RuneClass(scanner.Rune2Class)) |  | ||||||
| 	if err != nil { |  | ||||||
| 		panic(err) |  | ||||||
| 	} |  | ||||||
| 	return &lexer{scanner.Lexer{lx, []int{0}, "", nil}} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func Parse(src io.Reader, fName string) (node.Node, comment.Comments, position.Positions) { |  | ||||||
|     yyDebug        = 0 |  | ||||||
|     yyErrorVerbose = true |  | ||||||
|     rootnode = stmt.NewStmtList([]node.Node{}) //reset |  | ||||||
|     comments = comment.Comments{} |  | ||||||
|     positions = position.Positions{} |  | ||||||
|     positionBuilder = position.Builder{&positions} |  | ||||||
|     yyParse(newLexer(src, fName)) |  | ||||||
|     return rootnode, comments, positions |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func ListGetFirstNodeComments(list []node.Node) []comment.Comment { |  | ||||||
| 	if len(list) == 0 { |  | ||||||
| 		return nil |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	node := list[0] |  | ||||||
| 
 |  | ||||||
| 	return comments[node] |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type foreachVariable struct { |  | ||||||
|     node  node.Node |  | ||||||
|     byRef bool |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type nodesWithEndToken struct { |  | ||||||
|     nodes []node.Node |  | ||||||
|     endToken token.Token |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type boolWithToken struct { |  | ||||||
|     value bool |  | ||||||
|     token *token.Token |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| %} | %} | ||||||
| 
 | 
 | ||||||
| %union{ | %union{ | ||||||
							
								
								
									
										41
									
								
								php7/lexer.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								php7/lexer.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | |||||||
|  | package php7 | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"bufio" | ||||||
|  | 	goToken "go/token" | ||||||
|  | 	"io" | ||||||
|  | 
 | ||||||
|  | 	"github.com/cznic/golex/lex" | ||||||
|  | 
 | ||||||
|  | 	"github.com/z7zmey/php-parser/scanner" | ||||||
|  | 	"github.com/z7zmey/php-parser/token" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type lexer struct { | ||||||
|  |     scanner.Lexer | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (l *lexer) Lex(lval *yySymType) int { | ||||||
|  |     return l.Lexer.Lex(lval) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (lval *yySymType) Token(t token.Token) { | ||||||
|  |     lval.token = t | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func newLexer(src io.Reader, fName string) *lexer { | ||||||
|  | 	file := goToken.NewFileSet().AddFile(fName, -1, 1<<31-1) | ||||||
|  | 	lx, err := lex.New(file, bufio.NewReader(src), lex.RuneClass(scanner.Rune2Class)) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return &lexer{ | ||||||
|  | 		scanner.Lexer{ | ||||||
|  | 			Lexer:         lx, | ||||||
|  | 			StateStack:    []int{0}, | ||||||
|  | 			PhpDocComment: "", | ||||||
|  | 			Comments:      nil, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										52
									
								
								php7/parser.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								php7/parser.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | |||||||
|  | package php7 | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"io" | ||||||
|  | 
 | ||||||
|  | 	"github.com/z7zmey/php-parser/comment" | ||||||
|  | 	"github.com/z7zmey/php-parser/node" | ||||||
|  | 	"github.com/z7zmey/php-parser/node/stmt" | ||||||
|  | 	"github.com/z7zmey/php-parser/position" | ||||||
|  | 	"github.com/z7zmey/php-parser/token" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | var rootnode node.Node | ||||||
|  | var comments comment.Comments | ||||||
|  | var positions position.Positions | ||||||
|  | var positionBuilder position.Builder | ||||||
|  | 
 | ||||||
|  | func Parse(src io.Reader, fName string) (node.Node, comment.Comments, position.Positions) { | ||||||
|  |     yyDebug        = 0 | ||||||
|  |     yyErrorVerbose = true | ||||||
|  |     rootnode = stmt.NewStmtList([]node.Node{}) //reset | ||||||
|  |     comments = comment.Comments{} | ||||||
|  |     positions = position.Positions{} | ||||||
|  |     positionBuilder = position.Builder{&positions} | ||||||
|  |     yyParse(newLexer(src, fName)) | ||||||
|  |     return rootnode, comments, positions | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func ListGetFirstNodeComments(list []node.Node) []comment.Comment { | ||||||
|  | 	if len(list) == 0 { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	node := list[0] | ||||||
|  | 
 | ||||||
|  | 	return comments[node] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type foreachVariable struct { | ||||||
|  |     node  node.Node | ||||||
|  |     byRef bool | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type nodesWithEndToken struct { | ||||||
|  |     nodes []node.Node | ||||||
|  |     endToken token.Token | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type boolWithToken struct { | ||||||
|  |     value bool | ||||||
|  |     token *token.Token | ||||||
|  | } | ||||||
							
								
								
									
										5763
									
								
								php7/php7.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5763
									
								
								php7/php7.go
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2585
									
								
								php7/php7.y
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2585
									
								
								php7/php7.y
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user