From c4f2b9ae653a8a4cb5e87965a21f8450671404e7 Mon Sep 17 00:00:00 2001 From: GideonLeGrange Date: Thu, 10 Apr 2014 16:35:18 +0200 Subject: [PATCH] Switched to ANTLR parser branch --- pom.xml | 28 +++++++++++++++++++ .../legrange/mikrotik/impl/parser/Command.g4 | 23 +++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/main/antlr4/me/legrange/mikrotik/impl/parser/Command.g4 diff --git a/pom.xml b/pom.xml index 1ab9cb6..0470de5 100644 --- a/pom.xml +++ b/pom.xml @@ -68,6 +68,20 @@ example;*.impl + + + org.antlr + antlr4-maven-plugin + 4.2.2 + + + + antlr4 + + + + + @@ -81,6 +95,20 @@ 3.8.1 test + + org.antlr + antlr4-runtime + 4.2.1 + complete + runtime + + + org.antlr + antlr4 + 4.2.1 + complete + compile + diff --git a/src/main/antlr4/me/legrange/mikrotik/impl/parser/Command.g4 b/src/main/antlr4/me/legrange/mikrotik/impl/parser/Command.g4 new file mode 100644 index 0000000..6dda077 --- /dev/null +++ b/src/main/antlr4/me/legrange/mikrotik/impl/parser/Command.g4 @@ -0,0 +1,23 @@ +/** A Mikrotik API Command grammar */ + +grammar Command; +line: command param* where? retrn? ; +command: CMD ; +param: NAME ('=' text )? ; +text: NO_SPACE | QUOTED ; +where: 'where' expr ; +expr: ( eqExpr | hasExpr | moreExpr | lessExpr ) binExpr? ; +binExpr: andExpr | orExpr ; +eqExpr: NAME '=' text ; +hasExpr: NAME ; +moreExpr: NAME '>' text; +lessExpr: NAME '<' text; +andExpr: expr 'and' expr ; +orExpr: expr 'or' expr ; +retrn: 'returns' NAME (',' NAME )* ; + +NAME : ('a'..'z'|'A'..'Z'|'-')+ ; +CMD_PART : ('/' NAME)+ ; +CMD : CMD_PART+ ; +NO_SPACE : [\\S]+ ; +QUOTED : ('"' [.]* '"') ; \ No newline at end of file