/** * To extract the argument of address * * Input: * String the whole argument * * Return the value of the address * Throw if value is invalid */ int extractValue(String *arguments){ char *returnChar; int returnInt; String *string; stringTrimLeft(arguments); if(stringCharAt(arguments,0) == ',') stringRemoveChar(arguments); if(stringCharAt(arguments,0) == ';' || stringLength(arguments) == 0) Throw(ERR_NO_ARGUMENT); string = stringRemoveWordNotContaining(arguments,",;"); stringTrim(string); if(stringLength(string) == 0) Throw(ERR_EMPTY_ARGUMENT); returnChar = stringSubstringInChar(string,0,string->length); returnInt = evaluate(returnChar); free(string); return returnInt; } //pass to jason
/** * To extract the argument of access or banked * * Input: * String the whole argument * * Return the value of access/banked * Throw if value is invalid */ int extractAccessBanked(String *arguments){ char location; char *returnChar; int returnInt; String *string; String *banked = stringNew(textNew("BANKED")); //1 String *access = stringNew(textNew("ACCESS")); //0 if(stringCharAt(arguments,0) == ',') stringRemoveChar(arguments); if(stringLength(arguments) == 0 ||stringCharAt(arguments,0) == ';') Throw(ERR_NO_ARGUMENT); stringTrimLeft(arguments); if(stringLength(arguments) == 0 ||stringCharAt(arguments,0) == ';') Throw(ERR_EMPTY_ARGUMENT); string = stringRemoveWordNotContaining(arguments,",;"); stringTrim(string); if(stringLength(string) == 0){ if(stringCharAt(arguments,0) == ',') stringRemoveChar(arguments); Throw(ERR_EMPTY_ARGUMENT); } else if(stringLength(string) == 6){ if(stringIsEqual(string,banked)) returnInt = 1; else if(stringIsEqual(string,access)) returnInt = 0; else{ returnChar = stringSubstringInChar(string,0,string->length); returnInt = evaluate(returnChar); } } else{ returnChar = stringSubstringInChar(string,0,string->length); returnInt = evaluate(returnChar); } if(stringCharAt(arguments,0) == ',') stringRemoveChar(arguments); free(string); return returnInt; }
/** * To extract the argument of location to save * * Input: * String the whole argument * * Return the value of the location * Throw if value is invalid */ int extractDestination(String *arguments){ char location; char *returnChar; int returnInt; String *string; if(stringCharAt(arguments,0) == ',') stringRemoveChar(arguments); if(stringLength(arguments) == 0 ||stringCharAt(arguments,0) == ';') Throw(ERR_NO_ARGUMENT); stringTrimLeft(arguments); if(stringLength(arguments) == 0 || stringCharAt(arguments,0)== ';') Throw(ERR_EMPTY_ARGUMENT); string = stringRemoveWordNotContaining(arguments,",;"); stringTrim(string); if(stringLength(string) == 0){ if(stringCharAt(arguments,0) == ',') stringRemoveChar(arguments); Throw(ERR_EMPTY_ARGUMENT); } else if(stringLength(string) == 1){ location = stringCharAt(string,0); if(location == 'F') returnInt = 1; else if(location == 'W') returnInt = 0; else{ returnChar = stringSubstringInChar(string,0,string->length); returnInt = evaluate(returnChar); } } else{ returnChar = stringSubstringInChar(string,0,string->length); returnInt = evaluate(returnChar); } free(string); return returnInt; }//if f, return 1, w is 0
void test_stringCharAt_should_return_negative_1_negative_input_static(void) { Text *text = t"ChiewWingGum"; String *string = stringNew(text); TEST_ASSERT_EQUAL(-1,stringCharAt(string,-1)); }
void test_stringCharAt_should_return_negative_1_over_string_length_static(void) { Text *text = t"TanSooFatt"; String *string = stringNew(text); TEST_ASSERT_EQUAL(-1,stringCharAt(string,15)); }
void test_stringCharAt_should_return_index_static(void) { Text *text = t"PoonJiyeon"; String *string = stringNew(text); TEST_ASSERT_EQUAL('J',stringCharAt(string,4)); }
void test_stringCharAt_should_return_index(void) { Text *text = textNew("Poon Jiyeon"); String *string = stringNew(text); TEST_ASSERT_EQUAL(' ',stringCharAt(string,4)); }
/** * Return the one token from the String. The String is updated. * If the string is empty, NULL is return. * * Input: * str is the String object * * Possible returned token: * Number, Operator, and Identifier tokens */ Token *getToken(String *str) { //1 trim left //2 check first character // a -if a number then extract the number string // -convert into integer // -create number token // b -if alphabetSet then extract the identifier // -create identifier token // c -if operator set then extract operator symbol // -create operator token char charReturn[3]; Token *tokenReturn = NULL; String *strReturn = NULL; Number *number = NULL; Identifier *identifier = NULL; Operator *operator = NULL; stringTrimLeft(str); if(stringLength(str) == 0) return NULL; //Number if(stringIsCharAtInSet(str,0,numberSet)){ strReturn = stringRemoveWordContaining(str,numberSet); if(stringIsCharAtInSet(str,0,alphabetSet)){ Throw(ERR_NUMBER_NOT_WELL_FORMED); } else{ number = numberNew(stringToInteger(strReturn)); tokenReturn = (Token *)number; stringDel(strReturn); } } //Identifier else if(stringIsCharAtInSet(str,0,alphabetSet)){ strReturn = stringRemoveWordContaining(str,alphaNumericSet); identifier = identifierNew(stringSubstringInText(strReturn,0,strReturn->length)); tokenReturn = (Token *)identifier; stringDel(strReturn); } //Operator else if(stringIsCharAtInSet(str,0,operatorSet)){ charReturn[0] = (char )stringRemoveChar(str); charReturn[1] = 0; if(stringCharAt(str,0) == charReturn[0] && stringLength(str) != 0){ if(charReturn[0] == '&'){ charReturn[0] = '&'; charReturn[1] = '&'; charReturn[2] = 0; str->start++; str->length--; } else if(charReturn[0] == '|'){ charReturn[0] = '|'; charReturn[1] = '|'; charReturn[2] = 0; str->start++; str->length--; } } operator = operatorNewBySymbol(charReturn); tokenReturn = (Token *)operator; } else Throw(ERR_ILLEGAL_ARGUMENT); return tokenReturn; }