1 %{
2 /*
3  *  cLexer.l
4  *  avida_test_language
5  *
6  *  Created by David on 1/13/06.
7  *  Copyright 1999-2011 Michigan State University. All rights reserved.
8  *
9  *
10  *  This file is part of Avida.
11  *
12  *  Avida is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License
13  *  as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
14  *
15  *  Avida is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
17  *
18  *  You should have received a copy of the GNU Lesser General Public License along with Avida.
19  *  If not, see <http://www.gnu.org/licenses/>.
20  *
21  */
22 
23 #include "cLexer.h"
24 
25 #include "AvidaScript.h"
26 
27 #include <iostream>
28 
29 %}
30 
31 %option c++
32 %option noyywrap
33 %option yylineno
34 
35 %%
36 
37 #.*\n       /* ignore comments */
38 \/\/.*\n    /* ignore comments */
39 [ \t]+      /* ignore whitespace */
40 
41 
42 ;           return AS_TOKEN_SUPPRESS;       // End-of-line
43 \n          return AS_TOKEN_ENDL;
44 ,           return AS_TOKEN_COMMA;
45 
46 ~           return AS_TOKEN_OP_BIT_NOT;    // Bitwise Operators
47 &           return AS_TOKEN_OP_BIT_AND;
48 \|          return AS_TOKEN_OP_BIT_OR;
49 
50 !           return AS_TOKEN_OP_LOGIC_NOT;  // Logic Operators
51 &&          return AS_TOKEN_OP_LOGIC_AND;
52 \|\|        return AS_TOKEN_OP_LOGIC_OR;
53 
54 \+          return AS_TOKEN_OP_ADD;        // Arithmetic Operators
55 -           return AS_TOKEN_OP_SUB;
56 \*          return AS_TOKEN_OP_MUL;
57 \/          return AS_TOKEN_OP_DIV;
58 %           return AS_TOKEN_OP_MOD;
59 
60 \.          return AS_TOKEN_DOT;
61 =           return AS_TOKEN_ASSIGN;        // Assignment
62 @           return AS_TOKEN_REF;
63 
64 ==          return AS_TOKEN_OP_EQ;         // Relational Operators
65 \<=         return AS_TOKEN_OP_LE;
66 \>=         return AS_TOKEN_OP_GE;
67 \<          return AS_TOKEN_OP_LT;
68 \>          return AS_TOKEN_OP_GT;
69 !=          return AS_TOKEN_OP_NEQ;
70 
71 \(          return AS_TOKEN_PREC_OPEN;     // Precedence Grouping
72 \)          return AS_TOKEN_PREC_CLOSE;
73 
74 \[          return AS_TOKEN_IDX_OPEN;      // Index Grouping
75 \]          return AS_TOKEN_IDX_CLOSE;
76 
77 \{          return AS_TOKEN_ARR_OPEN;      // Array Definition Grouping
78 \}          return AS_TOKEN_ARR_CLOSE;
79 :           return AS_TOKEN_ARR_RANGE;
80 \^          return AS_TOKEN_ARR_EXPAN;
81 \.\.        return AS_TOKEN_ARR_WILD;
82 
83 @\{         return AS_TOKEN_LITERAL_DICT;  // Aggregate literals
84 =\>         return AS_TOKEN_DICT_MAPPING;
85 \$\{        return AS_TOKEN_LITERAL_MATRIX;
86 
87 array       return AS_TOKEN_TYPE_ARRAY;    // Built-in Types
88 bool        return AS_TOKEN_TYPE_BOOL;
89 char        return AS_TOKEN_TYPE_CHAR;
90 dict        return AS_TOKEN_TYPE_DICT;
91 float       return AS_TOKEN_TYPE_FLOAT;
92 int         return AS_TOKEN_TYPE_INT;
93 matrix      return AS_TOKEN_TYPE_MATRIX;
94 string      return AS_TOKEN_TYPE_STRING;
95 var         return AS_TOKEN_TYPE_VAR;
96 void        return AS_TOKEN_TYPE_VOID;
97 
98 if          return AS_TOKEN_CMD_IF;        // Blocks
99 else        return AS_TOKEN_CMD_ELSE;
100 elseif      return AS_TOKEN_CMD_ELSEIF;
101 while       return AS_TOKEN_CMD_WHILE;
102 foreach     return AS_TOKEN_CMD_FOREACH;
103 function    return AS_TOKEN_CMD_FUNCTION;
104 
105 asbool      return AS_TOKEN_BUILTIN_CALL;
106 aschar      return AS_TOKEN_BUILTIN_CALL;
107 asint       return AS_TOKEN_BUILTIN_CALL;
108 asfloat     return AS_TOKEN_BUILTIN_CALL;
109 asstring    return AS_TOKEN_BUILTIN_CALL;
110 isarray     return AS_TOKEN_BUILTIN_CALL;
111 isbool      return AS_TOKEN_BUILTIN_CALL;
112 ischar      return AS_TOKEN_BUILTIN_CALL;
113 isdict      return AS_TOKEN_BUILTIN_CALL;
114 isint       return AS_TOKEN_BUILTIN_CALL;
115 isfloat     return AS_TOKEN_BUILTIN_CALL;
116 ismatrix    return AS_TOKEN_BUILTIN_CALL;
117 isstring    return AS_TOKEN_BUILTIN_CALL;
118 clear       return AS_TOKEN_BUILTIN_METHOD;
119 copy        return AS_TOKEN_BUILTIN_METHOD;
120 haskey      return AS_TOKEN_BUILTIN_METHOD;
121 keys        return AS_TOKEN_BUILTIN_METHOD;
122 len         return AS_TOKEN_BUILTIN_METHOD;
123 remove      return AS_TOKEN_BUILTIN_METHOD;
124 resize      return AS_TOKEN_BUILTIN_METHOD;
125 values      return AS_TOKEN_BUILTIN_METHOD;
126 
127 return      return AS_TOKEN_CMD_RETURN;
128 
129 true        return AS_TOKEN_BOOL;
130 false       return AS_TOKEN_BOOL;
131 
132 
133 
134 ([a-zA-Z]|_+[a-zA-Z])[a-zA-Z0-9_]*  return AS_TOKEN_ID;      // Identifiers
135 
136 [0-9]*\.[0-9]+([eE][-+]?[0-9]+)?    return AS_TOKEN_FLOAT;   // Literal Values
137 [0-9]+                              return AS_TOKEN_INT;
138 \"\"                                return AS_TOKEN_STRING;
139 \"([^"\\\n]|\\\"|\\\\|\\.)*\"       return AS_TOKEN_STRING;
140 \'([^'\\\n]|\\\'|\\\\|\\.)\'        return AS_TOKEN_CHAR;
141 
142 .           return AS_TOKEN_UNKNOWN;           // Unrecognized Tokens
143 
144 
145 
146