Skip to content

jaqx0r/filterexpression

Repository files navigation

filterexpression

A parser for the AIP-160 filter expression language implemented in Go.

The EBNF specification is https://google.aip.dev/assets/misc/ebnf-filtering.txt

This library has minor modifications to the parse tree to avoid ambiguity and simplify Visitor implementations.

import "github.com/jaqx0r/filterexpression"


   ...
   ast, err := filterexpression.Parse(req.filter)
   ...

Visit the AST by implementing the FilterVisitor interface.

You can embed the existing Visitor as a base, so your implementation only needs to override the methods it cares about.

type Visitor struct {
    filtervisitor.Visitor

    query query.Builder
}

func (v *Visitor) VisitFunction(ast *filterexpression.Function) error {
  query.Function(ast.Name[0])
  return nil
}

...
   visitor = &Visitor{}
   if err := filterexpression.Visit(ast, visitor); err != nil {
     log.Errorf("Visit() failed: %v", err)
   }

About

A parser for the AIP-160 filter expression language, implemented in Go

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages