$search
00001 00002 #include "CompilerTranslator.h" 00003 #include "../../compiler/errors_code.h" 00004 00005 #include <CompilerTranslator.moc> 00006 00007 namespace Aseba 00008 { 00009 CompilerTranslator::CompilerTranslator() 00010 { 00011 00012 } 00013 00014 const std::wstring CompilerTranslator::translate(ErrorCode error) 00015 { 00016 QString msg; 00017 00018 switch (error) 00019 { 00020 00021 case ERROR_BROKEN_TARGET: 00022 msg = tr("Broken target description: not enough room for internal variables"); 00023 break; 00024 00025 case ERROR_STACK_OVERFLOW: 00026 msg = tr("Execution stack will overflow, check for any recursive subroutine call and cut long mathematical expressions"); 00027 break; 00028 00029 case ERROR_SCRIPT_TOO_BIG: 00030 msg = tr("Script too big for target bytecode size"); 00031 break; 00032 00033 case ERROR_VARIABLE_NOT_DEFINED: 00034 msg = tr("%0 is not a defined variable"); 00035 break; 00036 00037 case ERROR_VARIABLE_NOT_DEFINED_GUESS: 00038 msg = tr("%0 is not a defined variable, do you mean %1?"); 00039 break; 00040 00041 case ERROR_FUNCTION_NOT_DEFINED: 00042 msg = tr("Target does not provide function %0"); 00043 break; 00044 00045 case ERROR_FUNCTION_NOT_DEFINED_GUESS: 00046 msg = tr("Target does not provide function %0, do you mean %1?"); 00047 break; 00048 00049 case ERROR_CONSTANT_NOT_DEFINED: 00050 msg = tr("Constant %0 not defined"); 00051 break; 00052 00053 case ERROR_CONSTANT_NOT_DEFINED_GUESS: 00054 msg = tr("Constant %0 not defined, do you mean %1?"); 00055 break; 00056 00057 case ERROR_EVENT_NOT_DEFINED: 00058 msg = tr("%0 is not a known event"); 00059 break; 00060 00061 case ERROR_EVENT_NOT_DEFINED_GUESS: 00062 msg = tr("%0 is not a known event, do you mean %1?"); 00063 break; 00064 00065 case ERROR_EMIT_LOCAL_EVENT: 00066 msg = tr("%0 is a local event that you cannot emit"); 00067 break; 00068 00069 case ERROR_SUBROUTINE_NOT_DEFINED: 00070 msg = tr("Subroutine %0 does not exists"); 00071 break; 00072 00073 case ERROR_SUBROUTINE_NOT_DEFINED_GUESS: 00074 msg = tr("Subroutine %0 does not exists, do you mean %1?"); 00075 break; 00076 00077 case ERROR_LINE: 00078 msg = tr("Line: "); 00079 break; 00080 00081 case ERROR_COL: 00082 msg = tr(" Col: "); 00083 break; 00084 00085 case ERROR_UNBALANCED_COMMENT_BLOCK: 00086 msg = tr("Unbalanced comment block"); 00087 break; 00088 00089 case ERROR_SYNTAX: 00090 msg = tr("Syntax error"); 00091 break; 00092 00093 case ERROR_INVALID_IDENTIFIER: 00094 msg = tr("Identifiers must begin with _ or an alphanumeric character, found unicode character 0x%0 instead"); 00095 break; 00096 00097 case ERROR_INVALID_HEXA_NUMBER: 00098 msg = tr("Error in hexadecimal number"); 00099 break; 00100 00101 case ERROR_INVALID_BINARY_NUMBER: 00102 msg = tr("Error in binary number"); 00103 break; 00104 00105 case ERROR_NUMBER_INVALID_BASE: 00106 msg = tr("Error in number, invalid base"); 00107 break; 00108 00109 case ERROR_IN_NUMBER: 00110 msg = tr("Error in number"); 00111 break; 00112 00113 case ERROR_INTERNAL: 00114 msg = tr("Internal compiler error, please report a bug containing the source which triggered this error"); 00115 break; 00116 00117 case ERROR_EXPECTING: 00118 msg = tr("Expecting %0, found %1 instead"); 00119 break; 00120 00121 case ERROR_UINT12_OUT_OF_RANGE: 00122 msg = tr("Integer value %0 out of [0;4095] range"); 00123 break; 00124 00125 case ERROR_UINT16_OUT_OF_RANGE: 00126 msg = tr("Integer value %0 out of [0;65535] range"); 00127 break; 00128 00129 case ERROR_PINT16_OUT_OF_RANGE: 00130 msg = tr("Integer value %0 out of [0;32767] range"); 00131 break; 00132 00133 case ERROR_INT16_OUT_OF_RANGE: 00134 msg = tr("Integer value %0 out of [-32768;32767] range"); 00135 break; 00136 00137 case ERROR_PCONSTANT_OUT_OF_RANGE: 00138 msg = tr("Constant %0 has value %1, which is out of [0;32767] range"); 00139 break; 00140 00141 case ERROR_CONSTANT_OUT_OF_RANGE: 00142 msg = tr("Constant %0 has value %1, which is out of [-32768;32767] range"); 00143 break; 00144 00145 case ERROR_EXPECTING_ONE_OF: 00146 msg = tr("Expecting one of %0; but found %1 instead"); 00147 break; 00148 00149 case ERROR_NOT_ENOUGH_TEMP_SPACE: 00150 msg = tr("Not enough free space to allocate this tempory variable"); 00151 break; 00152 00153 case ERROR_MISPLACED_VARDEF: 00154 msg = tr("Variable definition is allowed only at the beginning of the program before any statement"); 00155 break; 00156 00157 case ERROR_EXPECTING_IDENTIFIER: 00158 msg = tr("Expecting identifier, found %0"); 00159 break; 00160 00161 case ERROR_VAR_ALREADY_DEFINED: 00162 msg = tr("Variable %0 is already defined"); 00163 break; 00164 00165 case ERROR_VAR_CONST_COLLISION: 00166 msg = tr("Variable %0 has the same name as a constant"); 00167 break; 00168 00169 case ERROR_UNDEFINED_SIZE: 00170 msg = tr("Array %0 has undefined size"); 00171 break; 00172 00173 case ERROR_NOT_ENOUGH_SPACE: 00174 msg = tr("No more free variable space"); 00175 break; 00176 00177 case ERROR_EXPECTING_ASSIGNMENT: 00178 msg = tr("Expecting assignment, found %0 instead"); 00179 break; 00180 00181 case ERROR_FOR_NULL_STEPS: 00182 msg = tr("Null steps are not allowed in for loops"); 00183 break; 00184 00185 case ERROR_FOR_START_HIGHER_THAN_END: 00186 msg = tr("Start index must be lower than end index in increasing loops"); 00187 break; 00188 00189 case ERROR_FOR_START_LOWER_THAN_END: 00190 msg = tr("Start index must be higher than end index in decreasing loops"); 00191 break; 00192 00193 case ERROR_EVENT_ALREADY_IMPL: 00194 msg = tr("Event %0 is already implemented"); 00195 break; 00196 00197 case ERROR_EVENT_WRONG_ARG_SIZE: 00198 msg = tr("Event %0 needs an array of size %1, but one of size %2 is passed"); 00199 break; 00200 00201 case ERROR_SUBROUTINE_ALREADY_DEF: 00202 msg = tr("Subroutine %0 is already defined"); 00203 break; 00204 00205 case ERROR_INDEX_EXPECTING_CONSTANT: 00206 msg = tr("Expecting a constant expression as a second index"); 00207 break; 00208 00209 case ERROR_INDEX_WRONG_END: 00210 msg = tr("End of range index must be lower or equal to start of range index"); 00211 break; 00212 00213 case ERROR_SIZE_IS_NEGATIVE: 00214 msg = tr("Array size: result is negative (%0)"); 00215 break; 00216 00217 case ERROR_SIZE_IS_NULL: 00218 msg = tr("Array size: result is null"); 00219 break; 00220 00221 case ERROR_NOT_CONST_EXPR: 00222 msg = tr("Not a valid constant expression"); 00223 break; 00224 00225 case ERROR_FUNCTION_HAS_NO_ARG: 00226 msg = tr("Function %0 requires no argument, some are used"); 00227 break; 00228 00229 case ERROR_FUNCTION_NO_ENOUGH_ARG: 00230 msg = tr("Function %0 requires %1 arguments, only %2 are provided"); 00231 break; 00232 00233 case ERROR_FUNCTION_WRONG_ARG_SIZE: 00234 msg = tr("Argument %0 (%1) of function %2 is of size %3, function definition demands size %4"); 00235 break; 00236 00237 case ERROR_FUNCTION_WRONG_ARG_SIZE_TEMPLATE: 00238 msg = tr("Argument %0 (%1) of function %2 is of size %3, while a previous instance of the template parameter was of size %4"); 00239 break; 00240 00241 case ERROR_FUNCTION_TOO_MANY_ARG: 00242 msg = tr("Function %0 requires %1 arguments, more are used"); 00243 break; 00244 00245 case ERROR_UNARY_ARITH_BUILD_UNEXPECTED: 00246 msg = tr("Unexpected token when building UnaryArithmeticAssignmentNode"); 00247 break; 00248 00249 case ERROR_INCORRECT_LEFT_VALUE: 00250 msg = tr("Expecting an assignment to a variable, found %0 instead"); 00251 break; 00252 00253 case ERROR_ARRAY_OUT_OF_BOUND: 00254 msg = tr("Access of array %0 out of bounds: accessing index %1 while array is of size %2"); 00255 break; 00256 00257 case ERROR_ARRAY_SIZE_MISMATCH: 00258 msg = tr("Size error! Size of array1 = %0 ; size of array2 = %1"); 00259 break; 00260 00261 case ERROR_IF_VECTOR_CONDITION: 00262 msg = tr("Condition of the if cannot be a vector"); 00263 break; 00264 00265 case ERROR_WHILE_VECTOR_CONDITION: 00266 msg = tr("Condition of the while cannot be a vector"); 00267 break; 00268 00269 case ERROR_ARRAY_ILLEGAL_ACCESS: 00270 msg = tr("MemoryVectorNode::getVectorSize: illegal operation"); 00271 break; 00272 00273 case ERROR_INFINITE_LOOP: 00274 msg = tr("Infinite loops not allowed"); 00275 break; 00276 00277 case ERROR_DIVISION_BY_ZERO: 00278 msg = tr("Division by zero"); 00279 break; 00280 00281 case ERROR_ABS_NOT_POSSIBLE: 00282 msg = tr("-32768 has no positive correspondance in 16 bits integers"); 00283 break; 00284 00285 case ERROR_ARRAY_OUT_OF_BOUND_READ: 00286 msg = tr("Out of bound static array access. Trying to read index %0 of array %1 of size %2"); 00287 break; 00288 00289 case ERROR_ARRAY_OUT_OF_BOUND_WRITE: 00290 msg = tr("Out of bound static array access. Trying to write index %0 of array %1 of size %2"); 00291 break; 00292 00293 case ERROR_EXPECTING_TYPE: 00294 msg = tr("Expecting %0 type, found %1 type instead"); 00295 break; 00296 00297 case ERROR_EXPECTING_CONDITION: 00298 msg = tr("Expecting a condition, found a %0 instead"); 00299 break; 00300 00301 case ERROR_TOKEN_END_OF_STREAM: 00302 msg = tr("end of stream"); 00303 break; 00304 00305 case ERROR_TOKEN_STR_when: 00306 msg = tr("when keyword"); 00307 break; 00308 00309 case ERROR_TOKEN_STR_emit: 00310 msg = tr("emit keyword"); 00311 break; 00312 00313 case ERROR_TOKEN_STR_for: 00314 msg = tr("for keyword"); 00315 break; 00316 00317 case ERROR_TOKEN_STR_in: 00318 msg = tr("in keyword"); 00319 break; 00320 00321 case ERROR_TOKEN_STR_step: 00322 msg = tr("step keyword"); 00323 break; 00324 00325 case ERROR_TOKEN_STR_while: 00326 msg = tr("while keyword"); 00327 break; 00328 00329 case ERROR_TOKEN_STR_do: 00330 msg = tr("do keyword"); 00331 break; 00332 00333 case ERROR_TOKEN_STR_if: 00334 msg = tr("if keyword"); 00335 break; 00336 00337 case ERROR_TOKEN_STR_then: 00338 msg = tr("then keyword"); 00339 break; 00340 00341 case ERROR_TOKEN_STR_else: 00342 msg = tr("else keyword"); 00343 break; 00344 00345 case ERROR_TOKEN_STR_elseif: 00346 msg = tr("elseif keyword"); 00347 break; 00348 00349 case ERROR_TOKEN_STR_end: 00350 msg = tr("end keyword"); 00351 break; 00352 00353 case ERROR_TOKEN_STR_var: 00354 msg = tr("var keyword"); 00355 break; 00356 00357 case ERROR_TOKEN_STR_call: 00358 msg = tr("call keyword"); 00359 break; 00360 00361 case ERROR_TOKEN_STR_sub: 00362 msg = tr("sub keyword"); 00363 break; 00364 00365 case ERROR_TOKEN_STR_callsub: 00366 msg = tr("callsub keyword"); 00367 break; 00368 00369 case ERROR_TOKEN_STR_onevent: 00370 msg = tr("onevent keyword"); 00371 break; 00372 00373 case ERROR_TOKEN_STR_abs: 00374 msg = tr("abs keyword"); 00375 break; 00376 00377 case ERROR_TOKEN_STR_return: 00378 msg = tr("return keyword"); 00379 break; 00380 00381 case ERROR_TOKEN_STRING_LITERAL: 00382 msg = tr("string"); 00383 break; 00384 00385 case ERROR_TOKEN_INT_LITERAL: 00386 msg = tr("integer"); 00387 break; 00388 00389 case ERROR_TOKEN_PAR_OPEN: 00390 msg = tr("( (open parenthesis)"); 00391 break; 00392 00393 case ERROR_TOKEN_PAR_CLOSE: 00394 msg = tr(") (close parenthesis)"); 00395 break; 00396 00397 case ERROR_TOKEN_BRACKET_OPEN: 00398 msg = tr("[ (open bracket)"); 00399 break; 00400 00401 case ERROR_TOKEN_BRACKET_CLOSE: 00402 msg = tr("] (close bracket)"); 00403 break; 00404 00405 case ERROR_TOKEN_COLON: 00406 msg = tr(": (colon)"); 00407 break; 00408 00409 case ERROR_TOKEN_COMMA: 00410 msg = tr(", (comma)"); 00411 break; 00412 00413 case ERROR_TOKEN_ASSIGN: 00414 msg = tr("= (assignation)"); 00415 break; 00416 00417 case ERROR_TOKEN_OP_OR: 00418 msg = tr("or"); 00419 break; 00420 00421 case ERROR_TOKEN_OP_AND: 00422 msg = tr("and"); 00423 break; 00424 00425 case ERROR_TOKEN_OP_NOT: 00426 msg = tr("not"); 00427 break; 00428 00429 case ERROR_TOKEN_OP_BIT_OR: 00430 msg = tr("binary or"); 00431 break; 00432 00433 case ERROR_TOKEN_OP_BIT_XOR: 00434 msg = tr("binary xor"); 00435 break; 00436 00437 case ERROR_TOKEN_OP_BIT_AND: 00438 msg = tr("binary and"); 00439 break; 00440 00441 case ERROR_TOKEN_OP_BIT_NOT: 00442 msg = tr("binary not"); 00443 break; 00444 00445 case ERROR_TOKEN_OP_BIT_OR_EQUAL: 00446 msg = tr("binary or equal"); 00447 break; 00448 00449 case ERROR_TOKEN_OP_BIT_XOR_EQUAL: 00450 msg = tr("binary xor equal"); 00451 break; 00452 00453 case ERROR_TOKEN_OP_BIT_AND_EQUAL: 00454 msg = tr("binary and equal"); 00455 break; 00456 00457 case ERROR_TOKEN_OP_EQUAL: 00458 msg = tr("== (equal to)"); 00459 break; 00460 00461 case ERROR_TOKEN_OP_NOT_EQUAL: 00462 msg = tr("!= (not equal to)"); 00463 break; 00464 00465 case ERROR_TOKEN_OP_BIGGER: 00466 msg = tr("> (bigger than)"); 00467 break; 00468 00469 case ERROR_TOKEN_OP_BIGGER_EQUAL: 00470 msg = tr(">= (bigger or equal than)"); 00471 break; 00472 00473 case ERROR_TOKEN_OP_SMALLER: 00474 msg = tr("< (smaller than)"); 00475 break; 00476 00477 case ERROR_TOKEN_OP_SMALLER_EQUAL: 00478 msg = tr("<= (smaller or equal than)"); 00479 break; 00480 00481 case ERROR_TOKEN_OP_SHIFT_LEFT: 00482 msg = tr("<< (shift left)"); 00483 break; 00484 00485 case ERROR_TOKEN_OP_SHIFT_RIGHT: 00486 msg = tr(">> (shift right)"); 00487 break; 00488 00489 case ERROR_TOKEN_OP_SHIFT_LEFT_EQUAL: 00490 msg = tr("<<= (shift left equal)"); 00491 break; 00492 00493 case ERROR_TOKEN_OP_SHIFT_RIGHT_EQUAL: 00494 msg = tr(">>= (shift right equal)"); 00495 break; 00496 00497 case ERROR_TOKEN_OP_ADD: 00498 msg = tr("+ (plus)"); 00499 break; 00500 00501 case ERROR_TOKEN_OP_NEG: 00502 msg = tr("- (minus)"); 00503 break; 00504 00505 case ERROR_TOKEN_OP_ADD_EQUAL: 00506 msg = tr("+= (plus equal)"); 00507 break; 00508 00509 case ERROR_TOKEN_OP_NEG_EQUAL: 00510 msg = tr("-= (minus equal)"); 00511 break; 00512 00513 case ERROR_TOKEN_OP_PLUS_PLUS: 00514 msg = tr("++ (plus plus)"); 00515 break; 00516 00517 case ERROR_TOKEN_OP_MINUS_MINUS: 00518 msg = tr("-- (minus minus)"); 00519 break; 00520 00521 case ERROR_TOKEN_OP_MULT: 00522 msg = tr("* (time)"); 00523 break; 00524 00525 case ERROR_TOKEN_OP_DIV: 00526 msg = tr("/ (divide)"); 00527 break; 00528 00529 case ERROR_TOKEN_OP_MOD: 00530 msg = tr("modulo"); 00531 break; 00532 00533 case ERROR_TOKEN_OP_MULT_EQUAL: 00534 msg = tr("*= (time equal)"); 00535 break; 00536 00537 case ERROR_TOKEN_OP_DIV_EQUAL: 00538 msg = tr("/= (divide equal)"); 00539 break; 00540 00541 case ERROR_TOKEN_OP_MOD_EQUAL: 00542 msg = tr("modulo equal"); 00543 break; 00544 00545 case ERROR_TOKEN_UNKNOWN: 00546 msg = tr("unknown"); 00547 break; 00548 00549 case ERROR_UNKNOWN_ERROR: 00550 msg = tr("Unknown error"); 00551 break; 00552 00553 default: 00554 msg = tr("Unknown error"); 00555 } 00556 00557 return msg.toStdWString(); 00558 } 00559 };