On Tue, 5 Apr 2011, Eugeniy Meshcheryakov wrote:

> Hello,
> 
> I'm trying to check if new version of coccinelle (0.2.5) works correctly,
> and got strange results with python_regexp.cocci example:
> 
>    % spatch -sp_file /tmp/python_regexp.cocci python_regexp.c
>    init_defs_builtins: /usr/share/coccinelle/standard.h
>    File "/tmp/python_regexp.cocci", line 3, column 15,  charpos = 45
>        around = '', whole content = m = re.compile('_new$')
>    Fatal error: exception Failure("lexing: empty token")
> 
> Is it expected result, or is there something wrong with how I compile
> the package? Other examples that use python seem to work fine (after
> correcting syntax errors).

A patch that fixes the problem is below.

julia

diff -u -p a/parsing_cocci/lexer_script.mll b/parsing_cocci/lexer_script.mll
--- a/parsing_cocci/lexer_script.mll    2011-04-02 10:39:29.000000000 +0200
+++ b/parsing_cocci/lexer_script.mll    2011-04-05 22:03:04.000000000 +0200
@@ -46,18 +46,15 @@ rule token = parse
   | "/"  { TScriptData (tok lexbuf) }
   | "//" [^ '\n']* { token lexbuf } (* skip SmPL comments *)
   | '"'  { TScriptData (Printf.sprintf "\"%s\"" (string lexbuf)) }
-  | "'"  { TScriptData (Printf.sprintf "'%s'" (char lexbuf)) }
+  | "'"  { TScriptData (Printf.sprintf "'%s'" (cstring lexbuf)) }
   | eof  { EOF }
   | _ { raise (Lexical ("unrecognised symbol, in token rule:"^tok lexbuf)) }
 
 (* These are C strings.  Perhaps they require some adjustment. *)
 and string  = parse
   | '"'                 { "" }
-  | (_ as x)            { Common.string_of_char x ^ string lexbuf }
-  | ("\\" _) as x       { x ^ string lexbuf }
+  | (_ as x)            { (String.make 1 x) ^ string lexbuf }
 
-and char = parse
-  | (_ as x) "'"                                     { String.make 1 x }
-  | (("\\" (oct | oct oct | oct oct oct)) as x  "'") { x }
-  | (("\\x" (hex | hex hex)) as x  "'")       { x }
-  | (("\\" _ ) as x "'") { x }
+and cstring  = parse
+  | "'"                 { "" }
+  | (_ as x)            { (String.make 1 x) ^ cstring lexbuf }
_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)

Reply via email to