pyparsley/scanner.l

221 lines
7.1 KiB
Plaintext

%{
#include <stdio.h>
#include "kstring.h"
#include "parser.h"
YY_BUFFER_STATE mybuffer;
void prepare_parse(char* msg) {
mybuffer = yy_scan_string(msg);
}
void cleanup_parse() {
yy_delete_buffer(mybuffer);
}
%}
%option stack
%x DSTR
%x SSTR
NUMBER [0-9]+
S [\t\r \n]+
AT "@"
LPAREN "("
RPAREN ")"
PIPE "|"
LT "<"
SLASH "/"
DBLSLASH "//"
BANG "!"
COLON ":"
DBLCOLON "::"
QUERY "?"
HASH "#"
COMMA {S}?","
DOT "."
DBLDOT ".."
GT {S}?">"
LBRA "["
RBRA "]"
TILDE {S}?"~"
SPLAT "*"
PLUS {S}?"+"
DASH "-"
EQ "="
LTE "<="
GTE ">="
DOLLAR "$"
STRING (['][^']*['])|(["][^"]*["])
BSLASHLIT \\(.|\n)
OTHER (.|\n)
XANCESTOR "ancestor"
XANCESTORSELF "ancestor-or-self"
XATTR "attribute"
XCHILD "child"
XDESC "descendant"
XDESCSELF "descendant-or-self"
XFOLLOW "following"
XFOLLOWSIB "following-sibling"
XNS "namespace"
XPARENT "parent"
XPRE "preceding"
XPRESIB "preceding-sibling"
XSELF "self"
XOR "or"
XAND "and"
XDIV "div"
XMOD "mod"
XCOMMENT "comment"
XTEXT "text"
XPI "processing-instruction"
XNODE "node"
CXEQUATION [0-9]+n
CXOPHE "|="
CXOPNE "!="
CXOPSTARTEQ "^="
CXOPENDEQ "$="
CXOPCONTAINS "*="
CXOPCONTAINS2 "~="
CXFIRST ":first"
CXLAST ":last"
CXNOT ":not"
CXEVEN ":even"
CXODD ":odd"
CXEQ ":eq"
CXGT ":gt"
CXLT ":lt"
CXHEADER ":header"
CXCONTAINS ":contains"
CXEMPTY ":empty"
CXHAS ":has"
CXPARENT ":parent"
CXNTHCH ":nth-child"
CXNTHLASTCH ":nth-last-child"
CXNTHTYPE ":nth-of-type"
CXNTHLASTTYPE ":nth-last-of-type"
CXFIRSTCH ":first-child"
CXLASTCH ":last-child"
CXFIRSTTYPE ":first-of-type"
CXLASTTYPE ":last-of-type"
CXONLYCH ":only-child"
CXONLYTYPE ":only-of-type"
CXINPUT ":input"
CXTEXT ":text"
CXPASSWORD ":password"
CXRADIO ":radio"
CXCHECKBOX ":checkbox"
CXSUBMIT ":submit"
CXIMAGE ":image"
CXRESET ":reset"
CXBUTTON ":button"
CXFILE ":file"
CXENABLED ":enabled"
CXDISABLED ":disabled"
CXCHECKED ":checked"
CXSELECTED ":selected"
NAME [a-zA-Z_][a-zA-Z0-9\-_]*
%%
{NUMBER} yylval = strdup(yytext); return NUMBER;
{S} yylval = strdup(yytext); return S;
{AT} yylval = strdup(yytext); return AT;
{LPAREN} yylval = strdup(yytext); return LPAREN;
{RPAREN} yylval = strdup(yytext); return RPAREN;
{PIPE} yylval = strdup(yytext); return PIPE;
{LT} yylval = strdup(yytext); return LT;
{SLASH} yylval = strdup(yytext); return SLASH;
{DBLSLASH} yylval = strdup(yytext); return DBLSLASH;
{BANG} yylval = strdup(yytext); return BANG;
{COLON} yylval = strdup(yytext); return COLON;
{DBLCOLON} yylval = strdup(yytext); return DBLCOLON;
{QUERY} yylval = strdup(yytext); return QUERY;
{HASH} yylval = strdup(yytext); return HASH;
{COMMA} yylval = strdup(yytext); return COMMA;
{DOT} yylval = strdup(yytext); return DOT;
{DBLDOT} yylval = strdup(yytext); return DBLDOT;
{GT} yylval = strdup(yytext); return GT;
{LBRA} yylval = strdup(yytext); return LBRA;
{RBRA} yylval = strdup(yytext); return RBRA;
{TILDE} yylval = strdup(yytext); return TILDE;
{SPLAT} yylval = strdup(yytext); return SPLAT;
{PLUS} yylval = strdup(yytext); return PLUS;
{DASH} yylval = strdup(yytext); return DASH;
{EQ} yylval = strdup(yytext); return EQ;
{LTE} yylval = strdup(yytext); return LTE;
{GTE} yylval = strdup(yytext); return GTE;
{DOLLAR} yylval = strdup(yytext); return DOLLAR;
{BSLASHLIT} yylval = strdup(yytext); return BSLASHLIT;
{XANCESTOR} yylval = strdup(yytext); return XANCESTOR;
{XANCESTORSELF} yylval = strdup(yytext); return XANCESTORSELF;
{XATTR} yylval = strdup(yytext); return XATTR;
{XCHILD} yylval = strdup(yytext); return XCHILD;
{XDESC} yylval = strdup(yytext); return XDESC;
{XDESCSELF} yylval = strdup(yytext); return XDESCSELF;
{XFOLLOW} yylval = strdup(yytext); return XFOLLOW;
{XFOLLOWSIB} yylval = strdup(yytext); return XFOLLOWSIB;
{XNS} yylval = strdup(yytext); return XNS;
{XPARENT} yylval = strdup(yytext); return XPARENT;
{XPRE} yylval = strdup(yytext); return XPRE;
{XPRESIB} yylval = strdup(yytext); return XPRESIB;
{XSELF} yylval = strdup(yytext); return XSELF;
{XOR} yylval = strdup(yytext); return XOR;
{XAND} yylval = strdup(yytext); return XAND;
{XDIV} yylval = strdup(yytext); return XDIV;
{XMOD} yylval = strdup(yytext); return XMOD;
{XCOMMENT} yylval = strdup(yytext); return XCOMMENT;
{XTEXT} yylval = strdup(yytext); return XTEXT;
{XPI} yylval = strdup(yytext); return XPI;
{XNODE} yylval = strdup(yytext); return XNODE;
{CXEQUATION} yylval = strdup(yytext); return CXEQUATION;
{CXOPHE} yylval = strdup(yytext); return CXOPHE;
{CXOPNE} yylval = strdup(yytext); return CXOPNE;
{CXOPSTARTEQ} yylval = strdup(yytext); return CXOPSTARTEQ;
{CXOPENDEQ} yylval = strdup(yytext); return CXOPENDEQ;
{CXOPCONTAINS} yylval = strdup(yytext); return CXOPCONTAINS;
{CXOPCONTAINS2} yylval = strdup(yytext); return CXOPCONTAINS2;
{CXFIRST} yylval = strdup(yytext); return CXFIRST;
{CXLAST} yylval = strdup(yytext); return CXLAST;
{CXNOT} yylval = strdup(yytext); return CXNOT;
{CXEVEN} yylval = strdup(yytext); return CXEVEN;
{CXODD} yylval = strdup(yytext); return CXODD;
{CXEQ} yylval = strdup(yytext); return CXEQ;
{CXGT} yylval = strdup(yytext); return CXGT;
{CXLT} yylval = strdup(yytext); return CXLT;
{CXHEADER} yylval = strdup(yytext); return CXHEADER;
{CXCONTAINS} yylval = strdup(yytext); return CXCONTAINS;
{CXEMPTY} yylval = strdup(yytext); return CXEMPTY;
{CXHAS} yylval = strdup(yytext); return CXHAS;
{CXPARENT} yylval = strdup(yytext); return CXPARENT;
{CXNTHCH} yylval = strdup(yytext); return CXNTHCH;
{CXNTHLASTCH} yylval = strdup(yytext); return CXNTHLASTCH;
{CXNTHTYPE} yylval = strdup(yytext); return CXNTHTYPE;
{CXNTHLASTTYPE} yylval = strdup(yytext); return CXNTHLASTTYPE;
{CXFIRSTCH} yylval = strdup(yytext); return CXFIRSTCH;
{CXLASTCH} yylval = strdup(yytext); return CXLASTCH;
{CXFIRSTTYPE} yylval = strdup(yytext); return CXFIRSTTYPE;
{CXLASTTYPE} yylval = strdup(yytext); return CXLASTTYPE;
{CXONLYCH} yylval = strdup(yytext); return CXONLYCH;
{CXONLYTYPE} yylval = strdup(yytext); return CXONLYTYPE;
{CXINPUT} yylval = strdup(yytext); return CXINPUT;
{CXTEXT} yylval = strdup(yytext); return CXTEXT;
{CXPASSWORD} yylval = strdup(yytext); return CXPASSWORD;
{CXRADIO} yylval = strdup(yytext); return CXRADIO;
{CXCHECKBOX} yylval = strdup(yytext); return CXCHECKBOX;
{CXSUBMIT} yylval = strdup(yytext); return CXSUBMIT;
{CXIMAGE} yylval = strdup(yytext); return CXIMAGE;
{CXRESET} yylval = strdup(yytext); return CXRESET;
{CXBUTTON} yylval = strdup(yytext); return CXBUTTON;
{CXFILE} yylval = strdup(yytext); return CXFILE;
{CXENABLED} yylval = strdup(yytext); return CXENABLED;
{CXDISABLED} yylval = strdup(yytext); return CXDISABLED;
{CXCHECKED} yylval = strdup(yytext); return CXCHECKED;
{CXSELECTED} yylval = strdup(yytext); return CXSELECTED;
{NAME} yylval = strdup(yytext); return NAME;
{STRING} yylval = strdup(yytext); return STRING;
{OTHER} yylval = strdup(yytext); return OTHER;