summaryrefslogtreecommitdiff
path: root/parser.ll
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');

%%