cmd: add php5 flag

This commit is contained in:
z7zmey 2018-02-06 12:39:42 +02:00
parent ce9d676229
commit f546db54b6
5 changed files with 43 additions and 26 deletions

View File

@ -1,16 +1,20 @@
PHPFILE=example.php PHPFILE=example.php
all: ./php5/php5.go ./php7/php7.go ./scanner/scanner.go all: compile run
rm -f y.output
gofmt -l -s -w *.go build:
gofmt -l -s -w **/*.go
go build go build
run: all run: build
./php-parser $(PHPFILE) ./php-parser $(PHPFILE)
test: all test: all
go test ./... --cover go test ./... --cover
compile: ./php5/php5.go ./php7/php7.go ./scanner/scanner.go
rm -f y.output
./scanner/scanner.go: ./scanner/scanner.l ./scanner/scanner.go: ./scanner/scanner.l
golex -o $@ $< golex -o $@ $<

15
main.go
View File

@ -8,11 +8,20 @@ import (
"path/filepath" "path/filepath"
"github.com/yookoala/realpath" "github.com/yookoala/realpath"
"github.com/z7zmey/php-parser/comment"
"github.com/z7zmey/php-parser/node"
"github.com/z7zmey/php-parser/php5" "github.com/z7zmey/php-parser/php5"
"github.com/z7zmey/php-parser/php7"
"github.com/z7zmey/php-parser/position"
"github.com/z7zmey/php-parser/visitor" "github.com/z7zmey/php-parser/visitor"
) )
func main() { func main() {
var nodes node.Node
var comments comment.Comments
var positions position.Positions
usePhp5 := flag.Bool("php5", false, "use PHP5 parser")
flag.Parse() flag.Parse()
for _, path := range flag.Args() { for _, path := range flag.Args() {
@ -24,7 +33,11 @@ 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 := php5.Parse(src, path) if *usePhp5 {
nodes, comments, positions = php5.Parse(src, path)
} else {
nodes, comments, positions = php7.Parse(src, path)
}
visitor := visitor.Dumper{ visitor := visitor.Dumper{
Indent: " | ", Indent: " | ",

View File

@ -12,15 +12,15 @@ import (
) )
type lexer struct { type lexer struct {
scanner.Lexer scanner.Lexer
} }
func (l *lexer) Lex(lval *yySymType) int { func (l *lexer) Lex(lval *yySymType) int {
return l.Lexer.Lex(lval) return l.Lexer.Lex(lval)
} }
func (lval *yySymType) Token(t token.Token) { func (lval *yySymType) Token(t token.Token) {
lval.token = t lval.token = t
} }
func newLexer(src io.Reader, fName string) *lexer { func newLexer(src io.Reader, fName string) *lexer {

View File

@ -12,15 +12,15 @@ import (
) )
type lexer struct { type lexer struct {
scanner.Lexer scanner.Lexer
} }
func (l *lexer) Lex(lval *yySymType) int { func (l *lexer) Lex(lval *yySymType) int {
return l.Lexer.Lex(lval) return l.Lexer.Lex(lval)
} }
func (lval *yySymType) Token(t token.Token) { func (lval *yySymType) Token(t token.Token) {
lval.token = t lval.token = t
} }
func newLexer(src io.Reader, fName string) *lexer { func newLexer(src io.Reader, fName string) *lexer {

View File

@ -16,14 +16,14 @@ var positions position.Positions
var positionBuilder position.Builder var positionBuilder position.Builder
func Parse(src io.Reader, fName string) (node.Node, comment.Comments, position.Positions) { func Parse(src io.Reader, fName string) (node.Node, comment.Comments, position.Positions) {
yyDebug = 0 yyDebug = 0
yyErrorVerbose = true yyErrorVerbose = true
rootnode = stmt.NewStmtList([]node.Node{}) //reset rootnode = stmt.NewStmtList([]node.Node{}) //reset
comments = comment.Comments{} comments = comment.Comments{}
positions = position.Positions{} positions = position.Positions{}
positionBuilder = position.Builder{&positions} positionBuilder = position.Builder{&positions}
yyParse(newLexer(src, fName)) yyParse(newLexer(src, fName))
return rootnode, comments, positions return rootnode, comments, positions
} }
func ListGetFirstNodeComments(list []node.Node) []comment.Comment { func ListGetFirstNodeComments(list []node.Node) []comment.Comment {
@ -37,16 +37,16 @@ func ListGetFirstNodeComments(list []node.Node) []comment.Comment {
} }
type foreachVariable struct { type foreachVariable struct {
node node.Node node node.Node
byRef bool byRef bool
} }
type nodesWithEndToken struct { type nodesWithEndToken struct {
nodes []node.Node nodes []node.Node
endToken token.Token endToken token.Token
} }
type boolWithToken struct { type boolWithToken struct {
value bool value bool
token *token.Token token *token.Token
} }