ecp_expression_language 1.0.0
ecp_expression_language: ^1.0.0 copied to clipboard
Library for parsing and evaluating simple expression language with additional references
example/main.dart
import 'package:ecp_expression_language/ecp_expression_language.dart';
void main() {
var text = "title == 1&&title!=2";
var leftReg = RegExp(r'([\w\s])+(?=(==|!=))', caseSensitive: false);
var rightReg = RegExp(r'(?<=(==|!=)).*?((?=(&{2}|\|{2}|\)))|$)',
caseSensitive: false, unicode: true);
text = text.replaceAllMapped(
leftReg, (match) => "\"${match.group(0)?.trim()}\"");
text = text.replaceAllMapped(rightReg, (match) {
return "\"${match.group(0)?.trim()}\"";
});
print(text);
var expressionGrammarDefinition = ExpressionGrammarParser({
// "element": TestElement(),
});
var parser = expressionGrammarDefinition.build();
var result = parser.parse(text);
var expression = result.value as Expression<bool>;
var value = expression.evaluate();
print(value);
}
// class TestElement extends ExpressionProviderElement {
// Map<String, ExpressionProvider> properties = {
// 'value': ConstantExpressionProvider<String>("27"),
// };
//
// @override
// String? id;
//
// @override
// ExpressionProvider getExpressionProvider([String? propertyName]) {
// if (propertyName == null || propertyName == '') {
// propertyName = 'value';
// }
// return properties[propertyName]!;
// }
//
// @override
// ExpressionProviderElement clone(
// ExpressionProvider<ExpressionProviderElement> parent) {
// return this;
// }
// }
//
// class ConstantExpressionProvider<T> extends ExpressionProvider<T> {
// final T value;
//
// ConstantExpressionProvider(this.value);
//
// @override
// Expression<T> getExpression() {
// return ConstantExpression(value);
// }
// }