X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=src%2Fxpath%2Fulexer.ml;h=7a7d2a749cfc107e150af3c6be607a483a04fb35;hp=aa66179b20e2bdb23b30a3e874660f59634b001c;hb=58417b0684f351a8a24e4e3ad54bde715036209d;hpb=30bc0bb1291426e5e26eb2dee1ffc41e4c246349 diff --git a/src/xpath/ulexer.ml b/src/xpath/ulexer.ml index aa66179..7a7d2a7 100644 --- a/src/xpath/ulexer.ml +++ b/src/xpath/ulexer.ml @@ -14,7 +14,7 @@ (***********************************************************************) (* - Time-stamp: + Time-stamp: *) open Xpath_internal_parser @@ -54,7 +54,7 @@ let return lexbuf tok = (tok, L.loc lexbuf) let return_loc i j tok = (tok, (i,j)) let regexp ncname_char = - xml_letter | xml_digit | [ '-' '_' ] | xml_combining_char | xml_extender | "\\." + xml_letter | xml_digit | [ '-' '_' '.'] | xml_combining_char | xml_extender let hexa_digit = function | '0'..'9' as c -> (Char.code c) - (Char.code '0') @@ -81,15 +81,15 @@ let keyword_or_tag s = try List.assoc s [ "self", AXIS Ast.Self; - "descendant", AXIS Ast.Descendant; + "descendant", AXIS (Ast.Descendant false); "child", AXIS Ast.Child; - "descendant-or-self", AXIS Ast.DescendantOrSelf; + "descendant-or-self", AXIS (Ast.Descendant true); "attribute", AXIS Ast.Attribute; "following-sibling", AXIS Ast.FollowingSibling; "preceding-sibling", AXIS Ast.PrecedingSibling; "parent", AXIS Ast.Parent; - "ancestor", AXIS Ast.Ancestor; - "ancestor-or-self", AXIS Ast.AncestorOrSelf; + "ancestor", AXIS (Ast.Ancestor false); + "ancestor-or-self", AXIS (Ast.Ancestor true); "preceding", AXIS Ast.Preceding; "following", AXIS Ast.Following; "and", AND; @@ -121,8 +121,17 @@ let rec token = lexer | ">=" -> GTE | "=" -> EQ | "!=" -> NEQ + | ".." -> DOTDOT + | "." -> DOT | "node()" -> NODE | "text()" -> TEXT + | "comment()" -> COMMENT + | '@' ncname -> ATTNAME (L.utf8_lexeme lexbuf) + | "processing-instruction()" -> PI "" + | "processing-instruction('"ncname"')" + | "processing-instruction(\""ncname"\")"-> + let s = L.utf8_lexeme lexbuf in + PI (String.sub s 24 (String.length s - 26)) | ncname -> keyword_or_tag (L.utf8_lexeme lexbuf) | float -> let s = L.utf8_lexeme lexbuf in @@ -165,5 +174,3 @@ and string start double = lexer | _ -> store_lexeme lexbuf; string start double lexbuf - -