2019-08-31 20:51:14 -07:00

74 lines
2.3 KiB
Plaintext

# @builtin "string.ne"
Expression -> Term {% (d) => d[0] %}
Term
-> Something _ LogicOperator _ Term {% (d) => [d[0], d[2], ...d[4]] %}
| Something _ Term {% (d) => [d[0], ...d[2]] %}
| Parenthesis {% (d) => d[0] %}
| Something
Parenthesis
-> OpenP Term CloseP {% (d) => [d[1]] %}
| OpenP Something _ LogicOperator _ Term CloseP _ LogicOperator _ Term
{% (d) => [[d[1], d[3], ...d[5]], d[8], ...d[10]] %}
| OpenP Something _ LogicOperator _ Term CloseP _ Term
{% (d) => [[d[1], d[3], ...d[5]], ...d[8]] %}
OpenP
-> "("
CloseP
-> ")"
LogicOperator
-> AndOperator {% (d) => d[0] %}
| OrOperator {% (d) => d[0] %}
AndOperator
-> "AND" {% (d) => d[0] %}
OrOperator
-> "OR" {% (d) => d[0] %}
Something
-> SomethingWithoutSpaces {% (d) => d[0] %}
| SomethingWithoutSpaces _ {% (d) => d[0] %}
| _ SomethingWithoutSpaces {% (d) => d[1] %}
| _ SomethingWithoutSpaces _ {% (d) => d[1] %}
SomethingWithoutSpaces
-> Facet {% (d) => d[0] %}
| EntityName {% (d) => d[0] %}
Facet
-> FacetName FacetSeparator FacetValue
{% (d) => ({
facetName: d[0],
facetValue: d[2]
}) %}
FacetSeparator
-> ":"
FacetName
-> String {% (d) => d[0] %}
FacetValue
-> String {% (d) => d[0] %}
EntityName
-> String {% (d, l, reject) => {
if (d[0] === 'AND'
|| d[0] === 'OR'
|| d[0].indexOf(':') >= 0) {
return reject;
}
return { dataset: d[0] };
} %}
String
-> [a-zA-Z\._\-0-9\*{}/\\=]:+ {% (d) => d[0].join("") %}
_
-> [\s]:+ {% (d) => null %}