| 
														
															@@ -19,21 +19,29 @@ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 // 
														 | 
														
														 | 
														
															 // 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 // ===========================================================================*/ 
														 | 
														
														 | 
														
															 // ===========================================================================*/ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+%option reentrant bison-bridge bison-locations 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+/*%option prefix="qlow_parser_" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+*/ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+%option yylineno nounput noinput 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+/*%option stack 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+*/ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+%option 8bit 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+%option header-file="lexer.h" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 %{ 
														 | 
														
														 | 
														
															 %{ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #include "Ast.h" 
														 | 
														
														 | 
														
															 #include "Ast.h" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #include "parser.hpp" 
														 | 
														
														 | 
														
															 #include "parser.hpp" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #define yylval qlow_parser_lval 
														 | 
														
														 | 
														
															 #define yylval qlow_parser_lval 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-#define SET_TOKEN(t) (yylval.token = t) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-#define SET_STRING (yylval.string = new std::string(yytext, yyleng)) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+#define SET_TOKEN(t) (yylval_param->token = t) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+#define SET_STRING (yylval_param->string = new std::string(yytext, yyleng)) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-extern "C" int yywrap() 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+extern "C" int yywrap(yyscan_t s) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 { 
														 | 
														
														 | 
														
															 { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     return 1; /* do not continue on EOF */ 
														 | 
														
														 | 
														
															     return 1; /* do not continue on EOF */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-/*  */ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-int commentDepth; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 size_t offset; 
														 | 
														
														 | 
														
															 size_t offset; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 extern QLOW_PARSER_LTYPE qlow_parser_lloc; 
														 | 
														
														 | 
														
															 extern QLOW_PARSER_LTYPE qlow_parser_lloc; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -52,10 +60,6 @@ extern const char* qlow_parser_filename; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 %} 
														 | 
														
														 | 
														
															 %} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-%option prefix="qlow_parser_" 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-%option yylineno 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-%option stack 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 %x COMMENT 
														 | 
														
														 | 
														
															 %x COMMENT 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 %x LINE_COMMENT 
														 | 
														
														 | 
														
															 %x LINE_COMMENT 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 %x STRING 
														 | 
														
														 | 
														
															 %x STRING 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -68,21 +72,23 @@ UTF8CHAR [\x00-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xe 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 %% 
														 | 
														
														 | 
														
															 %% 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    int commentDepth = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 <COMMENT>"/*"           commentDepth++; 
														 | 
														
														 | 
														
															 <COMMENT>"/*"           commentDepth++; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 <COMMENT>"*/"           if ((--commentDepth) == 0) { BEGIN(INITIAL); }; 
														 | 
														
														 | 
														
															 <COMMENT>"*/"           if ((--commentDepth) == 0) { BEGIN(INITIAL); }; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 <COMMENT>\n             offset = 0; 
														 | 
														
														 | 
														
															 <COMMENT>\n             offset = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 <COMMENT>.              ; // inside comment, ignore everything 
														 | 
														
														 | 
														
															 <COMMENT>.              ; // inside comment, ignore everything 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-<LINE_COMMENT>\n        offset = 0; yy_pop_state(); //yy_push_state(INITIAL); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+<LINE_COMMENT>\n        offset = 0; yy_pop_state(yyscanner); //yy_push_state(INITIAL); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 <LINE_COMMENT>.         ; // inside comment, ignore everything 
														 | 
														
														 | 
														
															 <LINE_COMMENT>.         ; // inside comment, ignore everything 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-<STRING>"\""            yy_pop_state(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+<STRING>"\""            yy_pop_state(yyscanner); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 <STRING>[^\"^\n]*          printf("%s\n", std::string(yytext, yyleng).c_str()); 
														 | 
														
														 | 
														
															 <STRING>[^\"^\n]*          printf("%s\n", std::string(yytext, yyleng).c_str()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 <STRING>\n              offset = 0; SET_STRING; return UNEXPECTED_SYMBOL;  
														 | 
														
														 | 
														
															 <STRING>\n              offset = 0; SET_STRING; return UNEXPECTED_SYMBOL;  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-"/*"                    yy_push_state(COMMENT); commentDepth = 1; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-"//"                    yy_push_state(LINE_COMMENT); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-"\""                    yy_push_state(STRING); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+"/*"                    yy_push_state(COMMENT, yyscanner); commentDepth = 1; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+"//"                    yy_push_state(LINE_COMMENT, yyscanner); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+"\""                    yy_push_state(STRING, yyscanner); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 [\t ]                   ; // Space or tab ignored 
														 | 
														
														 | 
														
															 [\t ]                   ; // Space or tab ignored 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -90,8 +96,8 @@ UTF8CHAR [\x00-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xe 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 \n                      offset = 0; //return SET_TOKEN(NEW_LINE); 
														 | 
														
														 | 
														
															 \n                      offset = 0; //return SET_TOKEN(NEW_LINE); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 "class"                 return SET_TOKEN(CLASS); 
														 | 
														
														 | 
														
															 "class"                 return SET_TOKEN(CLASS); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-"do"                    yy_push_state(METHOD); return SET_TOKEN(DO); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-<METHOD>"end"           yy_pop_state(); return SET_TOKEN(END); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+"do"                    yy_push_state(METHOD, yyscanner); return SET_TOKEN(DO); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+<METHOD>"end"           yy_pop_state(yyscanner); return SET_TOKEN(END); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 <INITIAL>"end"          return SET_TOKEN(END); 
														 | 
														
														 | 
														
															 <INITIAL>"end"          return SET_TOKEN(END); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 "if"                    return SET_TOKEN(IF); 
														 | 
														
														 | 
														
															 "if"                    return SET_TOKEN(IF); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 "while"                 return SET_TOKEN(WHILE); 
														 | 
														
														 | 
														
															 "while"                 return SET_TOKEN(WHILE); 
														 |