/[svn]/parser/parser.ml
ViewVC logotype

Diff of /parser/parser.ml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 221 by abate, Tue Jul 10 17:15:00 2007 UTC revision 222 by abate, Tue Jul 10 17:15:58 2007 UTC
# Line 51  Line 51 
51    
52  let char_list pos s =  let char_list pos s =
53    let s = seq_of_string pos s in    let s = seq_of_string pos s in
54    List.map (fun (loc,c) -> mk loc (Cst (Types.Char (Chars.Unichar.from_char c)))) s    List.map (fun (loc,c) -> mk loc (Cst (Types.Char (Chars.mk_char c)))) s
55    
56    
57  EXTEND  EXTEND
# Line 153  Line 153 
153                 | `Explode x -> mk x.loc (Op ("@",[x;q]))                 | `Explode x -> mk x.loc (Op ("@",[x;q]))
154            ) l e            ) l e
155      | t = [ a = TAG ->      | t = [ a = TAG ->
156                mk loc (Cst (Types.Atom (Types.AtomPool.mk a)))                mk loc (Cst (Types.Atom (Atoms.mk a)))
157            | "<"; e = expr LEVEL "no_appl" -> e ];            | "<"; e = expr LEVEL "no_appl" -> e ];
158          a = expr_attrib_spec; ">"; c = expr ->          a = expr_attrib_spec; ">"; c = expr ->
159          mk loc (Xml (t, mk loc (Pair (a,c))))          mk loc (Xml (t, mk loc (Pair (a,c))))
# Line 238  Line 238 
238      | "("; a = LIDENT; ":="; c = const; ")" -> Elem (mk loc (Constant (a,c)))      | "("; a = LIDENT; ":="; c = const; ")" -> Elem (mk loc (Constant (a,c)))
239      | UIDENT "PCDATA" -> string_regexp      | UIDENT "PCDATA" -> string_regexp
240      | i = STRING1; "--"; j = STRING1 ->      | i = STRING1; "--"; j = STRING1 ->
241          let i = Chars.Unichar.from_char (parse_char loc i)          let i = Chars.mk_char (parse_char loc i)
242          and j = Chars.Unichar.from_char (parse_char loc j) in          and j = Chars.mk_char (parse_char loc j) in
243          Elem (mk loc (Internal (Types.char (Chars.char_class i j))))          Elem (mk loc (Internal (Types.char (Chars.char_class i j))))
244      |  s = STRING1 ->      |  s = STRING1 ->
245          let s = seq_of_string loc s in          let s = seq_of_string loc s in
246          List.fold_right          List.fold_right
247            (fun (loc,c) accu ->            (fun (loc,c) accu ->
248               let c = Chars.Unichar.from_char c in               let c = Chars.mk_char c in
249               let c = Chars.atom c in               let c = Chars.atom c in
250               Seq (Elem (mk loc (Internal (Types.char c))), accu))               Seq (Elem (mk loc (Internal (Types.char c))), accu))
251            s            s
# Line 270  Line 270 
270        | "("; a = LIDENT; ":="; c = const; ")" -> mk loc (Constant (a,c))        | "("; a = LIDENT; ":="; c = const; ")" -> mk loc (Constant (a,c))
271        | a = UIDENT -> mk loc (PatVar a)        | a = UIDENT -> mk loc (PatVar a)
272        | i = INT ; "--"; j = INT ->        | i = INT ; "--"; j = INT ->
273            let i = Big_int.big_int_of_string i            let i =  Intervals.mk i
274            and j = Big_int.big_int_of_string j in            and j =  Intervals.mk j in
275            mk loc (Internal (Types.interval (Intervals.bounded i j)))            mk loc (Internal (Types.interval (Intervals.bounded i j)))
276        | i = INT ->        | i = INT ->
277            let i = Big_int.big_int_of_string i  in            let i =  Intervals.mk i  in
278            mk loc (Internal (Types.interval (Intervals.atom i)))            mk loc (Internal (Types.interval (Intervals.atom i)))
279        | "*"; "--"; j = INT ->        | "*"; "--"; j = INT ->
280            let j = Big_int.big_int_of_string j in            let j =  Intervals.mk j in
281            mk loc (Internal (Types.interval (Intervals.left j)))            mk loc (Internal (Types.interval (Intervals.left j)))
282        | i = INT; "--"; "*" ->        | i = INT; "--"; "*" ->
283            let i = Big_int.big_int_of_string i in            let i = Intervals.mk i in
284            mk loc (Internal (Types.interval (Intervals.right i)))            mk loc (Internal (Types.interval (Intervals.right i)))
285        | i = char ->        | i = char ->
286            mk loc (Internal (Types.char (Chars.char_class i i)))            mk loc (Internal (Types.char (Chars.char_class i i)))
# Line 296  Line 296 
296            [ "<"; LIDENT "_" -> mk loc (Internal (Types.atom (Atoms.any)))            [ "<"; LIDENT "_" -> mk loc (Internal (Types.atom (Atoms.any)))
297            | a = TAG ->            | a = TAG ->
298                mk loc                mk loc
299                (Internal (Types.atom (Atoms.atom (Types.AtomPool.mk a)))) ]                (Internal (Types.atom (Atoms.atom (Atoms.mk a)))) ]
300          | [ "<"; t = pat -> t ]          | [ "<"; t = pat -> t ]
301          ];          ];
302          a = attrib_spec; ">"; c = pat ->          a = attrib_spec; ">"; c = pat ->
# Line 308  Line 308 
308                         mk loc (Internal                         mk loc (Internal
309                                   (Types.char                                   (Types.char
310                                      (Chars.atom                                      (Chars.atom
311                                         (Chars.Unichar.from_char c))))) s in                                         (Chars.mk_char c))))) s in
312            let s = s @ [mk loc (Internal (Sequence.nil_type))] in            let s = s @ [mk loc (Internal (Sequence.nil_type))] in
313            multi_prod loc s            multi_prod loc s
314        ]        ]
# Line 326  Line 326 
326    
327    char:    char:
328      [      [
329        [ c = STRING1 -> Chars.Unichar.from_char (parse_char loc c)        [ c = STRING1 -> Chars.mk_char (parse_char loc c)
330        | "!"; i = INT -> Chars.Unichar.from_int (int_of_string i) ]        | "!"; i = INT -> Chars.mk_int (int_of_string i) ]
331      ];      ];
332    
333    
334    const:    const:
335      [      [
336        [ i = INT -> Types.Integer (Big_int.big_int_of_string i)        [ i = INT -> Types.Integer (Intervals.mk i)
337        | "`"; a = [LIDENT | UIDENT] -> Types.Atom (Types.AtomPool.mk a)        | "`"; a = [LIDENT | UIDENT] -> Types.Atom (Atoms.mk a)
338        | c = char -> Types.Char c ]        | c = char -> Types.Char c ]
339      ];      ];
340    

Legend:
Removed from v.221  
changed lines
  Added in v.222

CVS Admin">CVS Admin
ViewVC Help
Powered by ViewVC 1.1.5