diff --git a/src/main/java/caosdb/server/query/test/DatetimeLexer.g4 b/src/main/java/caosdb/server/query/test/DatetimeLexer.g4 new file mode 100644 index 0000000000000000000000000000000000000000..b4c5d4db00973d1c5db0a78be4589726e24522b6 --- /dev/null +++ b/src/main/java/caosdb/server/query/test/DatetimeLexer.g4 @@ -0,0 +1,86 @@ +lexer grammar DatetimeLexer; + + +NUM: + ('0' .. '9')+ + ; + +HYPHEN: + '-' + ; + +TXT: + ('a'..'z' | 'A'..'Z' | '_' | '-' {_input.LA(1) != '>'}? | '+' | '&' | ';' | ',' | '$' | ':' | '%' | '^' | '~' {_input.LA(1) != '='}? | '`' | '´' | 'ö' | 'ä' | 'ß' | 'ü' | 'Ö' | 'Ä' | 'Ü' | '@' | '[' | ']' | '{' | '}' )+ +; + +COLON: + ':' + ; + +DOT: + '.' + ; + +fragment +ESC_MARKER: + '\\' +; + +fragment +DOUBLE_QUOTE: + '"' +; + +fragment +SINGLE_QUOTE: + '\'' +; + + +SINGLE_QUOTE_START: + '\'' -> pushMode(SINGLE_QUOTE_MODE) +; + +DOUBLE_QUOTE_START: + '"' -> pushMode(DOUBLE_QUOTE_MODE) +; + +mode SINGLE_QUOTE_MODE; + + SINGLE_QUOTE_ESCAPED_CHAR: + ESC_MARKER + ( '\'' | '\\' | '*' ) + ; + + SINGLE_QUOTE_END: + '\'' -> mode(DEFAULT_MODE) + ; + + SINGLE_QUOTE_STAR: + '*' + ; + + SINGLE_QUOTE_ANY_CHAR: + ~('\''|'\\'|'*')+ + ; + +mode DOUBLE_QUOTE_MODE; + + DOUBLE_QUOTE_ESCAPED_CHAR: + ESC_MARKER + ( '"' | '\\' | '*' ) + ; + + DOUBLE_QUOTE_END: + '"' -> mode(DEFAULT_MODE) + ; + + DOUBLE_QUOTE_STAR: + '*' + ; + + DOUBLE_QUOTE_ANY_CHAR: + ~('"'|'\\'|'*')+ + ; + + diff --git a/src/main/java/caosdb/server/query/test/DatetimeParser.g4 b/src/main/java/caosdb/server/query/test/DatetimeParser.g4 new file mode 100644 index 0000000000000000000000000000000000000000..0f5c74fdd9cdc7bd1af739b7c75b6f14df4741d8 --- /dev/null +++ b/src/main/java/caosdb/server/query/test/DatetimeParser.g4 @@ -0,0 +1,63 @@ +parser grammar DatetimeParser; + +options { tokenVocab = DatetimeLexer; } + +datetime: + ( + double_quoted_datetime + | single_quoted_datetime + | iso_datetime + ) + ; + +single_quoted_datetime returns [String text] locals [StringBuffer sb] + @init{$sb = new StringBuffer();} + @after{$text = $sb.toString();} + : + SINGLE_QUOTE_START + ( + d = iso_datetime {$sb.append($d.text);} + ) + SINGLE_QUOTE_END + ; + + + +double_quoted_datetime returns [String text] locals [StringBuffer sb] + @init{$sb = new StringBuffer();} + @after{$text = $sb.toString(); } +: + DOUBLE_QUOTE_START + ( + d = iso_datetime { $sb.append($d.text); } + ) + DOUBLE_QUOTE_END +; + + + + +iso_datetime +: + NUM // year + ( + HYPHEN NUM // mon + ( + HYPHEN NUM // day of mon + ( + (m=TXT {$m.text.equals("T")}?)?// compliance with iso datetime + NUM // hour + ( + COLON NUM // minut + ( + COLON NUM // sec + ( + DOT NUM // millisec + )? + )? + )? + )? + )? + )? +; +