blob: 0545e1bef38b858d0ad54ab92e673249a6e7030c (
plain)
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
|
/*****************************************************************************
Copyright (C) 2008 University of Southern California.
All Rights Reserved.
Purpose:
CHiLL script lexical analysis
Update history:
created by Chun Chen, Jan 2008
*****************************************************************************/
%{
#include <stdio.h>
#include <string.h>
#include <vector>
#include <map>
#include "parser.tab.hh"
extern std::map<std::string, int> parameter_tab;
extern bool is_interactive;
extern const char *PROMPT_STRING;
%}
%s LINE COMMENT FILE_NAME PROCEDURE_NAME
%option yylineno
%option noyywrap
%%
# BEGIN(COMMENT);
<COMMENT>.* /* comment */
source BEGIN(FILE_NAME); return SOURCE;
<FILE_NAME>[^ \t\n:#]+ yylval.name = new char[yyleng+1]; strcpy(yylval.name, yytext); return FILENAME;
procedure BEGIN(LINE); return PROCEDURE;
loop BEGIN(LINE); return LOOP;
format BEGIN(FILE_NAME); return FORMAT;
original BEGIN(LINE); return ORIGINAL;
permute BEGIN(LINE); return PERMUTE;
pragma BEGIN(LINE); return PRAGMA;
prefetch BEGIN(LINE); return PREFETCH;
tile BEGIN(LINE); return TILE;
datacopy BEGIN(LINE); return DATACOPY;
datacopy_privatized BEGIN(LINE); return DATACOPY_PRIVATIZED;
unroll BEGIN(LINE); return UNROLL;
unroll_extra BEGIN(LINE); return UNROLL_EXTRA;
split BEGIN(LINE); return SPLIT;
nonsingular BEGIN(LINE); return NONSINGULAR;
print BEGIN(LINE); return PRINT;
dep BEGIN(LINE); return PRINT_DEP;
code BEGIN(LINE); return PRINT_CODE;
space BEGIN(LINE); return PRINT_IS;
exit BEGIN(LINE); return EXIT;
known BEGIN(LINE); return KNOWN;
strided BEGIN(LINE); return STRIDED;
counted BEGIN(LINE); return COUNTED;
num_statement BEGIN(LINE); return NUM_STATEMENT;
ceil BEGIN(LINE); return CEIL;
floor BEGIN(LINE); return FLOOR;
true BEGIN(LINE); yylval.bool_val = true; return TRUEORFALSE;
false BEGIN(LINE); yylval.bool_val = false; return TRUEORFALSE;
skew BEGIN(LINE); return SKEW;
shift BEGIN(LINE); return SHIFT;
scale BEGIN(LINE); return SCALE;
reverse BEGIN(LINE); return REVERSE;
shift_to BEGIN(LINE); return SHIFT_TO;
fuse BEGIN(LINE); return FUSE;
peel BEGIN(LINE); return PEEL;
distribute BEGIN(LINE); return DISTRIBUTE;
remove_dep BEGIN(LINE); return REMOVE_DEP;
structure BEGIN(LINE); return PRINT_STRUCTURE;
[ \t]+ /* ignore whitespaces */
\n BEGIN(INITIAL); return (int)yytext[0];
L[0-9]+ yylval.val = atoi(&yytext[1]); return LEVEL;
[a-zA-Z_][a-zA-Z_0-9]* {
BEGIN(LINE);
yylval.name = new char[yyleng+1];
strcpy(yylval.name, yytext);
return VARIABLE;
}
\"(\\.|[^\\"])*\" {
BEGIN(LINE);
std::string str = std::string(yytext);
yylval.name = new char[yyleng-1];
str = str.substr(1,yyleng-2);
strcpy(yylval.name, str.c_str());
return STRING;
}
[0-9]+ yylval.val = atoi(yytext); return NUMBER;
\>\= return GE;
\<\= return LE;
\!\= return NE;
\=\= return EQ;
. return (int)yytext[0];
<LINE><<EOF>> BEGIN(INITIAL); unput('\n');
%%
|