summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2005-11-21 14:24:32 +0000
committerLennart Poettering <lennart@poettering.net>2005-11-21 14:24:32 +0000
commit92b92f067b014ac680d60c2b153964c4706c338c (patch)
treec0541f2cacd8395b1db06674bd0d806f44c82496
parent09e102e6fc2a62e65a00bcf186e889d46ad1472a (diff)
* support escaped characters in strings
* deal properly with numbers git-svn-id: file:///home/lennart/svn/public/sse/trunk@8 5fbabb74-0606-0410-a5e4-b5cc6a42724e
-rw-r--r--feed/sse-lex-c.l10
-rw-r--r--feed/test-lex-c.c15
2 files changed, 23 insertions, 2 deletions
diff --git a/feed/sse-lex-c.l b/feed/sse-lex-c.l
index 243c9ab..fab074a 100644
--- a/feed/sse-lex-c.l
+++ b/feed/sse-lex-c.l
@@ -1,4 +1,4 @@
-/* --*-c-mode-*-- */
+/* --*-c-*-- $Id$ */
%{
@@ -7,7 +7,7 @@
%}
-%Start DEF CCOMMENT CPPCOMMENT STRING CHAR PREPROC
+%Start DEF CCOMMENT CPPCOMMENT STRING STRINGESC CHAR CHARESC PREPROC
IDCHAR [_a-zA-Z0-9]
NIDCHAR [^_a-zA-Z0-9]
@@ -33,14 +33,18 @@ NIDCHAR [^_a-zA-Z0-9]
<CPPCOMMENT>. ;
<DEF>"\"" { BEGIN STRING; }
+<STRING>"\\" { BEGIN STRINGESC; }
<STRING>"\"" { BEGIN DEF; }
<STRING>. |
<STRING>\n ;
+<STRINGESC>. { BEGIN STRING; }
<DEF>"'" { BEGIN CHAR; }
+<CHAR>"\\" { BEGIN CHARESC; }
<CHAR>"'" { BEGIN DEF; }
<CHAR>\n |
<CHAR>. ;
+<CHARESC>. { BEGIN CHAR; }
<DEF>auto{NIDCHAR} |
<DEF>break{NIDCHAR} |
@@ -77,6 +81,8 @@ NIDCHAR [^_a-zA-Z0-9]
<DEF>[a-zA-Z_][a-zA-Z_0-9]{3,} { printf("%s\n", yytext); }
+<DEF>(0x)?[0-9]+ ;
+
<DEF>"\n" |
<DEF>. ;
diff --git a/feed/test-lex-c.c b/feed/test-lex-c.c
new file mode 100644
index 0000000..7bcf7b4
--- /dev/null
+++ b/feed/test-lex-c.c
@@ -0,0 +1,15 @@
+int main(int argc, char argv[]) {
+
+ /* multiline
+ * foo */
+
+ // c comment
+
+ fprintf(stderr, "this is a \"string %s %i", 0x5656, 6786);
+
+ c = 'c';
+ c = '\\';
+ c = '\000';
+
+ FOO_BAR(blafasel);
+}