diff --git a/ast/tests.go b/ast/tests.go index 5e58a4a..9022e1e 100644 --- a/ast/tests.go +++ b/ast/tests.go @@ -71,4 +71,5 @@ func NewNotTest() *NotTest { } func (node *NotTest) notTestChild() {} +func (node *NotTest) andTestChild() {} func (node *NotTest) SetChild(n NotTestChild) { node.ParentNode.SetChild(n) } diff --git a/parser/parser.go b/parser/parser.go index 925977b..f553a40 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -71,6 +71,24 @@ func (parser *Parser) parseNotTest() *ast.NotTest { // and_test: not_test ('and' not_test)* func (parser *Parser) parseAndTest() *ast.AndTest { andTest := ast.NewAndTest() + notTest := parser.parseNotTest() + if notTest == nil { + return nil + } + andTest.Append(notTest) + for { + next := parser.nextToken() + if !next.IsLiteral("and") { + parser.unreadToken(next) + break + } + notTest = parser.parseNotTest() + if notTest == nil { + return nil + } + andTest.Append(notTest) + } + return andTest }