Adding support for escapes in string literals (strings like "\n\t\"")
authorDejan Jovanović <dejan.jovanovic@gmail.com>
Tue, 2 Feb 2010 19:12:09 +0000 (19:12 +0000)
committerDejan Jovanović <dejan.jovanovic@gmail.com>
Tue, 2 Feb 2010 19:12:09 +0000 (19:12 +0000)
src/parser/smt/smt_lexer.g

index bc8c05fdd6cc2a5c54781a23016e7be70b8510cc..0b38e1c2eb5673789cdbe089fbbb4556dbf75c16 100644 (file)
@@ -49,13 +49,14 @@ tokens {
   C_EXTRASORTS  = ":extrasorts";
   C_EXTRAFUNS   = ":extrafuns";
   C_EXTRAPREDS  = ":extrapreds";
+  C_NOTES       = ":notes";
 }
 
 /**
  * Matches any letter ('a'-'z' and 'A'-'Z').
  */
 protected 
-ALPHA options{ paraphrase = "a letter"; } 
+ALPHA options { paraphrase = "a letter"; } 
   :  'a'..'z' 
   |  'A'..'Z'
   ;
@@ -64,7 +65,7 @@ ALPHA options{ paraphrase = "a letter"; }
  * Matches the digits (0-9)
  */
 protected 
-DIGIT options{ paraphrase = "a digit"; } 
+DIGIT options { paraphrase = "a digit"; } 
   :   '0'..'9'
   ;
 
@@ -142,12 +143,20 @@ NEWLINE options { paraphrase = "a newline"; }
 NUMERAL options { paraphrase = "a numeral"; }
   :  (DIGIT)+
   ;
+   
+/**
+ * Matches an allowed escaped character.
+ */   
+protected ESCAPE
+  : '\\' ('"' | '\\' | 'n' | 't' | 'r')
+  ;      
       
 /**
- * Matches a double quoted string literal. No quote-escaping is supported inside.
+ * Matches a double quoted string literal. Escaping is supported, and escape
+ * character '\' has to be escaped. 
  */
 STRING_LITERAL options { paraphrase = "a string literal"; } 
-  :  '\"' (~('\"'))* '\"'
+  :  '"' (ESCAPE | ~('"'|'\\'))* '"'
   ;
   
 /**