1 #include "mpParserMessageProvider.h" 2 #include <cassert> 3 #include "mpError.h" 4 5 6 MUP_NAMESPACE_START 7 8 //------------------------------------------------------------------------------------------------- 9 // 10 // class ParserMessageProviderBase - Base class for message providers 11 // 12 //------------------------------------------------------------------------------------------------- 13 ParserMessageProviderBase()14 ParserMessageProviderBase::ParserMessageProviderBase() 15 :m_vErrMsg(0) 16 {} 17 18 //----------------------------------------------------------------------------------------------- ~ParserMessageProviderBase()19 ParserMessageProviderBase::~ParserMessageProviderBase() 20 {} 21 22 //----------------------------------------------------------------------------------------------- Init()23 void ParserMessageProviderBase::Init() 24 { 25 InitErrorMessages(); 26 for (int i=0; i<ecCOUNT; ++i) 27 { 28 if (!m_vErrMsg[i].length()) 29 throw std::runtime_error("Incomplete translation (at least one error code missing)"); 30 } 31 } 32 33 //--------------------------------------------------------------------------------------------- GetErrorMsg(EErrorCodes eError) const34 string_type ParserMessageProviderBase::GetErrorMsg(EErrorCodes eError) const 35 { 36 int nError = (int)eError; 37 return (nError<(int)m_vErrMsg.size()) ? m_vErrMsg[nError] : string_type(); 38 } 39 40 //----------------------------------------------------------------------------------------------- 41 // 42 // class ParserMessageProviderEnglish - English Parser Messages (default) 43 // 44 //----------------------------------------------------------------------------------------------- 45 ParserMessageProviderEnglish()46 ParserMessageProviderEnglish::ParserMessageProviderEnglish() 47 :ParserMessageProviderBase() 48 {} 49 50 //----------------------------------------------------------------------------------------------- InitErrorMessages()51 void ParserMessageProviderEnglish::InitErrorMessages() 52 { 53 m_vErrMsg.resize(ecCOUNT); 54 55 m_vErrMsg[ecUNASSIGNABLE_TOKEN] = _T("Undefined token \"$IDENT$\" found at position $POS$."); 56 m_vErrMsg[ecINTERNAL_ERROR] = _T("Internal error."); 57 m_vErrMsg[ecUNKNOWN_ESCAPE_SEQUENCE] = _T("Unknown escape sequence."); 58 m_vErrMsg[ecINVALID_NAME] = _T("Invalid function, variable or constant name."); 59 m_vErrMsg[ecINVALID_FUN_PTR] = _T("Invalid pointer to callback function."); 60 m_vErrMsg[ecINVALID_VAR_PTR] = _T("Invalid pointer to variable."); 61 m_vErrMsg[ecUNEXPECTED_OPERATOR] = _T("Unexpected operator \"$IDENT$\" found at position $POS$."); 62 m_vErrMsg[ecUNEXPECTED_EOF] = _T("Unexpected end of expression found at position $POS$."); 63 m_vErrMsg[ecUNEXPECTED_COMMA] = _T("Unexpected comma found at position $POS$."); 64 m_vErrMsg[ecUNEXPECTED_PARENS] = _T("Unexpected parenthesis \"$IDENT$\" found at position $POS$."); 65 m_vErrMsg[ecUNEXPECTED_FUN] = _T("Unexpected function \"$IDENT$\" found at position $POS$."); 66 m_vErrMsg[ecUNEXPECTED_VAL] = _T("Unexpected value \"$IDENT$\" found at position $POS$."); 67 m_vErrMsg[ecUNEXPECTED_VAR] = _T("Unexpected variable \"$IDENT$\" found at position $POS$."); 68 m_vErrMsg[ecUNEXPECTED_STR] = _T("Unexpected string token found at position $POS$."); 69 m_vErrMsg[ecUNEXPECTED_CONDITIONAL] = _T("The \"$IDENT$\" operator must be preceded by a closing bracket."); 70 m_vErrMsg[ecUNEXPECTED_NEWLINE] = _T("Unexprected newline."); 71 m_vErrMsg[ecMISSING_PARENS] = _T("Missing parenthesis."); 72 m_vErrMsg[ecMISSING_ELSE_CLAUSE] = _T("If-then-else operator is missing an else clause."); 73 m_vErrMsg[ecMISPLACED_COLON] = _T("Misplaced colon at position $POS$."); 74 m_vErrMsg[ecTOO_MANY_PARAMS] = _T("Too many parameters passed to function \"$IDENT$\"."); 75 m_vErrMsg[ecTOO_FEW_PARAMS] = _T("Too few parameters passed to function \"$IDENT$\"."); 76 m_vErrMsg[ecDIV_BY_ZERO] = _T("Division by zero occurred."); 77 m_vErrMsg[ecDOMAIN_ERROR] = _T("The value passed as argument to function/operator \"$IDENT$\" is not part of its domain."); 78 m_vErrMsg[ecNAME_CONFLICT] = _T("Name conflict."); 79 m_vErrMsg[ecOPT_PRI] = _T("Invalid value for operator priority (must be greater or equal to zero)."); 80 m_vErrMsg[ecBUILTIN_OVERLOAD] = _T("Binary operator identifier conflicts with a built in operator."); 81 m_vErrMsg[ecUNTERMINATED_STRING] = _T("Unterminated string starting at position $POS$."); 82 m_vErrMsg[ecSTRING_EXPECTED] = _T("String function called with a non string type of argument."); 83 m_vErrMsg[ecVAL_EXPECTED] = _T("Numerical function called with a non value type of argument."); 84 m_vErrMsg[ecTYPE_CONFLICT] = _T("Value \"$IDENT$\" is of type '$TYPE1$'. There is no implicit conversion to type '$TYPE2$'."); 85 m_vErrMsg[ecTYPE_CONFLICT_FUN] = _T("Argument $ARG$ of function/operator \"$IDENT$\" is of type '$TYPE1$' whereas type '$TYPE2$' was expected."); 86 m_vErrMsg[ecTYPE_CONFLICT_IDX] = _T("Index to \"$IDENT$\" must be a positive integer value. '$TYPE1$' is not an acceptable type."); 87 m_vErrMsg[ecGENERIC] = _T("Parser error."); 88 m_vErrMsg[ecINVALID_TYPE] = _T("Invalid argument type."); 89 m_vErrMsg[ecINVALID_TYPECAST] = _T("Value type conversion from type '$TYPE1$' to '$TYPE2$' is not supported!"); 90 m_vErrMsg[ecARRAY_SIZE_MISMATCH] = _T("Array size mismatch."); 91 m_vErrMsg[ecNOT_AN_ARRAY] = _T("Using the index operator on the scalar variable \"$IDENT$\" is not allowed."); 92 m_vErrMsg[ecUNEXPECTED_SQR_BRACKET] = _T("Unexpected \"[]\"."); 93 m_vErrMsg[ecUNEXPECTED_CURLY_BRACKET] = _T("Unexpected \"{}\"."); 94 m_vErrMsg[ecINDEX_OUT_OF_BOUNDS] = _T("Index to variable \"$IDENT$\" is out of bounds."); 95 m_vErrMsg[ecINDEX_DIMENSION] = _T("Index operator dimension error."); 96 m_vErrMsg[ecMISSING_SQR_BRACKET] = _T("Missing \"]\"."); 97 m_vErrMsg[ecMISSING_CURLY_BRACKET] = _T("Missing \"}\"."); 98 m_vErrMsg[ecASSIGNEMENT_TO_VALUE] = _T("Assignment operator \"$IDENT$\" can't be used in this context."); 99 m_vErrMsg[ecEVAL] = _T("Can't evaluate function/operator \"$IDENT$\": $HINT$"); 100 m_vErrMsg[ecINVALID_PARAMETER] = _T("Parameter $ARG$ of function \"$IDENT$\" is invalid."); 101 m_vErrMsg[ecINVALID_NUMBER_OF_PARAMETERS] = _T("Invalid number of function arguments."); 102 m_vErrMsg[ecOVERFLOW] = _T("Possible arithmetic overflow occurred in function/operator \"$IDENT$\"."); 103 m_vErrMsg[ecMATRIX_DIMENSION_MISMATCH] = _T("Matrix dimension error."); 104 m_vErrMsg[ecVARIABLE_DEFINED] = _T("Variable \"$IDENT$\" is already defined."); 105 m_vErrMsg[ecCONSTANT_DEFINED] = _T("Constant \"$IDENT$\" is already defined."); 106 m_vErrMsg[ecFUNOPRT_DEFINED] = _T("Function/operator \"$IDENT$\" is already defined."); 107 } 108 109 #if defined(_UNICODE) 110 111 //------------------------------------------------------------------------------------------------- 112 // 113 // class ParserMessageProviderGerman - German translations of Parser Messages 114 // 115 //------------------------------------------------------------------------------------------------- 116 ParserMessageProviderGerman()117 ParserMessageProviderGerman::ParserMessageProviderGerman() 118 :ParserMessageProviderBase() 119 {} 120 121 //----------------------------------------------------------------------------------------------- InitErrorMessages()122 void ParserMessageProviderGerman::InitErrorMessages() 123 { 124 m_vErrMsg.resize(ecCOUNT); 125 126 m_vErrMsg[ecUNASSIGNABLE_TOKEN] = _T("Unbekanntes Token \"$IDENT$\" an Position $POS$ gefunden."); 127 m_vErrMsg[ecINTERNAL_ERROR] = _T("Interner Fehler."); 128 m_vErrMsg[ecUNKNOWN_ESCAPE_SEQUENCE] = _T("Unbekannte Escape-Sequenz."); 129 m_vErrMsg[ecINVALID_NAME] = _T("Ungültiger Funktions-, Variablen- oder Konstantenbezeichner."); 130 m_vErrMsg[ecINVALID_FUN_PTR] = _T("Ungültiger Zeiger auf eine Callback-Funktion."); 131 m_vErrMsg[ecINVALID_VAR_PTR] = _T("Ungültiger Variablenzeiger."); 132 m_vErrMsg[ecUNEXPECTED_OPERATOR] = _T("Unerwarteter Operator \"$IDENT$\" an Position $POS$."); 133 m_vErrMsg[ecUNEXPECTED_EOF] = _T("Unerwartetes Formelende an Position $POS$."); 134 m_vErrMsg[ecUNEXPECTED_COMMA] = _T("Unerwartetes Komma an Position $POS$."); 135 m_vErrMsg[ecUNEXPECTED_PARENS ] = _T("Unerwartete Klammer \"$IDENT$\" an Position $POS$ gefunden."); 136 m_vErrMsg[ecUNEXPECTED_FUN] = _T("Unerwartete Funktion \"$IDENT$\" an Position $POS$ gefunden."); 137 m_vErrMsg[ecUNEXPECTED_VAL] = _T("Unerwarteter Wert \"$IDENT$\" an Position $POS$ gefunden."); 138 m_vErrMsg[ecUNEXPECTED_VAR] = _T("Unerwartete Variable \"$IDENT$\" an Position $POS$ gefunden."); 139 m_vErrMsg[ecUNEXPECTED_STR] = _T("Unerwarteter Text an Position $POS$ gefunden."); 140 m_vErrMsg[ecUNEXPECTED_CONDITIONAL] = _T("Der Operator \"$IDENT$\" muss stets auf eine schließenden Klammer folgen."); 141 m_vErrMsg[ecUNEXPECTED_NEWLINE] = _T("Unerwarteter Zeilenumbruch."); 142 m_vErrMsg[ecMISSING_PARENS] = _T("Fehlende Klammer."); 143 m_vErrMsg[ecMISSING_ELSE_CLAUSE] = _T("\"If-then-else\" Operator ohne \"else\" Zweig verwendet."); 144 m_vErrMsg[ecMISPLACED_COLON] = _T("Komma an unerwarteter Position $POS$ gefunden."); 145 m_vErrMsg[ecTOO_MANY_PARAMS] = _T("Der Funktion \"$IDENT$\" wurden zu viele Argumente übergeben."); 146 m_vErrMsg[ecTOO_FEW_PARAMS] = _T("Der Funktion \"$IDENT$\" wurden nicht genug Argumente übergeben."); 147 m_vErrMsg[ecDIV_BY_ZERO] = _T("Division durch Null."); 148 m_vErrMsg[ecDOMAIN_ERROR] = _T("Der Parameter der Funktion \"$IDENT$\" hat einen Wert, der nicht Teil des Definitionsbereiches der Funktion ist."); 149 m_vErrMsg[ecNAME_CONFLICT] = _T("Namenskonflikt"); 150 m_vErrMsg[ecOPT_PRI] = _T("Ungültige Operatorpriorität (muss größer oder gleich Null sein)."); 151 m_vErrMsg[ecBUILTIN_OVERLOAD] = _T("Die Überladung für diesen Binäroperator steht im Widerspruch zu intern vorhanden operatoren."); 152 m_vErrMsg[ecUNTERMINATED_STRING] = _T("Die Zeichenkette an Position $POS$ wird nicht beendet."); 153 m_vErrMsg[ecSTRING_EXPECTED] = _T("Es wurde eine Zeichenkette als Funktionseingabewert erwartet."); 154 m_vErrMsg[ecVAL_EXPECTED] = _T("Numerische Funktionen können nicht mit nichtnumerischen Parametern aufgerufen werden."); 155 m_vErrMsg[ecTYPE_CONFLICT] = _T("Der Wert \"$IDENT$\" ist vom Typ '$TYPE1$' und es gibt keine passende Typkonversion in den erwarteten Typ '$TYPE2$'."); 156 m_vErrMsg[ecTYPE_CONFLICT_FUN] = _T("Das Argument $ARG$ der Funktion oder des Operators \"$IDENT$\" ist vom Typ '$TYPE1$', erwartet wurde Typ '$TYPE2$'."); 157 m_vErrMsg[ecTYPE_CONFLICT_IDX] = _T("Der Index der Variable \"$IDENT$\" muss ein positiver Ganzzahlwert sein. Der übergebene Indexwert ist vom Typ '$TYPE1$'."); 158 m_vErrMsg[ecGENERIC] = _T("Allgemeiner Parser Fehler."); 159 m_vErrMsg[ecINVALID_TYPE] = _T("Ungültiger Funktionsargumenttyp."); 160 m_vErrMsg[ecINVALID_TYPECAST] = _T("Umwandlungen vom Typ '$TYPE1$' in den Typ '$TYPE2$' werden nicht unterstützt!"); 161 m_vErrMsg[ecARRAY_SIZE_MISMATCH] = _T("Feldgrößen stimmen nicht überein."); 162 m_vErrMsg[ecNOT_AN_ARRAY] = _T("Der Indexoperator kann nicht auf die Skalarvariable \"$IDENT$\" angewandt werden."); 163 m_vErrMsg[ecUNEXPECTED_SQR_BRACKET] = _T("Eckige Klammern sind an dieser Position nicht erlaubt."); 164 m_vErrMsg[ecUNEXPECTED_CURLY_BRACKET] = _T("Geschweifte Klammern sind an dieser Position nicht erlaubt."); 165 m_vErrMsg[ecINDEX_OUT_OF_BOUNDS] = _T("Indexüberschreitung bei Variablenzugriff auf \"$IDENT$\"."); 166 m_vErrMsg[ecINDEX_DIMENSION] = _T("Die Operation kann nicht auf Felder angewandt werden, deren Größe unterschiedlich ist."); 167 m_vErrMsg[ecMISSING_SQR_BRACKET] = _T("Fehlendes \"]\"."); 168 m_vErrMsg[ecMISSING_CURLY_BRACKET] = _T("Fehlendes \"}\"."); 169 m_vErrMsg[ecASSIGNEMENT_TO_VALUE] = _T("Der Zuweisungsoperator \"$IDENT$\" kann in diesem Zusammenhang nicht verwendet werden."); 170 m_vErrMsg[ecEVAL] = _T("Die Funktion bzw. der Operator \"$IDENT$\" kann nicht berechnet werden: $HINT$"); 171 m_vErrMsg[ecINVALID_PARAMETER] = _T("Der Parameter $ARG$ der Funktion \"$IDENT$\" is ungültig."); 172 m_vErrMsg[ecINVALID_NUMBER_OF_PARAMETERS] = _T("Unzulässige Zahl an Funktionsparametern."); 173 m_vErrMsg[ecOVERFLOW] = _T("Ein arithmetische Überlauf wurde in Funktion/Operator \"$IDENT$\" entdeckt."); 174 m_vErrMsg[ecMATRIX_DIMENSION_MISMATCH] = _T("Matrixdimensionen stimmen nicht überein, Operation \"$IDENT$\" kann nicht ausgeführt werden."); 175 m_vErrMsg[ecVARIABLE_DEFINED] = _T("Die Variable \"$IDENT$\" is bereits definiert."); 176 m_vErrMsg[ecCONSTANT_DEFINED] = _T("Die Konstante \"$IDENT$\" is bereits definiert."); 177 m_vErrMsg[ecFUNOPRT_DEFINED] = _T("Ein Element mit der Bezeichnung \"$IDENT$\" ist bereits definiert."); 178 } 179 #endif // _UNICODE 180 181 MUP_NAMESPACE_END 182