From 93fe98f7fd5433ca9514928f2d91315cba3f13b1 Mon Sep 17 00:00:00 2001 From: josh Date: Tue, 12 Jan 2010 21:54:09 +0000 Subject: [PATCH] c_statement handler printing the string literal! git-svn-id: svn://anubis/jtlc/trunk@10 f5bc74b8-7b62-4e90-9214-7121d538519f --- parser/parser.h | 5 ++++- parser/parser.lex | 2 ++ parser/parser.yy | 15 +++++++++++---- tests/Initial.jtl | 2 ++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/parser/parser.h b/parser/parser.h index 522ac56..d8ecb9c 100644 --- a/parser/parser.h +++ b/parser/parser.h @@ -3,7 +3,10 @@ #define PARSER_H #include "util/refptr.h" +#include "parser/Node.h" -void parse(const char * fileName); +#define YYSTYPE refptr + +YYSTYPE parse(const char * fileName); #endif diff --git a/parser/parser.lex b/parser/parser.lex index ed33fe9..b5f68d6 100644 --- a/parser/parser.lex +++ b/parser/parser.lex @@ -4,6 +4,7 @@ %{ +#include "parser.h" #include "parser.tab.hh" #include using namespace std; @@ -93,6 +94,7 @@ struct return STRUCT; \" { /* end of the string literal */ BEGIN(INITIAL); + *yylval = new StringNode(build_string); return STRING_LITERAL; } \\x[0-9A-Fa-f]{2} { diff --git a/parser/parser.yy b/parser/parser.yy index 56f8f80..44d7512 100644 --- a/parser/parser.yy +++ b/parser/parser.yy @@ -3,8 +3,8 @@ #include #include -#include "parser.tab.hh" /* bison-generated header with YY[SL]TYPE */ #include "parser.h" +#include "parser.tab.hh" /* bison-generated header with YY[SL]TYPE */ using namespace std; #define yyerror(msg) errFunc(msg, &yylloc) @@ -20,6 +20,8 @@ int yywrap() return 1; } +static YYSTYPE parse_result; + %} %pure-parser @@ -88,6 +90,10 @@ int yywrap() %% +program: program_items { + } + ; + program_items: /* empty */ | program_item program_items ; @@ -198,24 +204,25 @@ lvalue: IDENTIFIER ; c_statement: C LPAREN STRING_LITERAL RPAREN SEMICOLON { + printf("c_statement: '%s'\n", $3->getString().c_str()); } ; %% -void parse(const char * fileName) +YYSTYPE parse(const char * fileName) { yyin = fopen(fileName, "r"); if (yyin == NULL) { cerr << "Failed to open file '" << fileName << "'" << endl; - return; } - if (yyparse()) + else if (yyparse()) { cerr << "Aborting." << endl; exit(1); } + return parse_result; } void errFunc(const char * str, YYLTYPE * yyllocp) diff --git a/tests/Initial.jtl b/tests/Initial.jtl index e69de29..cb6549b 100644 --- a/tests/Initial.jtl +++ b/tests/Initial.jtl @@ -0,0 +1,2 @@ + +c("This is C to be output by my compiler");