@baiyu/logic-query-parser

1.0.0 • Public • Published

Logic Query Parser

Generate binary tree with a logic query string as input

How to install?

npm install -S @baiyu/logic-query-parser

Check everything is working with npm test.

How to use it

This lib provides a function parser whick take an optional options object and a string parameter, then returning a binary tree. As binary trees are not easy to use, this lib also provides an utility function which convert said binaryTree to a more usable query form

Avalaible options are for now :

  • spaces : String / array containing all spaces characters. Default : " \n\t"
  • defaultOperator : Default operator to use between two strings. Default : 'and'

Available operators for now : AND, OR, parens, double quote

Example

var parser = require("@baiyu/logic-query-parser");

var binaryTree = parser.parse("hello AND welcome");
// or
var binaryTree = parser.parse("hello + welcome");

The binaryTree for this example will be :

{
  lexeme: {
    type: 'and'
  },
  left: {
    lexeme: {
      type: 'string',
      value: 'hello'
    },
    left: null,
    right: null
  },
  right: {
    lexeme: {
      type: 'string',
      value: 'welcome'
    },
    left: null,
    right: null
  }
}

Another example, slightly more complex:

var parser = require("@baiyu/logic-query-parser");

var binaryTree = parser.parse("(welcome OR bye) AND (hello OR ahoy)");
// or
var binaryTree = parser.parse("(welcome / bye) + (hello / ahoy)");

And the binary tree :

{
  lexeme: {
    type: "and"
  },
  left: {
    lexeme: {
      type: "or"
    },
    left: {
      lexeme: {
        type: "string",
        value: "welcome"
      },
      left: null,
      right: null
    },
    right: {
      lexeme: {
        type: "string",
        value: "bye"
      },
      left: null,
      right: null
    }
  },
  right: {
    lexeme: {
      type: "or"
    },
    left: {
      lexeme: {
        type: "string",
        value: "hello"
      },
      left: null,
      right: null
    },
    right: {
      lexeme: {
        type: "string",
        value: "ahoy"
      },
      left: null,
      right: null
    }
  }
}

As said before, trees are useful but not easy to use. You can also get the "query form":

var parser = require("@baiyu/logic-query-parser");

var binaryTree = parser.parse("(welcome OR bye) AND (hello OR ahoy)");
// or
var binaryTree = parser.parse("(welcome / bye) + (hello / ahoy)");

var query = parser.utils.binaryTreeToQueryJson(binaryTree);

Returning:

{
  type: "and",
  values: [
    {
      type: "or",
      values: [
        {
          type: "string",
          value: "welcome"
        },
        {
          type: "string",
          value: "bye"
        }
      ]
    },
    {
      type: "or",
      values: [
        {
          type: "string",
          value: "hello"
        },
        {
          type: "string",
          value: "ahoy"
        }
      ]
    }
  ]
}

Take a look at config/tests.js for more samples

Support: boybai.work@gmail.com.

Links: @baiyu/logic-query-parser

Readme

Keywords

none

Package Sidebar

Install

npm i @baiyu/logic-query-parser

Weekly Downloads

0

Version

1.0.0

License

MIT

Unpacked Size

154 kB

Total Files

37

Last publish

Collaborators

  • baiyu