コード例 #1
0
ファイル: parse.c プロジェクト: jbrmaiden/Tiny-Compiler
TreeNode * expres(void)
{ TreeNode * t = simple_exp();
  if ((token==LT)||(token==EQ)) {
    TreeNode * p = newExpNode(OpK);
    if (p!=NULL) {
      p->child[0] = t;
      p->attr.op = token;
      t = p;
    }
    match(token);
    if (t!=NULL)
      t->child[1] = simple_exp();
  }
  return t;
}
コード例 #2
0
ファイル: parse.c プロジェクト: endlesscpp/study
TreeNode* expression(void)
{
    TreeNode* t = simple_exp();

    if (s_token == LT || s_token == EQ )
    {
        TreeNode* p = newExpNode(OpK);
        if (p != NULL)
        {
            p->child[0] = t;
            p->attr.op = s_token;
            t = p;
        }

        match(s_token); // TODO: This is equal to getToken(). why get a new token at here ?
        if (t != NULL);
        t->child[1] = simple_exp();
    }

    return t;
}
コード例 #3
0
ファイル: main.cpp プロジェクト: OnionLord/C_Minus_Parser
void exp(int level)
{
    int this_line = line_cnt;
    int isAssign = 0;
    list<line>::iterator look_var;
    look_var = tokenPos;
    
    
    if(look_var->tokenType == ID)
    {
        look_var++;
        
        if(strcmp(look_var->textOfLine,"[")==0)
        {            while(1)
            {
                look_var ++;
                if(strcmp(look_var->textOfLine,"]")==0)
                {
                    
                    isAssign = 1;
                    look_var++;
                    break;
                }
                else if(look_var->tokenType == ENDF)
                {
                    break;
                }
            }
            
        }
        else
        {
            isAssign = 1;
        }
        //look_var++;
        if(strcmp(look_var->textOfLine,"=")==0 && isAssign == 1)
        {
			pTreeType[this_line][0] = ASSIGN;
			pTreeType[this_line][1] = level;
            push_child(this_line,VAR);
            var(level+1);
            push(EQUAL, this_line);
            push_child(this_line,EXP);
            exp(level+2);
            
            
        }
        else
        {
            push_child(this_line,EXP);
            simple_exp(level);
        }
    }
    else
    {
        push_child(this_line,EXP);
        simple_exp(level);
    }
    

}