more nodes

git-svn-id: svn://anubis/jtlc/trunk@15 f5bc74b8-7b62-4e90-9214-7121d538519f
This commit is contained in:
josh 2010-01-13 21:13:22 +00:00
parent 7b1893c1e5
commit 9c26b9593c
3 changed files with 39 additions and 8 deletions

View File

@ -1,6 +1,7 @@
#include <stdio.h> /* tmpfile() */
#include <stdlib.h> /* exit() */
#include <unistd.h> /* unlink() */
#include <vector>
#include "util/refptr.h"
#include "parser/parser.h"
@ -42,8 +43,10 @@ int main(int argc, char * argv[])
void compile(const char * filename)
{
FILE * out = tmpfile();
string out_filename = string(filename) + ".c";
FILE * out = fopen(out_filename.c_str(), "w");
refptr<Node> tree = parse(filename);
tree->process(out);
fclose(out);
// unlink(out_filename.c_str());
}

View File

@ -33,6 +33,10 @@ class ArrayTypeNode : public Node
{
};
class AssignExprNode : public Node
{
};
class CStatementNode : public Node
{
public:
@ -66,6 +70,10 @@ class ItemsNode : public Node
{
};
class LValueNode : public Node
{
};
class PrimitiveTypeNode : public Node
{
public:
@ -76,6 +84,10 @@ class ProgramNode : public Node
{
};
class ReturnStatementNode : public Node
{
};
class StringNode : public Node
{
public:

View File

@ -93,6 +93,7 @@ static YYSTYPE parse_result;
program: program_items {
$$ = new ProgramNode();
$$->addChildren($1);
parse_result = $$;
}
;
@ -241,24 +242,39 @@ type: primitive_type {
}
;
statement: expression SEMICOLON
| return_statement
statement: expression SEMICOLON {
$$ = $1;
}
| return_statement {
$$ = $1;
}
| c_statement {
$$ = $1;
}
;
return_statement: RETURN expression SEMICOLON
return_statement: RETURN expression SEMICOLON {
$$ = new ReturnStatementNode();
$$->addChild($2);
}
;
expression: assign_expr
expression: assign_expr {
$$ = $1;
}
;
assign_expr: lvalue ASSIGN expression
| lvalue DASSIGN expression
assign_expr: lvalue ASSIGN expression {
$$ = new AssignExprNode();
$$->addChild($1);
$$->addChild($3);
}
;
lvalue: IDENTIFIER
lvalue: IDENTIFIER {
$$ = new LValueNode();
$$->addChild($1);
}
;
c_statement: C LPAREN STRING_LITERAL RPAREN SEMICOLON {