From 21e8c6c4ca6e026e13e4c341b52b904358c2da5e Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 12 Jun 2018 23:57:08 -0400 Subject: [PATCH] add class declaration to the parser --- src/parser/parser.l | 2 ++ src/parser/parser.yc | 23 +++++++++++++++++++++++ tests/t006.cxl | 10 ++++++++++ tests/t006.x | 0 4 files changed, 35 insertions(+) create mode 100644 tests/t006.cxl create mode 100644 tests/t006.x diff --git a/src/parser/parser.l b/src/parser/parser.l index 7060c96..faee203 100644 --- a/src/parser/parser.l +++ b/src/parser/parser.l @@ -131,6 +131,8 @@ asm return ASM; __asm__ return ASM; __extension__ return EXTENSION; +class return CLASS; + L?'[^\\]' return CHAR_CONST; L?'\\.' return CHAR_CONST; L?'\\x[0-9A-Fa-f]{2}' return CHAR_CONST; diff --git a/src/parser/parser.yc b/src/parser/parser.yc index 94c228b..85b5e6a 100644 --- a/src/parser/parser.yc +++ b/src/parser/parser.yc @@ -117,6 +117,8 @@ int yylex(YYSTYPE *, YYLTYPE *); %token ASM; %token EXTENSION; +%token CLASS; + %start translation_unit %% @@ -591,6 +593,7 @@ type_specifier | UNSIGNED { $$ = $1; } | struct_or_union_specifier { $$ = $1; } | enum_specifier { $$ = $1; } + | class_specifier { $$ = $1; } | TYPE_NAME { $$ = $1; } ; @@ -743,6 +746,26 @@ enumerator } ; +class_specifier + : CLASS IDENTIFIER LCURLY RCURLY { + $$ = new Node(NODE_TYPE_LIST); + } + | CLASS IDENTIFIER LCURLY external_declaration_list RCURLY { + $$ = new Node(NODE_TYPE_LIST); + } + ; + +external_declaration_list + : external_declaration { + $$ = new Node(NODE_TYPE_LIST); + $$->list->push_back($1); + } + | external_declaration_list external_declaration { + $$ = $1; + $$->list->push_back($2); + } + ; + type_qualifier : CONST { $$ = $1; } | VOLATILE { $$ = $1; } diff --git a/tests/t006.cxl b/tests/t006.cxl new file mode 100644 index 0000000..1057893 --- /dev/null +++ b/tests/t006.cxl @@ -0,0 +1,10 @@ +#include + +class Foo +{ +}; + +int main(int argc, char * argv[]) +{ + return 0; +} diff --git a/tests/t006.x b/tests/t006.x new file mode 100644 index 0000000..e69de29