aboutsummaryrefslogtreecommitdiff
path: root/gfsm/gfsm/src/libgfsm/tests/compretest.l
diff options
context:
space:
mode:
Diffstat (limited to 'gfsm/gfsm/src/libgfsm/tests/compretest.l')
-rw-r--r--gfsm/gfsm/src/libgfsm/tests/compretest.l199
1 files changed, 199 insertions, 0 deletions
diff --git a/gfsm/gfsm/src/libgfsm/tests/compretest.l b/gfsm/gfsm/src/libgfsm/tests/compretest.l
new file mode 100644
index 0000000..731655c
--- /dev/null
+++ b/gfsm/gfsm/src/libgfsm/tests/compretest.l
@@ -0,0 +1,199 @@
+/*======================================================================
+ * Flex Options
+ */
+%option outfile="compretest.lex.c"
+%option header-file="compretest.lex.h"
+%option prefix="compretest_yy"
+%option reentrant
+%option 8bit
+%option yylineno
+
+%option bison-bridge
+
+%{
+/*======================================================================
+ * User C Header
+ */
+
+#include <gfsmMem.h>
+#include <gfsmRegexCompiler.h>
+#include "compretest.tab.h"
+
+#define my_compiler ((gfsmRegexCompiler*)yyextra)
+#define my_gstr (my_compiler->gstr)
+#define my_abet (my_compiler->abet)
+
+%}
+
+/*======================================================================
+ * Flex Definitions
+ */
+
+DIGIT [0-9]
+SPACE [[:space:]]
+WCHAR [^\<\[\\ \t\n\r\#]
+BCHAR [^\\\]\ \t\n\r\=]
+UTF8PREFIX "Ã"
+
+%x STATE_ESCAPE
+%x STATE_BRACKETED
+%x STATE_BRACKETED_SEP
+%x STATE_BRACKETED_ESCAPE
+%x STATE_COMMENT
+%x STATE_WEIGHT
+%x STATE_UINT
+
+/*======================================================================
+ * Rules
+ */
+%%
+
+{UTF8PREFIX}+. {
+ yylval->gs = gfsm_gstring_new_bytes(yytext,yyleng);
+ return TOK_STRING;
+}
+
+"\\" { BEGIN(STATE_ESCAPE); }
+
+"#" { BEGIN(STATE_COMMENT); }
+
+"[" {
+ BEGIN(STATE_BRACKETED);
+ return '[';
+}
+
+"<" { BEGIN(STATE_WEIGHT); return '<'; }
+
+"(" { return '('; }
+")" { return ')'; }
+
+"*" { return '*'; }
+"+" { return '+'; }
+"^" { BEGIN(STATE_UINT); return '|'; }
+"?" { return '?'; }
+"!" { return '!'; }
+"|" { return '|'; }
+"&" { return '&'; }
+":" { return ':'; }
+"@" { return '@'; }
+"-" { return '-'; /*"/1"{return PROJ1;}*/ /*"/2"{return PROJ2;}*/ }
+
+"$" { return '$'; /* non-AT&T: determinize */ }
+"%" { return '%'; /* non-AT&T: rmepsilon */ }
+"~" { return '~'; /* non-AT&T: connect */ }
+
+{SPACE} { /* ignore */ }
+
+{WCHAR} {
+ yylval->c = yytext[0];
+ return TOK_CHAR;
+}
+
+
+
+<STATE_WEIGHT>([\+\-])?({DIGIT}*\.)?({DIGIT}+)([Ee]([\+\-]?){DIGIT}+)? {
+ yylval->w = strtod(yytext,NULL);
+ return TOK_WEIGHT;
+}
+
+<STATE_WEIGHT>\> {
+ BEGIN(INITIAL);
+ return '>';
+}
+
+
+
+<STATE_UINT>{DIGIT}+ {
+ BEGIN(INITIAL);
+ yylval->u = strtol(yytext,NULL,0);
+ return TOK_UINT;
+}
+
+
+<STATE_COMMENT>[^\n]*\n { BEGIN(INITIAL); /* ignore comments */ }
+
+
+
+
+<STATE_ESCAPE>. {
+ BEGIN(INITIAL);
+ yylval->c = yytext[0];
+ return TOK_CHAR;
+}
+
+
+<STATE_BRACKETED>{UTF8PREFIX}+. {
+ g_string_append_len(my_gstr,yytext,yyleng);
+}
+<STATE_BRACKETED>{SPACE}*"]" {
+ unput(']');
+ BEGIN(STATE_BRACKETED_SEP);
+ if (my_gstr->len) {
+ yylval->gs = gfsm_gstring_dup(my_gstr);
+ return TOK_STRING;
+ }
+}
+<STATE_BRACKETED>{BCHAR}+ {
+ g_string_append(my_gstr, yytext);
+}
+<STATE_BRACKETED>({SPACE}*)"="({SPACE}*) {
+ unput('=');
+ BEGIN(STATE_BRACKETED_SEP);
+ if (my_gstr->len) {
+ yylval->gs = gfsm_gstring_dup(my_gstr);
+ return TOK_STRING;
+ }
+}
+<STATE_BRACKETED>{SPACE}+ {
+ unput(' ');
+ BEGIN(STATE_BRACKETED_SEP);
+ if (my_gstr->len) {
+ yylval->gs = gfsm_gstring_dup(my_gstr);
+ return TOK_STRING;
+ }
+}
+<STATE_BRACKETED>\\ {
+ BEGIN(STATE_BRACKETED_ESCAPE);
+}
+
+
+<STATE_BRACKETED_SEP>"]" {
+ BEGIN(INITIAL);
+ if (my_gstr->len) {
+ g_string_truncate(my_gstr,0);
+ return ']';
+ }
+}
+<STATE_BRACKETED_SEP>"=" {
+ BEGIN(STATE_BRACKETED);
+ g_string_truncate(my_gstr,0);
+ return '=';
+}
+<STATE_BRACKETED_SEP>" " {
+ BEGIN(STATE_BRACKETED);
+ if (my_gstr->len) {
+ g_string_truncate(my_gstr,0);
+ return ' ';
+ }
+}
+
+
+<STATE_BRACKETED_ESCAPE>. {
+ BEGIN(STATE_BRACKETED);
+ g_string_append_c(my_gstr, yytext[0]);
+}
+
+
+
+<*>. {
+ gfsm_scanner_carp(yyextra, "bad character '%s'", yytext);
+ return TOK_UNKNOWN;
+}
+
+%%
+
+/*======================================================================
+ * User C Code
+ */
+
+GFSM_SCANNER_YYWRAP(compretest_yy)