diff --git a/ase/stx/parser.c b/ase/stx/parser.c index 7d92e629..8e2a2fdf 100644 --- a/ase/stx/parser.c +++ b/ase/stx/parser.c @@ -1,5 +1,5 @@ /* - * $Id: parser.c,v 1.20 2005-06-07 16:09:57 bacon Exp $ + * $Id: parser.c,v 1.21 2005-06-08 03:16:34 bacon Exp $ */ #include @@ -10,6 +10,8 @@ static int __parse_method ( xp_stx_parser_t* parser, xp_stx_word_t method_class, void* input); static int __parse_message_pattern (xp_stx_parser_t* parser); +static int __parse_temporaries (xp_stx_parser_t* parser); +static int __parse_statements (xp_stx_parser_t* parser); static int __get_token (xp_stx_parser_t* parser); static int __get_ident (xp_stx_parser_t* parser); @@ -87,21 +89,38 @@ int xp_stx_parser_parse_method ( static int __parse_method ( xp_stx_parser_t* parser, xp_stx_word_t method_class, void* input) { + /* + * ::= + * [ ] [] + */ + GET_CHAR (parser); GET_TOKEN (parser); if (__parse_message_pattern (parser) == -1) return -1; + if (__parse_temporaries (parser) == -1) return -1; + if (__parse_statements (parser) == -1) return -1; return 0; } static int __parse_message_pattern (xp_stx_parser_t* parser) { + /* + * ::= + * | | + * ::= unarySelector + * ::= binarySelector + * ::= (keyword )+ + */ - if (parser->token.type == XP_STX_TOKEN_IDENT) { /* unary message */ + if (parser->token.type == XP_STX_TOKEN_IDENT) { + /* unary pattern */ } - else if (parser->token.type == XP_STX_TOKEN_BINARY) { /* binary message */ + else if (parser->token.type == XP_STX_TOKEN_BINARY) { + /* binary pattern */ } - else if (parser->token.type == XP_STX_TOKEN_IDENT_COLON) { /* keyword message */ + else if (parser->token.type == XP_STX_TOKEN_KEYWORD) { + /* keyword pattern */ xp_stx_char_t* selector; } else { @@ -118,6 +137,16 @@ static int __parse_message_pattern (xp_stx_parser_t* parser) return 0; } +static int __parse_temporaries (xp_stx_parser_t* parser) +{ + return -1; +} + +static int __parse_statements (xp_stx_parser_t* parser) +{ + return -1; +} + static int __get_token (xp_stx_parser_t* parser) { xp_cint_t c; diff --git a/ase/stx/parser.h b/ase/stx/parser.h index 50142d3e..3bcca4ba 100644 --- a/ase/stx/parser.h +++ b/ase/stx/parser.h @@ -1,5 +1,5 @@ /* - * $Id: parser.h,v 1.11 2005-06-06 03:47:34 bacon Exp $ + * $Id: parser.h,v 1.12 2005-06-08 03:16:34 bacon Exp $ */ #ifndef _XP_STX_PARSER_H_ @@ -10,18 +10,25 @@ enum { - XP_STX_PARSER_ERROR_NONE = 0, - XP_STX_PARSER_ERROR_INPUT, - XP_STX_PARSER_ERROR_MEMORY, + XP_STX_PARSER_ERROR_NONE, + + /* system errors */ XP_STX_PARSER_ERROR_INVALID, + XP_STX_PARSER_ERROR_MEMORY, + XP_STX_PARSER_ERROR_INPUT, + + /* lexical errors */ XP_STX_PARSER_ERROR_CHAR, XP_STX_PARSER_ERROR_CHARLIT, - XP_STX_PARSER_ERROR_STRLIT + XP_STX_PARSER_ERROR_STRLIT, + + /* syntatic error */ + XP_STX_PARSER_ERROR_MESSAGE_SELECTOR }; -/* input_func cmd */ enum { + /* input_func cmd */ XP_STX_PARSER_INPUT_OPEN, XP_STX_PARSER_INPUT_CLOSE, XP_STX_PARSER_INPUT_CONSUME,