-
Notifications
You must be signed in to change notification settings - Fork 0
/
course.l
128 lines (110 loc) · 2.97 KB
/
course.l
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
%{
#include <iostream>
#include "y.tab.h"
void yyerror(char *s);
%}
%option yylineno
%option noyywrap
rigtend "]=]"
lefend "[=["
string_in_sq_br_1 "[["(([^]]|[\n])*|"]")*"]]"
string_in_sq_br_2 "[=["(("="[^]*])|(.|\n))*"]=]"
multiline_string (({string_in_sq_br_1})|({string_in_sq_br_2}))
instring_1 ([^\\\n"]|\\\n|\\["']|\\\\|\\n|\\[0-9a-fA-F]{1,3}|\\x[0-9a-fA-F]{1,3}|\\r|\\t|\\"["|\\"]"|\\a|\\f|\\z|\\v|\\b)*
instring_2 ([^\\\n']|\\\n|\\["']|\\\\|\\n|\\[0-9a-fA-F]{1,3}|\\x[0-9a-fA-F]{1,3}|\\r|\\t|\\"["|\\"]"|\\a|\\f|\\z|\\v|\\b)*
single_id [a-zA-Z_]+[a-z0-9_]*
single_string ["]{instring_1}["]|[']{instring_2}[']
string ({single_string})
stingid {single_string}
id ({single_id}([.:]{single_id})+)|{single_id}
classid {id}(":"{id})+
onesymb [-+*/%=<>().,{}^]
whitespace [ \t\r\n]
int [0-9]+
double [0-9]*"."[0-9]+
hex "0x"[0-9a-fA-F]+
exp {int}[eE]-?{int}
label "::"{id}"::"
%%
"and" return AND;
"break" return BREAK;
"do" return DO;
"else" return ELSE;
"elseif" return ELSEIF;
"end" return END;
"false" return FALSE;
"goto" return GOTO;
"for" return FOR;
"function" return FUNCTION;
"if" return IF;
"in" return IN;
"local" return LOCAL;
"nil" return NIL;
"not" return NOT;
"or" return OR;
"repeat" return REPEAT;
"return" return RETURN;
"then" return THEN;
"true" return TRUE;
"until" return UNTIL;
"while" return WHILE;
"~=" return NE;
"==" return EQ;
"<=" return LE;
">=" return GE;
".." return CONC; //только на случай, если к переменной клеится строка или переменная к строке или две переменных. Случай строка-строка разобран
"..." return DOTS;
{onesymb} {
// std::cout << *yytext << std::endl;
return *yytext;
}
{label} {}
"debug" {
std::cout << "Debug switched" << std::endl;
yydebug = yydebug?0:1;
}
{single_id} {
// std::cout << "ID" << std::endl;
return ID;
}
{id} {
//std::cout << "ID" << std::endl;
return ID;
}
{classid} {
// std::cout << "ID" << std::endl;
return ID;
}
{int} {
// std::cout << yytext << std::endl;
return NUM;
}
{double} {
// std::cout << yytext << std::endl;
return NUM;
}
{hex} {return NUM;}
{exp} {return NUM;}
{string} {
//std::cout << yytext << std::endl;
return STRING;
}
{stingid} {
//std::cout << yytext << std::endl;
return STRING;
}
{multiline_string} {
// std::cout << "Multiline string" << std::endl;
return STRING;
}
"--"{multiline_string} {
//printf("Multiline comment\n");
//return 0;
}
"--".*? {
//printf("Singleline comment\n");
//return 0;
}
[ \t\r\n] {}
. {return *yytext;}
%%