diff --git a/include/c99.h b/include/c99.h index 41a2c96..d73be6c 100644 --- a/include/c99.h +++ b/include/c99.h @@ -140,10 +140,12 @@ typedef enum _C99Code C99_CODE_KEYWORD__IMAGINARY, C99_CODE_TYPEDEF_NAME } C99Code; -# define C99_CODE_META_FIRST CPP_CODE_META_FIRST -# define C99_CODE_META_LAST CPP_CODE_META_LAST -# define C99_CODE_KEYWORD_FIRST C99_CODE_KEYWORD_AUTO -# define C99_CODE_KEYWORD_LAST C99_CODE_KEYWORD__IMAGINARY +# define C99_CODE_META_FIRST CPP_CODE_META_FIRST +# define C99_CODE_META_LAST CPP_CODE_META_LAST +# define C99_CODE_KEYWORD_FIRST C99_CODE_KEYWORD_AUTO +# define C99_CODE_KEYWORD_LAST C99_CODE_KEYWORD__IMAGINARY +# define C99_CODE_LAST C99_CODE_TYPEDEF_NAME +# define C99_CODE_COUNT (C99_CODE_LAST + 1) typedef struct _C99Prefs { @@ -171,6 +173,4 @@ int c99_delete(C99 * c99); /* useful */ int c99_parse(C99 * c99); -int c99_scan(C99 * c99); - #endif /* !C99_C99_H */ diff --git a/src/parser.c b/src/parser.c index e110ae1..3e04527 100644 --- a/src/parser.c +++ b/src/parser.c @@ -22,8 +22,9 @@ #include #include #include -#include "common.h" #include "tokenset.h" +#include "scanner.h" +#include "common.h" #include "c99.h" #include "../config.h" @@ -119,11 +120,10 @@ static int _parse_check(C99 * c99, TokenCode code) { ret = _parse_error(c99, "Expected \"%s\"", tokencode_get_string(code)); - while(c99_scan(c99) == 0 - && c99->token != NULL /* actual token */ + while(scan(c99) == 0 && c99->token != NULL /* actual token */ && !_parse_is_code(c99, code)); } - ret |= c99_scan(c99); + ret |= scan(c99); return ret; } @@ -186,8 +186,7 @@ static int _translation_unit(C99 * c99) #ifdef DEBUG fprintf(stderr, "DEBUG: %s()\n", __func__); #endif - while(c99_scan(c99) == 0 - && c99->token != NULL) /* end of file */ + while(scan(c99) == 0 && c99->token != NULL) /* end of file */ ret |= _external_declaration(c99); if(c99->token != NULL) ret |= 1; @@ -308,7 +307,7 @@ static int _storage_class_specifier(C99 * c99) fprintf(stderr, "DEBUG: %s() \"%s\"\n", __func__, _parse_get_string(c99)); #endif - return c99_scan(c99); + return scan(c99); } @@ -331,7 +330,7 @@ static int _type_specifier(C99 * c99) else if(_parse_in_set(c99, c99set_typedef_name)) ret = _typedef_name(c99); else - ret = c99_scan(c99); + ret = scan(c99); return ret; } @@ -356,7 +355,7 @@ static int _struct_or_union_specifier(C99 * c99) ret |= _parse_check(c99, C99_CODE_OPERATOR_LBRACE); ret |= _struct_declaration_list(c99); if(_parse_is_code(c99, C99_CODE_COMMA)) - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RBRACE); return ret; } @@ -370,7 +369,7 @@ static int _struct_or_union(C99 * c99) fprintf(stderr, "DEBUG: %s() \"%s\"\n", __func__, _parse_get_string(c99)); #endif - return c99_scan(c99); + return scan(c99); } @@ -418,7 +417,7 @@ static int _struct_declarator_list(C99 * c99) ret = _struct_declarator(c99); while(_parse_is_code(c99, C99_CODE_COMMA)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _struct_declarator(c99); } return ret; @@ -439,7 +438,7 @@ static int _struct_declarator(C99 * c99) ret |= _declarator(c99); if(_parse_is_code(c99, C99_CODE_OPERATOR_COLON)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _constant_expr(c99); } return ret; @@ -457,7 +456,7 @@ static int _enum_specifier(C99 * c99) fprintf(stderr, "DEBUG: %s() \"%s\"\n", __func__, _parse_get_string(c99)); #endif - ret = c99_scan(c99); + ret = scan(c99); if(_parse_is_code(c99, C99_CODE_IDENTIFIER)) { ret |= _identifier(c99); @@ -468,7 +467,7 @@ static int _enum_specifier(C99 * c99) ret |= _enumerator(c99); while(_parse_is_code(c99, C99_CODE_COMMA)) { - ret |= c99_scan(c99); + ret |= scan(c99); if(!_parse_is_code(c99, C99_CODE_OPERATOR_RBRACE)) ret |= _enumerator(c99); else @@ -491,7 +490,7 @@ static int _enumerator(C99 * c99) ret = _enumeration_constant(c99); if(_parse_is_code(c99, C99_CODE_OPERATOR_EQUALS)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _constant_expr(c99); } return ret; @@ -517,7 +516,7 @@ static int _typedef_name(C99 * c99) fprintf(stderr, "DEBUG: %s() \"%s\"\n", __func__, _parse_get_string(c99)); #endif - return c99_scan(c99); + return scan(c99); } @@ -529,7 +528,7 @@ static int _type_qualifier(C99 * c99) fprintf(stderr, "DEBUG: %s() \"%s\"\n", __func__, _parse_get_string(c99)); #endif - return c99_scan(c99); + return scan(c99); } @@ -541,7 +540,7 @@ static int _function_specifier(C99 * c99) fprintf(stderr, "DEBUG: %s() \"inline\" got \"%s\"\n", __func__, _parse_get_string(c99)); #endif - return c99_scan(c99); + return scan(c99); } @@ -572,12 +571,12 @@ static int _pointer(C99 * c99) fprintf(stderr, "DEBUG: %s() \"*\" got \"%s\"\n", __func__, _parse_get_string(c99)); #endif - ret = c99_scan(c99); + ret = scan(c99); if(_parse_in_set(c99, c99set_type_qualifier_list)) ret |= _type_qualifier_list(c99); while(_parse_in_set(c99, c99set_pointer)) { - ret |= c99_scan(c99); + ret |= scan(c99); if(_parse_in_set(c99, c99set_type_qualifier_list)) ret |= _type_qualifier_list(c99); } @@ -618,7 +617,7 @@ static int _direct_declarator(C99 * c99) #endif if(_parse_is_code(c99, C99_CODE_OPERATOR_LPAREN)) { - ret = c99_scan(c99); + ret = scan(c99); ret |= _declarator(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RPAREN); } @@ -628,11 +627,11 @@ static int _direct_declarator(C99 * c99) || _parse_is_code(c99, C99_CODE_OPERATOR_LBRACKET)) { code = token_get_code(c99->token); - ret |= c99_scan(c99); + ret |= scan(c99); if(code == C99_CODE_OPERATOR_LBRACKET) { if(_parse_is_code(c99, C99_CODE_OPERATOR_TIMES)) - ret |= c99_scan(c99); + ret |= scan(c99); else ret |= _assignment_expr(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RBRACKET); @@ -662,7 +661,7 @@ static int _identifier(C99 * c99) fprintf(stderr, "DEBUG: %s() \"%s\"\n", __func__, str); #endif ret = code_set_identifier(c99->code, str); - ret |= c99_scan(c99); + ret |= scan(c99); return ret; } @@ -679,7 +678,7 @@ static int _identifier_list(C99 * c99) ret = _identifier(c99); while(_parse_is_code(c99, C99_CODE_COMMA)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _identifier(c99); } ret |= code_set_context(c99->code, CODE_CONTEXT_UNDEFINED); @@ -699,9 +698,9 @@ static int _parameter_type_list(C99 * c99) ret = _parameter_declaration(c99); while(_parse_is_code(c99, C99_CODE_COMMA)) { - ret |= c99_scan(c99); + ret |= scan(c99); if(_parse_is_code(c99, C99_CODE_OPERATOR_DOTDOTDOT)) - return ret | c99_scan(c99); + return ret | scan(c99); ret |= _parameter_declaration(c99); } return ret; @@ -777,13 +776,13 @@ static int _direct_abstract_declarator(C99 * c99) return _parse_error(c99, "Unexpected end of file"); else if((code = token_get_code(c99->token)) == C99_CODE_OPERATOR_LPAREN) { - ret = c99_scan(c99); + ret = scan(c99); ret |= _abstract_declarator(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RPAREN); } else if(code == C99_CODE_OPERATOR_LBRACKET) { - ret = c99_scan(c99); + ret = scan(c99); if(!_parse_is_code(c99, C99_CODE_OPERATOR_RBRACKET)) ret |= _assignment_expr(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RBRACKET); @@ -793,7 +792,7 @@ static int _direct_abstract_declarator(C99 * c99) if((code = token_get_code(c99->token)) == C99_CODE_OPERATOR_LPAREN) { - ret |= c99_scan(c99); + ret |= scan(c99); if(_parse_in_set(c99, c99set_parameter_type_list)) ret |= _parameter_type_list(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RPAREN); @@ -801,7 +800,7 @@ static int _direct_abstract_declarator(C99 * c99) else if(code == C99_CODE_OPERATOR_LBRACKET) { if(_parse_is_code(c99, C99_CODE_OPERATOR_TIMES)) - ret |= c99_scan(c99); + ret |= scan(c99); else if(_parse_in_set(c99, c99set_assignment_expr)) ret |= _assignment_expr(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RBRACKET); @@ -860,7 +859,7 @@ static int _unary_expr(C99 * c99) else if((code = token_get_code(c99->token)) == C99_CODE_OPERATOR_DPLUS || code == C99_CODE_OPERATOR_DMINUS) { - ret = c99_scan(c99); + ret = scan(c99); ret |= _unary_expr(c99); } else if(_parse_in_set(c99, c99set_unary_operator)) @@ -870,10 +869,10 @@ static int _unary_expr(C99 * c99) } else if(code == C99_CODE_KEYWORD_SIZEOF) { - ret = c99_scan(c99); + ret = scan(c99); if(_parse_is_code(c99, C99_CODE_OPERATOR_LPAREN)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _type_name(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RPAREN); } @@ -906,13 +905,13 @@ static int _postfix_expr(C99 * c99) ret |= _primary_expr(c99); else if(_parse_is_code(c99, C99_CODE_OPERATOR_LPAREN)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _type_name(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RPAREN); ret |= _parse_check(c99, C99_CODE_OPERATOR_LBRACE); ret |= _initializer_list(c99); if(_parse_is_code(c99, C99_CODE_COMMA)) - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RBRACE); } while(c99->token != NULL) @@ -920,13 +919,13 @@ static int _postfix_expr(C99 * c99) code = token_get_code(c99->token); if(code == C99_CODE_OPERATOR_LBRACKET) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _expression(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RBRACKET); } else if(code == C99_CODE_OPERATOR_LPAREN) { - ret |= c99_scan(c99); + ret |= scan(c99); if(!_parse_is_code(c99, C99_CODE_OPERATOR_RPAREN)) ret |= _argument_expression_list(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RPAREN); @@ -934,12 +933,12 @@ static int _postfix_expr(C99 * c99) else if(code == C99_CODE_OPERATOR_DOT || code == C99_CODE_OPERATOR_MGREATER) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _identifier(c99); } else if(code == C99_CODE_OPERATOR_DPLUS || code == C99_CODE_OPERATOR_DMINUS) - ret |= c99_scan(c99); + ret |= scan(c99); else break; } @@ -961,7 +960,7 @@ static int _argument_expression_list(C99 * c99) ret = _assignment_expr(c99); while(_parse_is_code(c99, C99_CODE_COMMA)) { - ret |= c99_scan(c99); + ret |= scan(c99); #ifdef DEBUG fprintf(stderr, "DEBUG: %s() arg %u \"%s\"\n", __func__, ++cnt, _parse_get_string(c99)); @@ -993,13 +992,13 @@ static int _primary_expr(C99 * c99) return _identifier(c99); else if(code == C99_CODE_OPERATOR_LPAREN) { - ret = c99_scan(c99); + ret = scan(c99); ret |= _expression(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RPAREN); return ret; } else /* constant or string-litteral */ - return c99_scan(c99); + return scan(c99); } @@ -1055,7 +1054,7 @@ static int _unary_operator(C99 * c99) fprintf(stderr, "DEBUG: %s() %s\n", __func__, _parse_get_string(c99)); #endif - return c99_scan(c99); + return scan(c99); } @@ -1067,7 +1066,7 @@ static int _assignment_operator(C99 * c99) #ifdef DEBUG fprintf(stderr, "DEBUG: %s()\n", __func__); #endif - return c99_scan(c99); + return scan(c99); } @@ -1084,7 +1083,7 @@ static int _conditional_expr(C99 * c99) ret = _logical_or_expr(c99); if(_parse_is_code(c99, C99_CODE_OPERATOR_QUESTION)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _expression(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_COLON); ret |= _conditional_expr(c99); @@ -1105,7 +1104,7 @@ static int _logical_or_expr(C99 * c99) ret = _logical_and_expr(c99); while(_parse_is_code(c99, C99_CODE_OPERATOR_DBAR)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _logical_and_expr(c99); } return ret; @@ -1125,7 +1124,7 @@ static int _logical_and_expr(C99 * c99) ret = _inclusive_or_expr(c99); while(_parse_is_code(c99, C99_CODE_OPERATOR_DAMPERSAND)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _inclusive_or_expr(c99); } return ret; @@ -1144,7 +1143,7 @@ static int _inclusive_or_expr(C99 * c99) ret = _exclusive_or_expr(c99); while(_parse_is_code(c99, C99_CODE_OPERATOR_BAR)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _exclusive_or_expr(c99); } return ret; @@ -1163,7 +1162,7 @@ static int _exclusive_or_expr(C99 * c99) ret = _and_expr(c99); while(_parse_is_code(c99, C99_CODE_OPERATOR_XOR)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _and_expr(c99); } return ret; @@ -1182,7 +1181,7 @@ static int _and_expr(C99 * c99) ret = _equality_expr(c99); while(_parse_is_code(c99, C99_CODE_OPERATOR_AMPERSAND)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _equality_expr(c99); } return ret; @@ -1205,7 +1204,7 @@ static int _equality_expr(C99 * c99) == C99_CODE_OPERATOR_DEQUALS || code == C99_CODE_OPERATOR_NEQUALS)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _relational_expr(c99); } return ret; @@ -1230,7 +1229,7 @@ static int _relational_expr(C99 * c99) || code == C99_CODE_OPERATOR_LEQUALS || code == C99_CODE_OPERATOR_GEQUALS)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _shift_expr(c99); } return ret; @@ -1253,7 +1252,7 @@ static int _shift_expr(C99 * c99) == C99_CODE_OPERATOR_DLESS || code == C99_CODE_OPERATOR_DGREATER)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _additive_expr(c99); } return ret; @@ -1276,7 +1275,7 @@ static int _additive_expr(C99 * c99) == C99_CODE_OPERATOR_PLUS || code == C99_CODE_OPERATOR_MINUS)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _multiplicative_expr(c99); } return ret; @@ -1300,7 +1299,7 @@ static int _multiplicative_expr(C99 * c99) || code == C99_CODE_OPERATOR_DIVIDE || code == C99_CODE_OPERATOR_MODULO)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _cast_expr(c99); } return ret; @@ -1319,7 +1318,7 @@ static int _cast_expr(C99 * c99) #endif while(_parse_is_code(c99, C99_CODE_OPERATOR_LPAREN)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _type_name(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RPAREN); } @@ -1338,7 +1337,7 @@ static int _compound_statement(C99 * c99) fprintf(stderr, "DEBUG: %s() \"{\" got \"%s\"\n", __func__, _parse_get_string(c99)); #endif - ret = c99_scan(c99); + ret = scan(c99); if(_parse_in_set(c99, c99set_block_item_list)) ret |= _block_item_list(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RBRACE); @@ -1425,11 +1424,11 @@ static int _labeled_statement(C99 * c99) ret = _identifier(c99); else if(code == C99_CODE_KEYWORD_CASE) { - ret = c99_scan(c99); + ret = scan(c99); ret |= _constant_expr(c99); } else /* default */ - ret = c99_scan(c99); + ret = scan(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_COLON); ret |= _statement(c99); return ret; @@ -1476,7 +1475,7 @@ static int _expression(C99 * c99) ret = _assignment_expr(c99); while(_parse_is_code(c99, C99_CODE_COMMA)) { - c99_scan(c99); + scan(c99); ret |= _assignment_expr(c99); } return ret; @@ -1499,7 +1498,7 @@ static int _selection_statement(C99 * c99) return _parse_error(c99, "Unexpected end of file"); else if((code = token_get_code(c99->token)) == C99_CODE_KEYWORD_SWITCH) c99->in_switch++; - ret = c99_scan(c99); + ret = scan(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_LPAREN); ret |= _expression(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RPAREN); @@ -1509,7 +1508,7 @@ static int _selection_statement(C99 * c99) else if(code == C99_CODE_KEYWORD_IF && _parse_is_code(c99, C99_CODE_KEYWORD_ELSE)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _statement(c99); } return ret; @@ -1532,7 +1531,7 @@ static int _iteration_statement(C99 * c99) return _parse_error(c99, "Unexpected end of file"); else if((code = token_get_code(c99->token)) == C99_CODE_KEYWORD_WHILE) { - ret = c99_scan(c99); + ret = scan(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_LPAREN); ret |= _expression(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RPAREN); @@ -1540,7 +1539,7 @@ static int _iteration_statement(C99 * c99) } else if(code == C99_CODE_KEYWORD_DO) { - ret = c99_scan(c99); + ret = scan(c99); ret |= _statement(c99); ret |= _parse_check(c99, C99_CODE_KEYWORD_WHILE); ret |= _parse_check(c99, C99_CODE_OPERATOR_LPAREN); @@ -1549,7 +1548,7 @@ static int _iteration_statement(C99 * c99) } else if(code == C99_CODE_KEYWORD_FOR) { - ret = c99_scan(c99); + ret = scan(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_LPAREN); /* FIXME or declaration */ if(!_parse_is_code(c99, C99_CODE_OPERATOR_SEMICOLON)) @@ -1585,17 +1584,17 @@ static int _jump_statement(C99 * c99) return _parse_error(c99, "Unexpected end of file"); else if((code = token_get_code(c99->token)) == C99_CODE_KEYWORD_GOTO) { - ret = c99_scan(c99); + ret = scan(c99); ret |= _identifier(c99); } else if(code == C99_CODE_KEYWORD_RETURN) { - ret = c99_scan(c99); + ret = scan(c99); if(_parse_in_set(c99, c99set_expression)) ret = _expression(c99); } else /* continue or break */ - ret = c99_scan(c99); + ret = scan(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_SEMICOLON); return ret; } @@ -1629,7 +1628,7 @@ static int _init_declarator(C99 * c99) ret = _declarator(c99); if(_parse_is_code(c99, C99_CODE_OPERATOR_EQUALS)) { - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _initializer(c99); } return ret; @@ -1648,10 +1647,10 @@ static int _initializer(C99 * c99) #endif if(_parse_is_code(c99, C99_CODE_OPERATOR_LBRACE)) { - ret = c99_scan(c99); + ret = scan(c99); ret |= _initializer_list(c99); if(_parse_is_code(c99, C99_CODE_COMMA)) - ret |= c99_scan(c99); + ret |= scan(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RBRACE); } else @@ -1674,7 +1673,7 @@ static int _initializer_list(C99 * c99) ret |= _initializer(c99); while(_parse_is_code(c99, C99_CODE_COMMA)) { - ret |= c99_scan(c99); + ret |= scan(c99); if(_parse_in_set(c99, c99set_designation)) ret |= _designation(c99); ret |= _initializer(c99); @@ -1726,7 +1725,7 @@ static int _designator(C99 * c99) #endif if(_parse_is_code(c99, C99_CODE_OPERATOR_LBRACKET)) { - ret = c99_scan(c99); + ret = scan(c99); ret |= _constant_expr(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RBRACKET); } @@ -1766,8 +1765,7 @@ static int _parse_E(C99 * c99) Token * token; int code; - while((ret = cpp_scan(c99->cpp, &token)) == 0 - && token != NULL) + while((ret = cpp_scan(c99->cpp, &token)) == 0 && token != NULL) { if((code = token_get_code(token)) == CPP_CODE_META_ERROR || code == CPP_CODE_META_WARNING) diff --git a/src/scanner.c b/src/scanner.c index 0b31691..3c62e56 100644 --- a/src/scanner.c +++ b/src/scanner.c @@ -25,7 +25,7 @@ /* private */ /* variables */ -static char * _tokens[] = +static char * _tokens[C99_CODE_COUNT] = { NULL, ",", "\"", /* directives */ @@ -37,7 +37,7 @@ static char * _tokens[] = "[", "<=", "<", "(", "-=", "->", "-", "%=", "%", "!=", "!", "+=", "+", "?", "}", "]", ")", ";", "*=", "~", "*", "^=", "^", /* more codes */ - "'", "whitespace", "word", "constant", "identifier", + "'", "whitespace", "newline", "word", "constant", "identifier", /* keywords */ "auto", "break", "case", "char", "const", "continue", "default", "do", "double", "else", "enum", "extern", "float", "for", "goto", "if", @@ -50,21 +50,12 @@ static char * _tokens[] = /* protected */ /* functions */ -/* accessors */ -char const * tokencode_get_string(TokenCode code) -{ - return _tokens[code]; -} - - -/* public */ -/* functions */ /* useful */ -/* c99_scan */ +/* scan */ static int _scan_skip_meta(C99 * c99); static void _meta_error(C99 * c99, TokenCode code); -int c99_scan(C99 * c99) +int scan(C99 * c99) { int ret; char const * string; @@ -134,3 +125,10 @@ static void _meta_error(C99 * c99, TokenCode code) (code == C99_CODE_META_ERROR) ? "error" : "warning", ": ", token_get_string(c99->token)); } + + +/* accessors */ +char const * tokencode_get_string(TokenCode code) +{ + return _tokens[code]; +} diff --git a/src/scanner.h b/src/scanner.h new file mode 100644 index 0000000..8c32d1d --- /dev/null +++ b/src/scanner.h @@ -0,0 +1,29 @@ +/* $Id$ */ +/* Copyright (c) 2008 Pierre Pronchery */ +/* This file is part of DeforaOS Devel c99 */ +/* c99 is not free software; you can redistribute it and/or modify it under the + * terms of the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 + * Unported as published by the Creative Commons organization. + * + * c99 is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the Creative Commons Attribution-NonCommercial- + * ShareAlike 3.0 Unported license for more details. + * + * You should have received a copy of the Creative Commons Attribution- + * NonCommercial-ShareAlike 3.0 along with c99; if not, browse to + * http://creativecommons.org/licenses/by-nc-sa/3.0/ */ + + + +#ifndef C99_SCANNER_H +# define C99_SCANNER_H + +# include "c99.h" + + +/* protected */ +/* functions */ +int scan(C99 * c99); + +#endif /* !C99_SCANNER_H */