| // Copyright 2020 Google LLC |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // https://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| include "utils/flatbuffers/flatbuffers.fbs"; |
| |
| namespace libtextclassifier3.grammar.SemanticExpression_; |
| union Expression { |
| ConstValueExpression, |
| ConstituentExpression, |
| ComposeExpression, |
| SpanAsStringExpression, |
| ParseNumberExpression, |
| MergeValueExpression, |
| ArithmeticExpression, |
| } |
| |
| // A semantic expression. |
| namespace libtextclassifier3.grammar; |
| table SemanticExpression { |
| expression:SemanticExpression_.Expression; |
| } |
| |
| // A constant flatbuffer value. |
| namespace libtextclassifier3.grammar; |
| table ConstValueExpression { |
| // The base type of the value. |
| base_type:int; |
| |
| // The id of the type of the value. |
| // The id is used for lookup in the semantic values type metadata. |
| type:int; |
| |
| // The serialized value. |
| value:[ubyte]; |
| } |
| |
| // The value of a rule constituent. |
| namespace libtextclassifier3.grammar; |
| table ConstituentExpression { |
| // The id of the constituent. |
| id:ushort; |
| } |
| |
| // The fields to set. |
| namespace libtextclassifier3.grammar.ComposeExpression_; |
| table Field { |
| // The field to set. |
| path:libtextclassifier3.FlatbufferFieldPath; |
| |
| // The value. |
| value:SemanticExpression; |
| } |
| |
| // A combination: Compose a result from arguments. |
| // https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-4.html#%_toc_%_sec_1.1.1 |
| namespace libtextclassifier3.grammar; |
| table ComposeExpression { |
| // The id of the type of the result. |
| type:int; |
| |
| fields:[ComposeExpression_.Field]; |
| } |
| |
| // Lifts a span as a value. |
| namespace libtextclassifier3.grammar; |
| table SpanAsStringExpression { |
| } |
| |
| // Parses a string as a number. |
| namespace libtextclassifier3.grammar; |
| table ParseNumberExpression { |
| // The base type of the value. |
| base_type:int; |
| |
| value:SemanticExpression; |
| } |
| |
| // Merge the semantic expressions. |
| namespace libtextclassifier3.grammar; |
| table MergeValueExpression { |
| // The id of the type of the result. |
| type:int; |
| |
| values:[SemanticExpression]; |
| } |
| |
| // The operator of the arithmetic expression. |
| namespace libtextclassifier3.grammar.ArithmeticExpression_; |
| enum Operator : int { |
| NO_OP = 0, |
| OP_ADD = 1, |
| OP_MUL = 2, |
| OP_MAX = 3, |
| OP_MIN = 4, |
| } |
| |
| // Simple arithmetic expression. |
| namespace libtextclassifier3.grammar; |
| table ArithmeticExpression { |
| // The base type of the operation. |
| base_type:int; |
| |
| op:ArithmeticExpression_.Operator; |
| values:[SemanticExpression]; |
| } |
| |