فهرست منبع

made parser reentrant

Nicolas Winkler 6 سال پیش
والد
کامیت
4060b389c7
5فایلهای تغییر یافته به همراه24 افزوده شده و 23 حذف شده
  1. BIN
      src/ast/Ast.o
  2. BIN
      src/ast/AstVisitor.o
  3. 6 8
      src/ast/lexer.l
  4. 12 9
      src/ast/syntax.y
  5. 6 6
      src/makefile

BIN
src/ast/Ast.o


BIN
src/ast/AstVisitor.o


+ 6 - 8
src/lexer.l → src/ast/lexer.l

@@ -20,27 +20,25 @@
 // ===========================================================================*/
 
 %option reentrant bison-bridge bison-locations
-/*%option prefix="qlow_parser_"
-*/
+%option prefix="qlow_parser_"
 %option yylineno nounput noinput
-/*%option stack
-*/
+%option stack
+
 %option 8bit
 %option header-file="lexer.h"
 
 %{
-#include "Ast.h"
-#include "parser.hpp"
+#include "syntax.hpp"
 
 
 #define yylval qlow_parser_lval
 #define SET_TOKEN(t) (yylval_param->token = t)
 #define SET_STRING (yylval_param->string = new std::string(yytext, yyleng))
 
-extern "C" int yywrap(yyscan_t s)
+/*extern "C" int yywrap(yyscan_t s)
 {
     return 1; /* do not continue on EOF */
-}
+/*}*/
 
 
 size_t offset;

+ 12 - 9
src/parser.y → src/ast/syntax.y

@@ -21,13 +21,18 @@
 
 %code requires {
 #include "Ast.h"
-    using QLOW_PARSER_LTYPE = qlow::CodePosition;
-    union QLOW_PARSER_STYPE;
-    using YYLTYPE = QLOW_PARSER_LTYPE;
-    using YYSTYPE = QLOW_PARSER_STYPE;
+
+using QLOW_PARSER_LTYPE = qlow::CodePosition;
+using YYLTYPE = QLOW_PARSER_LTYPE;
 #define QLOW_PARSER_LTYPE_IS_DECLARED
 
-#include "lexer.h"
+union QLOW_PARSER_STYPE;
+using YYSTYPE = QLOW_PARSER_STYPE;
+
+#ifndef YY_TYPEDEF_YY_SCANNER_T
+#define YY_TYPEDEF_YY_SCANNER_T
+typedef void* yyscan_t;
+#endif
 }
 
 %{
@@ -38,14 +43,12 @@
 #include <cstdio>
 #include "Ast.h"
 #include "ErrorReporting.h"
+#include "syntax.h"
+#include "lexer.h"
 
 using namespace qlow::ast;
 
 
-#ifndef YY_TYPEDEF_YY_SCANNER_T
-#define YY_TYPEDEF_YY_SCANNER_T
-using yyscan_t = void*;
-#endif
 //extern int qlow_parser_lex();
 //void yy_pop_state();
 

+ 6 - 6
src/makefile

@@ -17,11 +17,11 @@ endif
 YACC := bison
 YACCFLAGS := -d
 LEX := flex
-LEXFLAGS := "-8"
+LEXFLAGS :=
 
 #OBJECTS := $(patsubst %.cpp, %.o, $(wildcard *.cpp */*.cpp))
-OBJECTS := $(patsubst %.cpp, %.o, $(wildcard *.cpp)) \
-    parser.o lexer.o
+OBJECTS := $(patsubst %.cpp, %.o, $(wildcard *.cpp */*.cpp)) \
+    ast/syntax.o ast/lexer.o
 LIBRARIES := 
 EXECUTABLE := qlow
 
@@ -38,7 +38,7 @@ debug: all
 $(EXECUTABLE): $(OBJECTS)
 	$(CXX) $^ $(LDFLAGS) -o $@
 
-parser.o: parser.cpp
+ast/syntax.o: ast/syntax.cpp
 	$(CXX) -c -o $@ $< $(CXXFLAGS) -fno-strict-aliasing
 
 %.o: %.cpp
@@ -47,13 +47,13 @@ parser.o: parser.cpp
 %.cpp: %.y
 	$(YACC) -o $@ $< $(YACCFLAGS)
 
-%.cpp: %.l parser.cpp
+%.cpp: %.l ast/syntax.cpp
 	$(LEX) $(LEXFLAGS) -o $@ $<
 
 
 
 .PHONY: clean
 clean:
-	rm -f $(EXECUTABLE) $(OBJECTS) parser.cpp parser.hpp lexer.cpp
+	rm -f $(EXECUTABLE) $(OBJECTS) ast/syntax.cpp ast/syntax.hpp ast/lexer.cpp ast/lexer.h