prefix pcb_ordc
by_score

top_code
	/*
	 *                            COPYRIGHT
	 *
	 *  pcb-rnd, interactive printed circuit board design
	 *
	 *  order plugin - constraint language lexer
	 *  pcb-rnd Copyright (C) 2022 Tibor 'Igor2' Palinkas
	 *
	 *  This program is free software; you can redistribute it and/or modify
	 *  it under the terms of the GNU General Public License as published by
	 *  the Free Software Foundation; either version 2 of the License, or
	 *  (at your option) any later version.
	 *
	 *  This program is distributed in the hope that it will be useful,
	 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
	 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	 *  GNU General Public License for more details.
	 *
	 *  You should have received a copy of the GNU General Public License
	 *  along with this program; if not, write to the Free Software
	 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
	 *
	 *  Contact:
	 *    Project page: http://repo.hu/projects/pcb-rnd
	 *    lead developer: http://repo.hu/projects/pcb-rnd/contact.html
	 *    mailing list: pcb-rnd (at) list.repo.hu (send "subscribe")
	 */
	#include <stdlib.h>
	#include <string.h>
	#include <librnd/core/compat_misc.h>
	#include "../src_plugins/order/const_gram.h"
	#define lval  ((pcb_ordc_STYPE *)(user_ctx))

rule integer
regex [-]?[0-9]+
code
	lval->un.i = atoi(ULX_BUF);
	return T_CINT;

rule real
regex [-]?[0-9]*[.][0-9Ee+-]*
code
	lval->un.d = strtod(ULX_BUF, NULL);
	return T_CFLOAT;

rule id
regex [a-zA-Z][a-zA-Z0-9_-]*
code
	lval->un.s = rnd_strdup(ULX_BUF);
	return T_ID;

rule quoted string
regex "\([^"]*\)"
code
	lval->un.s = rnd_strndup(ULX_TAGP(1), ULX_TAGL(1));
	return T_QSTR;

rule chars
regex [(){}$,*/+%;-]
code
	return *ULX_BUF;

rule blank
regex [ \t\n\r]+
code
	ULX_IGNORE;

rulestring ==                return T_EQ;
rulestring !=                return T_NEQ;
rulestring >=                return T_GE;
rulestring <=                return T_LE;
rulestring >                 return T_GT;
rulestring <                 return T_LT;
rulestring !                 return T_NOT;
rulestring &&                return T_AND;
rulestring ||                return T_OR;

rulestring if                return T_IF;
rulestring error             return T_ERROR;
rulestring string            return T_STRING;
rulestring int               return T_INT;
rulestring float             return T_FLOAT;
