add list, declarator node types
This commit is contained in:
parent
86c6243053
commit
0a2e719f2c
11
src/Node.cc
11
src/Node.cc
@ -1,2 +1,13 @@
|
|||||||
#include "Node.h"
|
#include "Node.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
Node::Node(int _type)
|
||||||
|
{
|
||||||
|
type = _type;
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case NODE_TYPE_LIST:
|
||||||
|
list = new std::vector<Node *>();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
13
src/Node.h
13
src/Node.h
@ -2,14 +2,12 @@
|
|||||||
#define NODE_H
|
#define NODE_H
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
class Node
|
class Node
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Node(int _type)
|
Node(int _type);
|
||||||
{
|
|
||||||
type = _type;
|
|
||||||
}
|
|
||||||
|
|
||||||
int type;
|
int type;
|
||||||
union
|
union
|
||||||
@ -20,12 +18,19 @@ public:
|
|||||||
size_t line;
|
size_t line;
|
||||||
std::string * text;
|
std::string * text;
|
||||||
} token;
|
} token;
|
||||||
|
std::vector<Node *> * list;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
std::string * name;
|
||||||
|
} declarator;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
NODE_TYPE_TOKEN,
|
NODE_TYPE_TOKEN,
|
||||||
|
NODE_TYPE_LIST,
|
||||||
|
NODE_TYPE_DECLARATOR,
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -261,21 +261,46 @@ constant_expression
|
|||||||
|
|
||||||
declaration
|
declaration
|
||||||
: declaration_specifiers SEMICOLON
|
: declaration_specifiers SEMICOLON
|
||||||
| declaration_specifiers init_declarator_list SEMICOLON
|
| declaration_specifiers init_declarator_list SEMICOLON {
|
||||||
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
declaration_specifiers
|
declaration_specifiers
|
||||||
: storage_class_specifier
|
: storage_class_specifier {
|
||||||
| storage_class_specifier declaration_specifiers
|
$$ = new Node(NODE_TYPE_LIST);
|
||||||
| type_specifier
|
$$->list->push_back($1);
|
||||||
| type_specifier declaration_specifiers
|
}
|
||||||
| type_qualifier
|
| storage_class_specifier declaration_specifiers {
|
||||||
| type_qualifier declaration_specifiers
|
$$ = $2;
|
||||||
|
$$->list->push_back($1);
|
||||||
|
}
|
||||||
|
| type_specifier {
|
||||||
|
$$ = new Node(NODE_TYPE_LIST);
|
||||||
|
$$->list->push_back($1);
|
||||||
|
}
|
||||||
|
| type_specifier declaration_specifiers {
|
||||||
|
$$ = $2;
|
||||||
|
$$->list->push_back($1);
|
||||||
|
}
|
||||||
|
| type_qualifier {
|
||||||
|
$$ = new Node(NODE_TYPE_LIST);
|
||||||
|
$$->list->push_back($1);
|
||||||
|
}
|
||||||
|
| type_qualifier declaration_specifiers {
|
||||||
|
$$ = $2;
|
||||||
|
$$->list->push_back($1);
|
||||||
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
init_declarator_list
|
init_declarator_list
|
||||||
: init_declarator
|
: init_declarator {
|
||||||
| init_declarator_list COMMA init_declarator
|
$$ = new Node(NODE_TYPE_LIST);
|
||||||
|
$$->list->push_back($1);
|
||||||
|
}
|
||||||
|
| init_declarator_list COMMA init_declarator {
|
||||||
|
$$ = $1;
|
||||||
|
$$->list->push_back($3);
|
||||||
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
init_declarator
|
init_declarator
|
||||||
@ -366,13 +391,16 @@ type_qualifier
|
|||||||
;
|
;
|
||||||
|
|
||||||
declarator
|
declarator
|
||||||
: pointer direct_declarator
|
: pointer direct_declarator { $$ = $2; }
|
||||||
| direct_declarator
|
| direct_declarator
|
||||||
;
|
;
|
||||||
|
|
||||||
direct_declarator
|
direct_declarator
|
||||||
: IDENTIFIER
|
: IDENTIFIER {
|
||||||
| LPAREN declarator RPAREN
|
$$ = new Node(NODE_TYPE_DECLARATOR);
|
||||||
|
$$->declarator.name = $1->token.text;
|
||||||
|
}
|
||||||
|
| LPAREN declarator RPAREN { $$ = $2; }
|
||||||
| direct_declarator LBRACKET constant_expression RBRACKET
|
| direct_declarator LBRACKET constant_expression RBRACKET
|
||||||
| direct_declarator LBRACKET RBRACKET
|
| direct_declarator LBRACKET RBRACKET
|
||||||
| direct_declarator LPAREN parameter_type_list RPAREN
|
| direct_declarator LPAREN parameter_type_list RPAREN
|
||||||
|
Loading…
x
Reference in New Issue
Block a user