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