本文整理汇总了C++中compileExpression函数的典型用法代码示例。如果您正苦于以下问题:C++ compileExpression函数的具体用法?C++ compileExpression怎么用?C++ compileExpression使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了compileExpression函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: compileCondition
void compileCondition(void) {
// DONE: check the type consistency of LHS and RSH, check the basic type
Type* type1;
Type* type2;
type1 = compileExpression();
checkBasicType(type1);
switch (lookAhead->tokenType) {
case SB_EQ:
eat(SB_EQ);
break;
case SB_NEQ:
eat(SB_NEQ);
break;
case SB_LE:
eat(SB_LE);
break;
case SB_LT:
eat(SB_LT);
break;
case SB_GE:
eat(SB_GE);
break;
case SB_GT:
eat(SB_GT);
break;
default:
error(ERR_INVALID_COMPARATOR, lookAhead->lineNo, lookAhead->colNo);
}
type2 = compileExpression();
checkTypeEquality(type1,type2);
}
示例2: printNonterminal
void CompilationEng::compileExpressionList()
{
printNonterminal("expressionList");
numOfTab++;
compileExpression();
while(true)
{
getToken();
if(m_token == ",")
{
printCurrentToken(false);
compileExpression();
}
else if(m_token == ")")
{
m_bPutback = true;
break;
}
else
{
m_ofs << m_token << endl;
break;
}
}
numOfTab--;
printNonterminal("expressionList",false);
}
示例3: tagNonTerminal
void CompilationEngine::compileLet()
{
/*'let' varName('[' expression ']')? '=' expression ';' */
tagNonTerminal("letStatement");
readKeyword("let", Keyword::kLET);
nextToken();
readIdentifier();
nextToken();
if (jt.tokenType() == TokenType::kSYMBOL && jt.symbol() == '[') {
readSymbol('[');
nextToken();
compileExpression();
readSymbol(']');
nextToken();
}
readSymbol('=');
nextToken();
compileExpression();
readSymbol(';');
untagNonTerminal("letStatement");
nextToken();
}
示例4: compileCondition
void compileCondition(void) {
Type* type1;
Type* type2;
TokenType op;
type1 = compileExpression();
checkBasicType(type1);
op = lookAhead->tokenType;
switch (op) {
case SB_EQ:
eat(SB_EQ);
break;
case SB_NEQ:
eat(SB_NEQ);
break;
case SB_LE:
eat(SB_LE);
break;
case SB_LT:
eat(SB_LT);
break;
case SB_GE:
eat(SB_GE);
break;
case SB_GT:
eat(SB_GT);
break;
default:
error(ERR_INVALID_COMPARATOR, lookAhead->lineNo, lookAhead->colNo);
}
type2 = compileExpression();
checkTypeEquality(type1,type2);
}
示例5: compileDoWhileSt
void compileDoWhileSt(void) {
assert("Parsing a do..while statement ....");
// TODO
eat(KW_DO);
compileStatement();
eat(KW_WHILE);
compileCondition();
assert("Do..While statement parsed ....");
void compileForSt(void) {
Type* varType;
Type *type;
eat(KW_FOR);
varType = compileLValue();
eat(SB_ASSIGN);
type = compileExpression();
checkTypeEquality(varType, type);
eat(KW_TO);
type = compileExpression();
checkTypeEquality(varType, type);
eat(KW_DO);
compileStatement();
}
示例6: compileForSt
void compileForSt(void) {
eat(KW_FOR);
eat(TK_IDENT);
eat(SB_ASSIGN);
compileExpression();
eat(KW_TO);
compileExpression();
eat(KW_DO);
compileStatement();
}
示例7: compileForSt
void compileForSt(void) {
assert("Parsing a for statement ....");
eat(KW_FOR);
eat(TK_IDENT);
eat(SB_ASSIGN);
compileExpression();
eat(KW_TO);
compileExpression();
eat(KW_DO);
compileStatement();
assert("For statement parsed ....");
}
示例8: debug
Value* IRCompiler::compileAddition(KT_Addition *add) {
debug("compiling a KT_Addition");
Value* vl = compileExpression(add->getLExpression());
Value* vg = compileExpression(add->getRExpression());
vl = BasicInstructionGenerator::stripVal(vl, getCurrentBlock());
vg = BasicInstructionGenerator::stripVal(vg, getCurrentBlock());
Type *t = PrimitiveValueConverter::dominatingType(vl->getType(), vg->getType());
return PrimitiveBinaryOperationGenerator::createAdd(getModule(), t, vl, vg, getCurrentBlock());
}
示例9: compileForSt
void compileForSt(void) {
eat(KW_FOR);
eat(TK_IDENT);
// TODO: check if the identifier is a variable
eat(SB_ASSIGN);
compileExpression();
eat(KW_TO);
compileExpression();
eat(KW_DO);
compileStatement();
}
示例10: compileIndexes
Type* compileIndexes(Type* arrayType) {
// parse a sequence of indexes, check the consistency to the arrayType, and return the element type
Type *idxType = NULL;
Type *elmType = NULL;
while (lookAhead->tokenType == SB_LSEL) {
eat(SB_LSEL);
// if current element is not of array type,
// then the access to the next dimension is invalid
checkArrayType(arrayType);
idxType = compileExpression();
checkIntType(idxType);
eat(SB_RSEL);
// Down 1 level of dimension
arrayType = arrayType->elementType;
}
// arrayType becomes elmType when we traverse to the last dimension
elmType = arrayType;
return elmType;
}
示例11: compileCondition2
void compileCondition2(void) {
// TODO
switch (lookAhead->tokenType)
{
case SB_EQ:
eat(SB_EQ);
break;
case SB_NEQ:
eat(SB_NEQ);
break;
case SB_LE:
eat(SB_LE);
break;
case SB_LT:
eat(SB_LT);
break;
case SB_GE:
eat(SB_GE);
break;
case SB_GT:
eat(SB_GT);
break;
default:
error(ERR_INVALIDCOMPARATOR, lookAhead->lineNo, lookAhead->colNo);
}
compileExpression();
}
示例12: compileArguments
void compileArguments(void) {
// TODO
switch (lookAhead->tokenType) {
case SB_LPAR:
eat(SB_LPAR);
compileExpression();
compileArguments2();
eat(SB_RPAR);
break;
case KW_END:
case SB_SEMICOLON:
case KW_ELSE:
case SB_TIMES:
case SB_SLASH:
case SB_MOD:
case SB_PLUS:
case SB_MINUS:
case SB_EQ:
case SB_NEQ:
case SB_LE:
case SB_LT:
case SB_GE:
case SB_GT:
case KW_DO:
case KW_TO:
case KW_THEN:
case SB_RPAR:
case SB_RSEL:
case SB_COMMA:
break;
default:
error(ERR_INVALIDARGUMENTS, lookAhead->lineNo, lookAhead->colNo);
break;
}
}
示例13: compileIndexes
void compileIndexes(void) {
while (lookAhead->tokenType == SB_LSEL) {
eat(SB_LSEL);
compileExpression();
eat(SB_RSEL);
}
}
示例14: compileForSt
void compileForSt(void) {
eat(KW_FOR);
eat(TK_IDENT);
// TODO: check if the identifier is a variable
checkDeclaredVariable(currentToken->string);
eat(SB_ASSIGN);
compileExpression();
eat(KW_TO);
compileExpression();
eat(KW_DO);
compileStatement();
}
示例15: compileExpression
void
EditScriptDialog::compileAndSetResult(const QString& script)
{
QString ret = compileExpression(script);
_imp->resultEdit->setPlainText(ret);
}