From bf8715bfd64d365bb3d1dccfbca5cb9d44f7854a Mon Sep 17 00:00:00 2001
From: Daniel Hornung <d.hornung@indiscale.com>
Date: Fri, 12 Jun 2020 14:13:24 +0200
Subject: [PATCH] Dummy...

---
 .../caosdb/server/query/test/DatetimeLexer.g4 | 86 +++++++++++++++++++
 .../server/query/test/DatetimeParser.g4       | 63 ++++++++++++++
 2 files changed, 149 insertions(+)
 create mode 100644 src/main/java/caosdb/server/query/test/DatetimeLexer.g4
 create mode 100644 src/main/java/caosdb/server/query/test/DatetimeParser.g4

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 00000000..b4c5d4db
--- /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 00000000..0f5c74fd
--- /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
+						)?
+					)?
+				)?
+			)?
+		)?
+	)?	
+;
+
-- 
GitLab