Switch to sqlite3's lemon parser generator.
[oweals/jsonpath.git] / lexer.l
diff --git a/lexer.l b/lexer.l
deleted file mode 100644 (file)
index 046de73..0000000
--- a/lexer.l
+++ /dev/null
@@ -1,181 +0,0 @@
-%{
-/*
- * Copyright (C) 2013-2014 Jo-Philipp Wich <jow@openwrt.org>
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <ctype.h>
-
-#include "parser.h"
-
-int yylex(struct jp_state *s);
-
-#define YY_DECL int yylex(struct jp_state *s)
-
-static void
-str_put(struct jp_state *s, char c)
-{
-       if ((s->str_ptr - s->str_buf + 1) < sizeof(s->str_buf))
-               *s->str_ptr++ = c;
-}
-
-static void
-str_decode(struct jp_state *s, const char *input, int base)
-{
-       int code;
-       char *end;
-
-       code = strtoul(input, &end, base);
-
-       if (end == input || *end)
-               return;
-
-       if (code > 0 && code <= 0x7F)
-       {
-               str_put(s, code);
-       }
-       else if (code > 0 && code <= 0x7FF)
-       {
-               str_put(s, ((code >>  6) & 0x1F) | 0xC0);
-               str_put(s, ( code        & 0x3F) | 0x80);
-       }
-       else if (code > 0 && code <= 0xFFFF)
-       {
-               str_put(s, ((code >> 12) & 0x0F) | 0xE0);
-               str_put(s, ((code >>  6) & 0x3F) | 0x80);
-               str_put(s, ( code        & 0x3F) | 0x80);
-       }
-       else if (code > 0 && code <= 0x10FFFF)
-       {
-               str_put(s, ((code >> 18) & 0x07) | 0xF0);
-               str_put(s, ((code >> 12) & 0x3F) | 0x80);
-               str_put(s, ((code >>  6) & 0x3F) | 0x80);
-               str_put(s, ( code        & 0x3F) | 0x80);
-       }
-}
-
-%}
-
-%option outfile="lexer.c" header-file="lexer.h"
-%option noyywrap nounput noinput
-
-DOT                    "."
-LABEL          [a-zA-Z_][a-zA-Z0-9_]*
-
-BROPEN         "["
-BRCLOSE                "]"
-POPEN          "("
-PCLOSE         ")"
-COMMA          ","
-
-ROOT           "$"
-THIS           "@"
-
-LT                     "<"
-LE                     "<="
-GT                     ">"
-GE                     ">="
-NE                     "!="
-EQ                     "="
-NOT                    "!"
-AND                    "&&"
-OR                     "||"
-
-NUMBER         -?[0-9]+
-WILDCARD       "*"
-BOOL           (true|false)
-
-WS                     [ \t\n]*
-
-%x                     STRING
-
-%%
-
-["'] {
-       s->str_ptr = s->str_buf;
-       s->str_quote = *yytext;
-       memset(s->str_buf, 0, sizeof(s->str_buf));
-       BEGIN(STRING);
-}
-
-<STRING>{
-       ["'] {
-               if (*yytext == s->str_quote)
-               {
-                       BEGIN(INITIAL);
-                       yylval.op = jp_alloc_op(T_STRING, 0, s->str_buf);
-                       return T_STRING;
-               }
-
-               str_put(s, *yytext);
-       }
-
-       \\([0-3][0-7]{1,2}|[0-7]{0,2})  { str_decode(s, yytext + 1, 8); }
-       \\x[A-Fa-f0-9]{2}                               { str_decode(s, yytext + 2, 16); }
-       \\u[A-Fa-f0-9]{4}                               { str_decode(s, yytext + 2, 16); }
-       \\a                                                             { str_put(s, '\a'); }
-       \\b                                                             { str_put(s, '\b'); }
-       \\e                                                             { str_put(s, '\e'); }
-       \\f                                                             { str_put(s, '\f'); }
-       \\n                                                             { str_put(s, '\n'); }
-       \\r                                                             { str_put(s, '\r'); }
-       \\t                                                             { str_put(s, '\t'); }
-       \\v                                                             { str_put(s, '\v'); }
-       \\.                                                             { str_put(s, *yytext); }
-       [^\\"']+                                                { while (*yytext) str_put(s, *yytext++); }
-}
-
-{BOOL} {
-       yylval.op = jp_alloc_op(T_BOOL, (*yytext == 't'), NULL);
-       return T_BOOL;
-}
-
-{NUMBER} {
-       yylval.op = jp_alloc_op(T_NUMBER, atoi(yytext), NULL);
-       return T_NUMBER;
-}
-
-{LABEL} {
-       yylval.op = jp_alloc_op(T_LABEL, 0, yytext);
-       return T_LABEL;
-}
-
-{WILDCARD} {
-       yylval.op = jp_alloc_op(T_WILDCARD, 0, NULL);
-       return T_WILDCARD;
-}
-
-{DOT}          { return T_DOT; }
-{BROPEN}       { return T_BROPEN; }
-{BRCLOSE}      { return T_BRCLOSE; }
-{POPEN}                { return T_POPEN; }
-{PCLOSE}       { return T_PCLOSE; }
-{COMMA}                { return T_UNION; }
-
-{ROOT}         { return T_ROOT; }
-{THIS}         { return T_THIS; }
-
-{LT}           { return T_LT; }
-{LE}           { return T_LE; }
-{GT}           { return T_GT; }
-{GE}           { return T_GE; }
-{EQ}           { return T_EQ; }
-{NE}           { return T_NE; }
-{NOT}          { return T_NOT; }
-{AND}          { return T_AND; }
-{OR}           { return T_OR; }
-
-{WS}           { }
-
-%%