Example #1
0
//<if>               ->      IF ( <expr> <RO> <expr>)  THEN <block>
node_t* if_f() {
    node_t *p = getNode("<if>");

    if (tk.name == "(") { // (
        //don't need to put delimiters in the tree
        tk = scanner(fp, lineNum);
        p->child1 = expr_f();
        p->child2 = RO_f();
        p->child3 = expr_f();
        if (tk.name == ")") { // )
            //don't need to put delimiters in the tree
            tk = scanner(fp, lineNum);
            if (tk.tokenId == THEN_tk) {
                tk = scanner(fp, lineNum);
                p->child4 = block_f();
                return p;
            } else {
                error("Got token " + tk.name = ", expected THEN token\n'");
            }
        } else {
            error("Got token " + tk.name = ", expected ) token\n");
        }
    } else {
        error("Got token " + tk.name = ", expected ( token\n");
    }

    return p;
}
Example #2
0
void partial_block_f()
{
  if (state!=partial_block)
  {
    delete WGr_pointer; WGr_pointer=NULL;
    delete block_pointer; // destroy installed block first
    block_pointer =
      new non_integral_block(currentRepContext(),
			     currentStandardRepr());
    state=partial_block;
    entry_z = current_param_block().size()-1;
  }
  block_f();
} // |partial_block_f|
Example #3
0
void nblock_f()
{
  if (state!=nblock)
  {
    delete WGr_pointer; WGr_pointer=NULL;
    delete block_pointer; // destroy installed block first
    block_pointer =
      new non_integral_block(currentRepContext(),
			     currentStandardRepr(),
			     entry_z);
    state=nblock;
  }
  block_f();
} // |nblock_f|
Example #4
0
//<program>  ->     PROGRAM <var> <block>
node_t* prog_f() {
    node_t *p = getNode("<program>");

    if(tk.tokenId == PROG_tk) { // PROGRAM
        p->child1 = getNode("PROGRAM");
        tk = scanner(fp, lineNum);
        p->child2 = var_f();
        p->child3 = block_f();
        return p;
    } else {
        error("Got token " + tk.name + ", expected PROGRAM token\n");
    }

    return p;
}
Example #5
0
//<stat>           ->      <in> | <out> | <block> | <if> | <loop> | <assign>
node_t* stat_f() {
    node_t *p = getNode("<stat>");

    if (tk.tokenId == SCAN_tk) { // <in>
        p->child1 = getNode("SCAN");
        tk = scanner(fp, lineNum);
        p->child2 = in_f();
        return p;
    } else if (tk.tokenId == PRINT_tk) { // <out>
        p->child1 = getNode("PRINT");
        tk = scanner(fp, lineNum);
        p->child2 = out_f();
        return p;
    } else if (tk.name == "{") { // <block>
        //don't need to put delimiters in the tree
        p->child1 = block_f();
        return p;
    } else if (tk.tokenId == IF_tk) { // <if>
        p->child1 = getNode("IF");
        tk = scanner(fp, lineNum);
        p->child2 = if_f();
        return p;
    } else if (tk.tokenId == LOOP_tk) { // <loop>
        p->child1 = getNode("LOOP");
        tk = scanner(fp, lineNum);
        p->child2 = loop_f();
        return p;
    } else if (tk.tokenId == IDENT_tk) { // <assign>
        p->child1 = assign_f();
        return p;
    } else {
        error("Got token " + tk.name + ", expected SCAN, PRINT, {, IF, LOOP, or IDENTIFIER token\n");
    }

    return p;
}