/scanner.l

http://github.com/fizx/parsley · LEX · 221 lines · 211 code · 10 blank · 0 comment · 0 complexity · dd62b783f80e95c4294381fb2772d105 MD5 · raw file

  1. %{
  2. #include <stdio.h>
  3. #include "parser.h"
  4. YY_BUFFER_STATE mybuffer;
  5. void prepare_parse(char* msg) {
  6. mybuffer = yy_scan_string(msg);
  7. }
  8. void cleanup_parse() {
  9. yy_delete_buffer(mybuffer);
  10. }
  11. %}
  12. %option stack
  13. %x DSTR
  14. %x SSTR
  15. NUMBER [0-9]+
  16. S [\t\r \n]+
  17. AT "@"
  18. LPAREN "("
  19. RPAREN ")"
  20. PIPE "|"
  21. LT "<"
  22. SLASH "/"
  23. DBLSLASH "//"
  24. BANG "!"
  25. COLON ":"
  26. DBLCOLON "::"
  27. QUERY "?"
  28. HASH "#"
  29. COMMA {S}?","
  30. DOT "."
  31. DBLDOT ".."
  32. GT {S}?">"
  33. LBRA "["
  34. RBRA "]"
  35. TILDE {S}?"~"
  36. SPLAT "*"
  37. PLUS {S}?"+"
  38. DASH "-"
  39. EQ "="
  40. LTE "<="
  41. GTE ">="
  42. DOLLAR "$"
  43. STRING (['][^']*['])|(["][^"]*["])
  44. BSLASHLIT \\(.|\n)
  45. OTHER (.|\n)
  46. XANCESTOR "ancestor"
  47. XANCESTORSELF "ancestor-or-self"
  48. XATTR "attribute"
  49. XCHILD "child"
  50. XDESC "descendant"
  51. XDESCSELF "descendant-or-self"
  52. XFOLLOW "following"
  53. XFOLLOWSIB "following-sibling"
  54. XNS "namespace"
  55. XPARENT "parent"
  56. XPRE "preceding"
  57. XPRESIB "preceding-sibling"
  58. XSELF "self"
  59. XOR "or"
  60. XAND "and"
  61. XDIV "div"
  62. XMOD "mod"
  63. XCOMMENT "comment"
  64. XTEXT "text"
  65. XPI "processing-instruction"
  66. XNODE "node"
  67. CXEQUATION [0-9]+n
  68. CXOPHE "|="
  69. CXOPNE "!="
  70. CXOPSTARTEQ "^="
  71. CXOPENDEQ "$="
  72. CXOPCONTAINS "*="
  73. CXOPCONTAINS2 "~="
  74. CXFIRST ":first"
  75. CXLAST ":last"
  76. CXNOT ":not"
  77. CXEVEN ":even"
  78. CXODD ":odd"
  79. CXEQ ":eq"
  80. CXGT ":gt"
  81. CXLT ":lt"
  82. CXCONTENT ":content"
  83. CXHEADER ":header"
  84. CXCONTAINS ":contains"
  85. CXEMPTY ":empty"
  86. CXHAS ":has"
  87. CXPARENT ":parent"
  88. CXNTHCH ":nth-child"
  89. CXNTHLASTCH ":nth-last-child"
  90. CXNTHTYPE ":nth-of-type"
  91. CXNTHLASTTYPE ":nth-last-of-type"
  92. CXFIRSTCH ":first-child"
  93. CXLASTCH ":last-child"
  94. CXFIRSTTYPE ":first-of-type"
  95. CXLASTTYPE ":last-of-type"
  96. CXONLYCH ":only-child"
  97. CXONLYTYPE ":only-of-type"
  98. CXINPUT ":input"
  99. CXTEXT ":text"
  100. CXPASSWORD ":password"
  101. CXRADIO ":radio"
  102. CXCHECKBOX ":checkbox"
  103. CXSUBMIT ":submit"
  104. CXIMAGE ":image"
  105. CXRESET ":reset"
  106. CXBUTTON ":button"
  107. CXFILE ":file"
  108. CXENABLED ":enabled"
  109. CXDISABLED ":disabled"
  110. CXCHECKED ":checked"
  111. CXSELECTED ":selected"
  112. NAME [a-zA-Z_][a-zA-Z0-9\-_]*
  113. %%
  114. {NUMBER} yylval.string = strdup(yytext); return NUMBER;
  115. {S} yylval.string = strdup(yytext); return S;
  116. {AT} yylval.string = strdup(yytext); return AT;
  117. {LPAREN} yylval.string = strdup(yytext); return LPAREN;
  118. {RPAREN} yylval.string = strdup(yytext); return RPAREN;
  119. {PIPE} yylval.string = strdup(yytext); return PIPE;
  120. {LT} yylval.string = strdup(yytext); return LT;
  121. {SLASH} yylval.string = strdup(yytext); return SLASH;
  122. {DBLSLASH} yylval.string = strdup(yytext); return DBLSLASH;
  123. {BANG} yylval.string = strdup(yytext); return BANG;
  124. {COLON} yylval.string = strdup(yytext); return COLON;
  125. {DBLCOLON} yylval.string = strdup(yytext); return DBLCOLON;
  126. {QUERY} yylval.string = strdup(yytext); return QUERY;
  127. {HASH} yylval.string = strdup(yytext); return HASH;
  128. {COMMA} yylval.string = strdup(yytext); return COMMA;
  129. {DOT} yylval.string = strdup(yytext); return DOT;
  130. {DBLDOT} yylval.string = strdup(yytext); return DBLDOT;
  131. {GT} yylval.string = strdup(yytext); return GT;
  132. {LBRA} yylval.string = strdup(yytext); return LBRA;
  133. {RBRA} yylval.string = strdup(yytext); return RBRA;
  134. {TILDE} yylval.string = strdup(yytext); return TILDE;
  135. {SPLAT} yylval.string = strdup(yytext); return SPLAT;
  136. {PLUS} yylval.string = strdup(yytext); return PLUS;
  137. {DASH} yylval.string = strdup(yytext); return DASH;
  138. {EQ} yylval.string = strdup(yytext); return EQ;
  139. {LTE} yylval.string = strdup(yytext); return LTE;
  140. {GTE} yylval.string = strdup(yytext); return GTE;
  141. {DOLLAR} yylval.string = strdup(yytext); return DOLLAR;
  142. {BSLASHLIT} yylval.string = strdup(yytext); return BSLASHLIT;
  143. {XANCESTOR} yylval.string = strdup(yytext); return XANCESTOR;
  144. {XANCESTORSELF} yylval.string = strdup(yytext); return XANCESTORSELF;
  145. {XATTR} yylval.string = strdup(yytext); return XATTR;
  146. {XCHILD} yylval.string = strdup(yytext); return XCHILD;
  147. {XDESC} yylval.string = strdup(yytext); return XDESC;
  148. {XDESCSELF} yylval.string = strdup(yytext); return XDESCSELF;
  149. {XFOLLOW} yylval.string = strdup(yytext); return XFOLLOW;
  150. {XFOLLOWSIB} yylval.string = strdup(yytext); return XFOLLOWSIB;
  151. {XNS} yylval.string = strdup(yytext); return XNS;
  152. {XPARENT} yylval.string = strdup(yytext); return XPARENT;
  153. {XPRE} yylval.string = strdup(yytext); return XPRE;
  154. {XPRESIB} yylval.string = strdup(yytext); return XPRESIB;
  155. {XSELF} yylval.string = strdup(yytext); return XSELF;
  156. {XOR} yylval.string = strdup(yytext); return XOR;
  157. {XAND} yylval.string = strdup(yytext); return XAND;
  158. {XDIV} yylval.string = strdup(yytext); return XDIV;
  159. {XMOD} yylval.string = strdup(yytext); return XMOD;
  160. {XCOMMENT} yylval.string = strdup(yytext); return XCOMMENT;
  161. {XTEXT} yylval.string = strdup(yytext); return XTEXT;
  162. {XPI} yylval.string = strdup(yytext); return XPI;
  163. {XNODE} yylval.string = strdup(yytext); return XNODE;
  164. {CXEQUATION} yylval.string = strdup(yytext); return CXEQUATION;
  165. {CXOPHE} yylval.string = strdup(yytext); return CXOPHE;
  166. {CXOPNE} yylval.string = strdup(yytext); return CXOPNE;
  167. {CXOPSTARTEQ} yylval.string = strdup(yytext); return CXOPSTARTEQ;
  168. {CXOPENDEQ} yylval.string = strdup(yytext); return CXOPENDEQ;
  169. {CXOPCONTAINS} yylval.string = strdup(yytext); return CXOPCONTAINS;
  170. {CXOPCONTAINS2} yylval.string = strdup(yytext); return CXOPCONTAINS2;
  171. {CXFIRST} yylval.string = strdup(yytext); return CXFIRST;
  172. {CXLAST} yylval.string = strdup(yytext); return CXLAST;
  173. {CXNOT} yylval.string = strdup(yytext); return CXNOT;
  174. {CXEVEN} yylval.string = strdup(yytext); return CXEVEN;
  175. {CXODD} yylval.string = strdup(yytext); return CXODD;
  176. {CXEQ} yylval.string = strdup(yytext); return CXEQ;
  177. {CXGT} yylval.string = strdup(yytext); return CXGT;
  178. {CXLT} yylval.string = strdup(yytext); return CXLT;
  179. {CXCONTENT} yylval.string = strdup(yytext); return CXCONTENT;
  180. {CXHEADER} yylval.string = strdup(yytext); return CXHEADER;
  181. {CXCONTAINS} yylval.string = strdup(yytext); return CXCONTAINS;
  182. {CXEMPTY} yylval.string = strdup(yytext); return CXEMPTY;
  183. {CXHAS} yylval.string = strdup(yytext); return CXHAS;
  184. {CXPARENT} yylval.string = strdup(yytext); return CXPARENT;
  185. {CXNTHCH} yylval.string = strdup(yytext); return CXNTHCH;
  186. {CXNTHLASTCH} yylval.string = strdup(yytext); return CXNTHLASTCH;
  187. {CXNTHTYPE} yylval.string = strdup(yytext); return CXNTHTYPE;
  188. {CXNTHLASTTYPE} yylval.string = strdup(yytext); return CXNTHLASTTYPE;
  189. {CXFIRSTCH} yylval.string = strdup(yytext); return CXFIRSTCH;
  190. {CXLASTCH} yylval.string = strdup(yytext); return CXLASTCH;
  191. {CXFIRSTTYPE} yylval.string = strdup(yytext); return CXFIRSTTYPE;
  192. {CXLASTTYPE} yylval.string = strdup(yytext); return CXLASTTYPE;
  193. {CXONLYCH} yylval.string = strdup(yytext); return CXONLYCH;
  194. {CXONLYTYPE} yylval.string = strdup(yytext); return CXONLYTYPE;
  195. {CXINPUT} yylval.string = strdup(yytext); return CXINPUT;
  196. {CXTEXT} yylval.string = strdup(yytext); return CXTEXT;
  197. {CXPASSWORD} yylval.string = strdup(yytext); return CXPASSWORD;
  198. {CXRADIO} yylval.string = strdup(yytext); return CXRADIO;
  199. {CXCHECKBOX} yylval.string = strdup(yytext); return CXCHECKBOX;
  200. {CXSUBMIT} yylval.string = strdup(yytext); return CXSUBMIT;
  201. {CXIMAGE} yylval.string = strdup(yytext); return CXIMAGE;
  202. {CXRESET} yylval.string = strdup(yytext); return CXRESET;
  203. {CXBUTTON} yylval.string = strdup(yytext); return CXBUTTON;
  204. {CXFILE} yylval.string = strdup(yytext); return CXFILE;
  205. {CXENABLED} yylval.string = strdup(yytext); return CXENABLED;
  206. {CXDISABLED} yylval.string = strdup(yytext); return CXDISABLED;
  207. {CXCHECKED} yylval.string = strdup(yytext); return CXCHECKED;
  208. {CXSELECTED} yylval.string = strdup(yytext); return CXSELECTED;
  209. {NAME} yylval.string = strdup(yytext); return NAME;
  210. {STRING} yylval.string = strdup(yytext); return STRING;
  211. {OTHER} yylval.string = strdup(yytext); return OTHER;