Working some more on parsing
This commit is contained in:
parent
0e27f79296
commit
ed8f21021b
27
src/parser.c
27
src/parser.c
@ -64,6 +64,7 @@ static int _identifier_list(C99 * c99);
|
|||||||
static int _parameter_type_list(C99 * c99);
|
static int _parameter_type_list(C99 * c99);
|
||||||
static int _parameter_declaration(C99 * c99);
|
static int _parameter_declaration(C99 * c99);
|
||||||
static int _abstract_declarator(C99 * c99);
|
static int _abstract_declarator(C99 * c99);
|
||||||
|
static int _direct_abstract_declarator(C99 * c99);
|
||||||
static int _assignment_expr(C99 * c99);
|
static int _assignment_expr(C99 * c99);
|
||||||
static int _unary_expr(C99 * c99);
|
static int _unary_expr(C99 * c99);
|
||||||
static int _postfix_expr(C99 * c99);
|
static int _postfix_expr(C99 * c99);
|
||||||
@ -719,12 +720,34 @@ static int _abstract_declarator(C99 * c99)
|
|||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "DEBUG: %s()\n", __func__);
|
||||||
|
#endif
|
||||||
|
if(_parse_in_set(c99, c99set_pointer))
|
||||||
|
ret = _pointer(c99);
|
||||||
|
if(_parse_in_set(c99, c99set_direct_abstract_declarator))
|
||||||
|
ret |= _direct_abstract_declarator(c99);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* direct-abstract-declarator */
|
||||||
|
static int _direct_abstract_declarator(C99 * c99)
|
||||||
|
/* "(" abstract-declarator ")"
|
||||||
|
* [ direct-abstract-declarator ] "[" [ assignment-expr ] "]"
|
||||||
|
* direct-abstract-declarator "[" "*" "]"
|
||||||
|
* [ direct-abstract-declarator ] "(" [ parameter-type-list ] ")" */
|
||||||
|
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* FIXME complete */
|
/* FIXME complete */
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "DEBUG: %s()\n", __func__);
|
fprintf(stderr, "DEBUG: %s()\n", __func__);
|
||||||
#endif
|
#endif
|
||||||
if(token_in_set(c99->token, c99set_pointer))
|
ret = c99_scan(c99);
|
||||||
ret = _pointer(c99);
|
ret |= _abstract_declarator(c99);
|
||||||
|
ret |= _parse_check(c99, C99_CODE_OPERATOR_RPAREN);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
C99_CODE_OPERATOR_LPAREN,
|
@ -132,6 +132,16 @@ static TokenCode _c99set_designator[] =
|
|||||||
TokenSet c99set_designator = _c99set_designator;
|
TokenSet c99set_designator = _c99set_designator;
|
||||||
|
|
||||||
|
|
||||||
|
/* direct-abstract-declarator */
|
||||||
|
static TokenCode _c99set_direct_abstract_declarator[] =
|
||||||
|
{
|
||||||
|
#include "sets/direct_abstract_declarator.set"
|
||||||
|
C99_CODE_NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
TokenSet c99set_direct_abstract_declarator = _c99set_direct_abstract_declarator;
|
||||||
|
|
||||||
|
|
||||||
/* enum-specifier */
|
/* enum-specifier */
|
||||||
static TokenCode _c99set_enum_specifier[] =
|
static TokenCode _c99set_enum_specifier[] =
|
||||||
{
|
{
|
||||||
|
@ -34,6 +34,7 @@ extern TokenSet c99set_declaration_specifiers;
|
|||||||
extern TokenSet c99set_declarator;
|
extern TokenSet c99set_declarator;
|
||||||
extern TokenSet c99set_designation;
|
extern TokenSet c99set_designation;
|
||||||
extern TokenSet c99set_designator;
|
extern TokenSet c99set_designator;
|
||||||
|
extern TokenSet c99set_direct_abstract_declarator;
|
||||||
extern TokenSet c99set_enum_specifier;
|
extern TokenSet c99set_enum_specifier;
|
||||||
extern TokenSet c99set_expression;
|
extern TokenSet c99set_expression;
|
||||||
extern TokenSet c99set_expression_statement;
|
extern TokenSet c99set_expression_statement;
|
||||||
|
Loading…
Reference in New Issue
Block a user