TreeNode* Parser::Term() { TreeNode* termNode = signedFactor(); TreeNode* pos = termNode; TreeNode* left = NULL; TreeNode* right = NULL; while ( (currentToken.type == tokMul) || (currentToken.type == tokDev) || (currentToken.type == tokAnd) ) { // while is is a multiplicative operator do... left = pos; pos = new TreeNode(currentToken, Unknown); pos->appendChild(left); switch (currentToken.type) { case tokMul: matchToken(tokMul); right = signedFactor(); pos->setType(mulNode); break; case tokDev: matchToken(tokDev); right = signedFactor(); pos->setType(divNode); break; case tokAnd: matchToken(tokAnd); right = signedFactor(); pos->setType(andNode); break; default: Error(currentToken, i18n("Expected '*' or '/'"), 1030); getToken(); return pos; break; } if (right != NULL) pos->appendChild(right); termNode = pos; } return termNode; }
void Parser::term() { signedFactor(); while (input.getChar() == '*' || input.getChar() == '/') { output.emitLine("MOVE D0,(SP)-"); switch (input.getChar()) { case '*': multiply(); break; case '/': divide(); break; } } }