diff --git a/parser.go b/parser.go index 19d46e8..e61d80b 100644 --- a/parser.go +++ b/parser.go @@ -18,13 +18,13 @@ func NewParser() (p *parser) { return p } -func (self *parser) parseFuncCall(scanner *scanner, allowVarRef bool, tk *Token) (tree *term, err error) { +func (parser *parser) parseFuncCall(scanner *scanner, allowVarRef bool, tk *Token) (tree *term, err error) { args := make([]*term, 0, 10) itemExpected := false lastSym := SymUnknown for lastSym != SymClosedRound && lastSym != SymEos { var subTree *ast - if subTree, err = self.parseItem(scanner, allowVarRef, SymComma, SymClosedRound); err != nil { + if subTree, err = parser.parseItem(scanner, allowVarRef, SymComma, SymClosedRound); err != nil { break } prev := scanner.Previous() @@ -48,7 +48,7 @@ func (self *parser) parseFuncCall(scanner *scanner, allowVarRef bool, tk *Token) return } -func (self *parser) parseFuncDef(scanner *scanner) (tree *term, err error) { +func (parser *parser) parseFuncDef(scanner *scanner) (tree *term, err error) { // Example: "add = func(x,y) {x+y} var body *ast args := make([]*term, 0) @@ -65,7 +65,7 @@ func (self *parser) parseFuncDef(scanner *scanner) (tree *term, err error) { if tk.Sym == SymEqual { var paramExpr *ast defaultParamsStarted = true - if paramExpr, err = self.parseItem(scanner, false, SymComma, SymClosedRound); err != nil { + if paramExpr, err = parser.parseItem(scanner, false, SymComma, SymClosedRound); err != nil { break } param.forceChild(paramExpr.root) @@ -88,7 +88,7 @@ func (self *parser) parseFuncDef(scanner *scanner) (tree *term, err error) { if err == nil { tk = scanner.Next() if tk.IsSymbol(SymOpenBrace) { - body, err = self.parseGeneral(scanner, true, true, SymClosedBrace) + body, err = parser.parseGeneral(scanner, true, true, SymClosedBrace) } else { err = tk.ErrorExpectedGot("{") } @@ -104,7 +104,7 @@ func (self *parser) parseFuncDef(scanner *scanner) (tree *term, err error) { return } -func (self *parser) parseList(scanner *scanner, parsingIndeces bool, allowVarRef bool) (subtree *term, err error) { +func (parser *parser) parseList(scanner *scanner, parsingIndeces bool, allowVarRef bool) (subtree *term, err error) { r, c := scanner.lastPos() args := make([]*term, 0) lastSym := SymUnknown @@ -112,7 +112,7 @@ func (self *parser) parseList(scanner *scanner, parsingIndeces bool, allowVarRef for lastSym != SymClosedSquare && lastSym != SymEos { var subTree *ast zeroRequired := scanner.current.Sym == SymColon - if subTree, err = self.parseItem(scanner, allowVarRef, SymComma, SymClosedSquare); err == nil { + if subTree, err = parser.parseItem(scanner, allowVarRef, SymComma, SymClosedSquare); err == nil { root := subTree.root if root != nil { if !parsingIndeces && root.symbol() == SymColon { @@ -153,14 +153,14 @@ func (self *parser) parseList(scanner *scanner, parsingIndeces bool, allowVarRef return } -func (self *parser) parseIterDef(scanner *scanner, allowVarRef bool) (subtree *term, err error) { +func (parser *parser) parseIterDef(scanner *scanner, allowVarRef bool) (subtree *term, err error) { tk := scanner.Previous() args := make([]*term, 0) lastSym := SymUnknown itemExpected := false for lastSym != SymClosedRound && lastSym != SymEos { var subTree *ast - if subTree, err = self.parseItem(scanner, allowVarRef, SymComma, SymClosedRound); err == nil { + if subTree, err = parser.parseItem(scanner, allowVarRef, SymComma, SymClosedRound); err == nil { if subTree.root != nil { args = append(args, subTree.root) } else if itemExpected { @@ -184,7 +184,7 @@ func (self *parser) parseIterDef(scanner *scanner, allowVarRef bool) (subtree *t return } -func (self *parser) parseDictKey(scanner *scanner, allowVarRef bool) (key any, err error) { +func (parser *parser) parseDictKey(scanner *scanner, allowVarRef bool) (key any, err error) { tk := scanner.Next() if tk.Sym == SymError { err = tk.Error() @@ -206,14 +206,14 @@ func (self *parser) parseDictKey(scanner *scanner, allowVarRef bool) (key any, e return } -func (self *parser) parseDictionary(scanner *scanner, allowVarRef bool) (subtree *term, err error) { +func (parser *parser) parseDictionary(scanner *scanner, allowVarRef bool) (subtree *term, err error) { args := make(map[any]*term, 0) lastSym := SymUnknown itemExpected := false for lastSym != SymClosedBrace && lastSym != SymEos { var subTree *ast var key any - if key, err = self.parseDictKey(scanner, allowVarRef); err != nil { + if key, err = parser.parseDictKey(scanner, allowVarRef); err != nil { break } else if key == nil { tk := scanner.Previous() @@ -223,10 +223,10 @@ func (self *parser) parseDictionary(scanner *scanner, allowVarRef bool) (subtree } break } - if subTree, err = self.parseItem(scanner, allowVarRef, SymComma, SymClosedBrace); err == nil { + if subTree, err = parser.parseItem(scanner, allowVarRef, SymComma, SymClosedBrace); err == nil { if subTree.root != nil { args[key] = subTree.root - } else if key != nil { + } else /*if key != nil*/ { prev := scanner.Previous() err = prev.ErrorExpectedGot("dictionary-value") break @@ -248,7 +248,7 @@ func (self *parser) parseDictionary(scanner *scanner, allowVarRef bool) (subtree return } -func (self *parser) parseSelectorCase(scanner *scanner, allowVarRef bool, defaultCase bool) (caseTerm *term, err error) { +func (parser *parser) parseSelectorCase(scanner *scanner, allowVarRef bool, defaultCase bool) (caseTerm *term, err error) { var filterList *term var caseExpr *ast tk := scanner.Next() @@ -259,7 +259,7 @@ func (self *parser) parseSelectorCase(scanner *scanner, allowVarRef bool, defaul err = tk.Errorf("case list in default clause") return } - if filterList, err = self.parseList(scanner, false, allowVarRef); err != nil { + if filterList, err = parser.parseList(scanner, false, allowVarRef); err != nil { return } tk = scanner.Next() @@ -270,7 +270,7 @@ func (self *parser) parseSelectorCase(scanner *scanner, allowVarRef bool, defaul } if tk.Sym == SymOpenBrace { - if caseExpr, err = self.parseGeneral(scanner, true, allowVarRef, SymClosedBrace); err != nil { + if caseExpr, err = parser.parseGeneral(scanner, true, allowVarRef, SymClosedBrace); err != nil { return } } else { @@ -296,25 +296,25 @@ func addSelectorCase(selectorTerm, caseTerm *term) { caseTerm.parent = selectorTerm } -func (self *parser) parseSelector(scanner *scanner, tree *ast, allowVarRef bool) (selectorTerm *term, err error) { +func (parser *parser) parseSelector(scanner *scanner, tree *ast, allowVarRef bool) (selectorTerm *term, err error) { var caseTerm *term tk := scanner.makeToken(SymSelector, '?') if selectorTerm, err = tree.addToken2(tk); err != nil { return } - if caseTerm, err = self.parseSelectorCase(scanner, allowVarRef, false); err == nil { + if caseTerm, err = parser.parseSelectorCase(scanner, allowVarRef, false); err == nil { addSelectorCase(selectorTerm, caseTerm) } return } -func (self *parser) parseItem(scanner *scanner, allowVarRef bool, termSymbols ...Symbol) (tree *ast, err error) { - return self.parseGeneral(scanner, false, allowVarRef, termSymbols...) +func (parser *parser) parseItem(scanner *scanner, allowVarRef bool, termSymbols ...Symbol) (tree *ast, err error) { + return parser.parseGeneral(scanner, false, allowVarRef, termSymbols...) } -func (self *parser) Parse(scanner *scanner, termSymbols ...Symbol) (tree *ast, err error) { - return self.parseGeneral(scanner, true, false, termSymbols...) +func (parser *parser) Parse(scanner *scanner, termSymbols ...Symbol) (tree *ast, err error) { + return parser.parseGeneral(scanner, true, false, termSymbols...) } func couldBeACollection(t *term) bool { @@ -333,7 +333,7 @@ func couldBeACollection(t *term) bool { // return areOut // } -func (self *parser) parseGeneral(scanner *scanner, allowForest bool, allowVarRef bool, termSymbols ...Symbol) (tree *ast, err error) { +func (parser *parser) parseGeneral(scanner *scanner, allowForest bool, allowVarRef bool, termSymbols ...Symbol) (tree *ast, err error) { var selectorTerm *term = nil var currentTerm *term = nil var tk *Token @@ -371,21 +371,21 @@ func (self *parser) parseGeneral(scanner *scanner, allowForest bool, allowVarRef switch tk.Sym { case SymOpenRound: var subTree *ast - if subTree, err = self.parseGeneral(scanner, false, allowVarRef, SymClosedRound); err == nil { + if subTree, err = parser.parseGeneral(scanner, false, allowVarRef, SymClosedRound); err == nil { subTree.root.priority = priValue err = tree.addTerm(newExprTerm(subTree.root)) currentTerm = subTree.root } case SymFuncCall: var funcCallTerm *term - if funcCallTerm, err = self.parseFuncCall(scanner, allowVarRef, tk); err == nil { + if funcCallTerm, err = parser.parseFuncCall(scanner, allowVarRef, tk); err == nil { err = tree.addTerm(funcCallTerm) currentTerm = funcCallTerm } case SymOpenSquare: var listTerm *term parsingIndeces := couldBeACollection(currentTerm) - if listTerm, err = self.parseList(scanner, parsingIndeces, allowVarRef); err == nil { + if listTerm, err = parser.parseList(scanner, parsingIndeces, allowVarRef); err == nil { if parsingIndeces { indexTk := NewToken(listTerm.tk.row, listTerm.tk.col, SymIndex, listTerm.source()) indexTerm := newTerm(indexTk) @@ -402,7 +402,7 @@ func (self *parser) parseGeneral(scanner *scanner, allowForest bool, allowVarRef err = currentTerm.Errorf(`selector-case outside of a selector context`) } else { var mapTerm *term - if mapTerm, err = self.parseDictionary(scanner, allowVarRef); err == nil { + if mapTerm, err = parser.parseDictionary(scanner, allowVarRef); err == nil { err = tree.addTerm(mapTerm) currentTerm = mapTerm } @@ -413,13 +413,13 @@ func (self *parser) parseGeneral(scanner *scanner, allowForest bool, allowVarRef // } case SymFuncDef: var funcDefTerm *term - if funcDefTerm, err = self.parseFuncDef(scanner); err == nil { + if funcDefTerm, err = parser.parseFuncDef(scanner); err == nil { err = tree.addTerm(funcDefTerm) currentTerm = funcDefTerm } case SymDollarRound: var iterDefTerm *term - if iterDefTerm, err = self.parseIterDef(scanner, allowVarRef); err == nil { + if iterDefTerm, err = parser.parseIterDef(scanner, allowVarRef); err == nil { err = tree.addTerm(iterDefTerm) currentTerm = iterDefTerm } @@ -430,13 +430,13 @@ func (self *parser) parseGeneral(scanner *scanner, allowForest bool, allowVarRef currentTerm, err = tree.addToken2(tk) } case SymQuestion: - if selectorTerm, err = self.parseSelector(scanner, tree, allowVarRef); err == nil { + if selectorTerm, err = parser.parseSelector(scanner, tree, allowVarRef); err == nil { currentTerm = selectorTerm } case SymColon, SymDoubleColon: var caseTerm *term if selectorTerm != nil { - if caseTerm, err = self.parseSelectorCase(scanner, allowVarRef, tk.Sym == SymDoubleColon); err == nil { + if caseTerm, err = parser.parseSelectorCase(scanner, allowVarRef, tk.Sym == SymDoubleColon); err == nil { addSelectorCase(selectorTerm, caseTerm) currentTerm = caseTerm if tk.Sym == SymDoubleColon {