diff options
author | Lennart Poettering <lennart@poettering.net> | 2005-11-21 14:24:32 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2005-11-21 14:24:32 +0000 |
commit | 92b92f067b014ac680d60c2b153964c4706c338c (patch) | |
tree | c0541f2cacd8395b1db06674bd0d806f44c82496 | |
parent | 09e102e6fc2a62e65a00bcf186e889d46ad1472a (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.l | 10 | ||||
-rw-r--r-- | feed/test-lex-c.c | 15 |
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); +} |