]> matita.cs.unibo.it Git - helm.git/commitdiff
better distinction of (* *) and (** *) comments
authorStefano Zacchiroli <zack@upsilon.cc>
Fri, 4 Nov 2005 13:02:54 +0000 (13:02 +0000)
committerStefano Zacchiroli <zack@upsilon.cc>
Fri, 4 Nov 2005 13:02:54 +0000 (13:02 +0000)
- first kind of comments is thrown away by the lexer, still admitting comment nesting
- second kind of comment is lexed as usual returning "BEGINCOMMENT" .... "ENDCOMMENT" token stream

helm/ocaml/cic_notation/cicNotationLexer.ml

index 13a8b3883dd86addc046c1e17ab308e0f3897b2a..9fa6270eec91ce4260a1dc85a6ec3f5aad78036f 100644 (file)
@@ -64,9 +64,10 @@ let regexp meta_anonymous = "$_"
 let regexp qstring = '"' [^ '"']* '"'
 
 let regexp begincomment = "(**" xml_blank
+let regexp beginnote = "(*"
 let regexp endcomment = "*)"
-let regexp comment_char = [^'*'] | '*'[^')']
-let regexp note = "(*" ([^'*'] | "**") comment_char* "*)"
+(* let regexp comment_char = [^'*'] | '*'[^')']
+let regexp note = "|+" ([^'*'] | "**") comment_char* "+|" *)
 
 let level1_layouts = 
   [ "sub"; "sup";
@@ -230,6 +231,20 @@ let rec level2_meta_token =
         remove_left_quote (Ulexing.utf8_lexeme lexbuf))
   | eof -> return_eoi lexbuf
 
+let rec comment_token acc depth =
+  lexer
+  | beginnote ->
+      let acc = acc ^ Ulexing.utf8_lexeme lexbuf in
+      comment_token acc (depth + 1) lexbuf
+  | endcomment ->
+      let acc = acc ^ Ulexing.utf8_lexeme lexbuf in
+      if depth = 0
+      then acc
+      else comment_token acc (depth - 1) lexbuf
+  | _ ->
+      let acc = acc ^ Ulexing.utf8_lexeme lexbuf in
+      comment_token acc depth lexbuf
+
   (** @param k continuation to be invoked when no ligature has been found *)
 let rec ligatures_token k =
   lexer
@@ -274,11 +289,13 @@ and level2_ast_token =
       return lexbuf ("UNPARSED_META",
         remove_left_quote (Ulexing.utf8_lexeme lexbuf))
   | meta_anonymous -> return lexbuf ("UNPARSED_META", "anonymous")
-  | note -> 
-      let comment =
+  | beginnote -> 
+      let comment = comment_token (Ulexing.utf8_lexeme lexbuf) 0 lexbuf in
+(*       let comment =
         Ulexing.utf8_sub_lexeme lexbuf 2 (Ulexing.lexeme_length lexbuf - 4)
       in
-      return lexbuf ("NOTE", comment)
+      return lexbuf ("NOTE", comment) *)
+      ligatures_token level2_ast_token lexbuf
   | begincomment -> return lexbuf ("BEGINCOMMENT","")
   | endcomment -> return lexbuf ("ENDCOMMENT","")
   | eof -> return_eoi lexbuf