long expression0() { long result = expression1(); while (peek() == '+' || peek() == '-') if (get() == '+') result += expression1(); else result -= expression1(); return result; }
Astnode *expression() { Astnode *tnode = term(); Astnode *e1node = expression1(); return create_node(OP_ADD, tnode, e1node); }
Astnode *expression1() { Astnode *tnode; Astnode *e1node; switch (g_token.type) { case ADD: next_token(); tnode = term(); e1node = expression1(); return create_node(OP_ADD, e1node, tnode); case SUB: next_token(); tnode = term(); e1node = expression1(); return create_node(OP_SUB, e1node, tnode); } return create_numbernode(0); }
void TestWriteVectorOfRegexWithIndex(void) { // Marshal a vector of SCXRegexWithIndex structures stringstream stream; SCXCoreLib::Marshal msobj(stream); vector<SCXCoreLib::SCXRegexWithIndex> vri; SCXCoreLib::SCXRegexWithIndex ri1; std::wstring expression1(L"abc"); ri1.index = 1; ri1.regex = new SCXCoreLib::SCXRegex(expression1); SCXCoreLib::SCXRegexWithIndex ri2; std::wstring expression2(L"def"); ri2.index = 2; ri2.regex = new SCXCoreLib::SCXRegex(expression2); vri.push_back(ri1); vri.push_back(ri2); msobj.Write(vri); // UnMarshal and verify that it's correct SCXCoreLib::UnMarshal unobj(stream); vector<SCXCoreLib::SCXRegexWithIndex> vri2; unobj.Read(vri2); CPPUNIT_ASSERT_EQUAL(vri.size(), vri2.size()); for(int ii = 0; ii < (int) vri.size(); ii++) { CPPUNIT_ASSERT_EQUAL(vri[ii].index, vri2[ii].index); CPPUNIT_ASSERT(vri[ii].regex->Get() == vri2[ii].regex->Get()); } // Assure that the received regular expressions are actually correct CPPUNIT_ASSERT_EQUAL(std::string("abc"), SCXCoreLib::StrToUTF8(vri2[0].regex->Get())); CPPUNIT_ASSERT_EQUAL(std::string("def"), SCXCoreLib::StrToUTF8(vri2[1].regex->Get())); }
int expression(void) { return i*expression1(); }