1 : %option reentrant bison-bridge bison-locations
2 : %option noyywrap
3 : %option never-interactive
4 :
5 :
6 : %{
7 : #include <string.h>
8 : #include <aterm2.h>
9 : #include "parser-tab.h"
10 :
11 : static void initLoc(YYLTYPE * loc)
12 23 : {
13 23 : loc->first_line = 1;
14 23 : loc->first_column = 1;
15 : }
16 :
17 : static void adjustLoc(YYLTYPE * loc, const char * s, size_t len)
18 7664 : {
19 7664 : while (len--) {
20 6037 : switch (*s++) {
21 : case '\n':
22 212 : ++loc->first_line;
23 212 : loc->first_column = 1;
24 212 : break;
25 : default:
26 5825 : ++loc->first_column;
27 : }
28 : }
29 : }
30 :
31 : #define YY_USER_INIT initLoc(yylloc)
32 : #define YY_USER_ACTION adjustLoc(yylloc, yytext, yyleng);
33 :
34 : %}
35 :
36 :
37 : ID [a-zA-Z\_][a-zA-Z0-9\_\']*
38 : INT [0-9]+
39 : STR \"[^\n\"]*\"
40 : PATH [a-zA-Z0-9\.\_\-\+]*(\/[a-zA-Z0-9\.\_\-\+]+)+
41 : URI [a-zA-Z][a-zA-Z0-9\+\-\.]*\:[a-zA-Z0-9\%\/\?\:\@\&\=\+\$\,\-\_\.\!\~\*\']+
42 :
43 :
44 : %%
45 :
46 :
47 8 : if { return IF; }
48 16 : then { return THEN; }
49 16 : else { return ELSE; }
50 22 : assert { return ASSERT; }
51 8 : with { return WITH; }
52 19 : let { return LET; }
53 4 : rec { return REC; }
54 18 : inherit { return INHERIT; }
55 4 :
56 8 : \=\= { return EQ; }
57 16 : \!\= { return NEQ; }
58 8 : \&\& { return AND; }
59 9 : \|\| { return OR; }
60 18 : \-\> { return IMPL; }
61 1 : \/\/ { return UPDATE; }
62 297 :
63 290 : {ID} { yylval->t = ATmake("<str>", yytext); return ID; /* !!! alloc */ }
64 308 : {INT} { int n = atoi(yytext); /* !!! overflow */
65 9 : yylval->t = ATmake("<int>", n);
66 18 : return INT;
67 : }
68 196 : {STR} { int len = strlen(yytext);
69 98 : yytext[len - 1] = 0;
70 196 : yylval->t = ATmake("<str>", yytext + 1);
71 98 : yytext[len - 1] = '\"';
72 98 : return STR; /* !!! alloc */
73 : }
74 38 : {PATH} { yylval->t = ATmake("<str>", yytext); return PATH; /* !!! alloc */ }
75 16 : {URI} { yylval->t = ATmake("<str>", yytext); return URI; /* !!! alloc */ }
76 699 :
77 8 : [ \t\n]+ /* eat up whitespace */
78 680 : \#[^\n]* /* single-line comments */
79 683 : \/\*([^*]|\*[^\/])*\*\/ /* long comments */
80 5 :
81 452 : . return yytext[0];
82 454 :
83 :
84 0 : %%
|