Adjusted comment_parser to new flex/bison build setup

This commit is contained in:
Marius Kintel 2017-01-19 00:19:46 -05:00
parent 7f4e9a12f2
commit af8b287e94
3 changed files with 19 additions and 40 deletions

View file

@ -208,8 +208,8 @@ FORMS += src/MainWindow.ui \
src/parameter/ParameterEntryWidget.ui
# AST nodes
FLEXSOURCES = src/lexer.l
BISONSOURCES = src/parser.y
FLEXSOURCES += src/lexer.l
BISONSOURCES += src/parser.y
HEADERS += src/AST.h \
src/ModuleInstantiation.h \
@ -230,35 +230,8 @@ SOURCES += src/AST.cc \
src/assignment.cc
# Comment parser
FLEX = src/comment_lexer.l
BISON = src/comment_parser.y
flexs.name = Flex ${QMAKE_FILE_IN}
flexs.input = FLEX
flexs.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}.cpp
flexs.commands = flex -o${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}.cpp ${QMAKE_FILE_IN}
flexs.CONFIG += target_predeps
flexs.variable_out = GENERATED_SOURCES
silent:flexs.commands = @echo Lex ${QMAKE_FILE_IN} && $$flexs.commands
QMAKE_EXTRA_COMPILERS += flexs
bison.name = Bison ${QMAKE_FILE_IN}
biso.input = BISON
biso.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}.cpp
biso.commands = bison -d -o ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}.cpp ${QMAKE_FILE_IN}
biso.commands += && if [[ -e ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}_yacc.hpp ]] ; then mv ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.hpp ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.h ; fi
biso.CONFIG += target_predeps
biso.variable_out = GENERATED_SOURCES
silent:biso.commands = @echo Bison ${QMAKE_FILE_IN} && $$biso.commands
QMAKE_EXTRA_COMPILERS += biso
biso_header.input = BISON
biso_header.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}.h
biso_header.commands = bison -d -o ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}.cpp ${QMAKE_FILE_IN}
biso_header.commands += && if [ -e ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}.hpp ]; then mv ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}.hpp ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}.h ; fi
biso_header.CONFIG += target_predeps no_link
silent:biso_header.commands = @echo Bison ${QMAKE_FILE_IN} && $$biso.commands
QMAKE_EXTRA_COMPILERS += biso_header
FLEXSOURCES += src/comment_lexer.l
BISONSOURCES += src/comment_parser.y
HEADERS += src/version_check.h \
src/ProgressWidget.h \

View file

@ -2,7 +2,7 @@
#include "Assignment.h"
#include "expression.h"
#include "value.h"
#include "comment_parser.h"
#include "comment_parser.hxx"
#include <boost/lexical_cast.hpp>
YY_BUFFER_STATE yy_scan_string ( const char *str ) ;
std::string stringcon;
@ -26,7 +26,7 @@ UNICODE {U2}{U}|{U3}{U}{U}|{U4}{U}{U}{U}
[+-]?{D}*\.{D}+{E}? |
[+-]?{D}+\.{D}*{E}? {
try {
yylval.num = boost::lexical_cast<double>(yytext);
comment_parserlval.num = boost::lexical_cast<double>(yytext);
return NUM;
} catch (boost::bad_lexical_cast) {}
}
@ -48,15 +48,15 @@ UNICODE {U2}{U}|{U3}{U}{U}|{U4}{U}{U}{U}
{UNICODE} { stringcon += yytext; }
[^\\\n\"] { stringcon += yytext; }
\" { BEGIN(INITIAL);
yylval.text = strdup(stringcon.c_str());
comment_parserlval.text = strdup(stringcon.c_str());
return WORD; }
<<EOF>> { BEGIN(INITIAL);
yylval.text = strdup(stringcon.c_str());
comment_parserlval.text = strdup(stringcon.c_str());
return WORD; }
}
[^(\[ \] \, \" \:)]* { yylval.text=strdup(yytext); return WORD;}
[^(\[ \] \, \" \:)]* { comment_parserlval.text=strdup(yytext); return WORD;}
. { }

View file

@ -7,8 +7,9 @@
#include "value.h"
#include "comment.h"
void yyerror(char *);
int yylex(void);
extern void yy_scan_string ( const char *str );
int comment_lexerlex(void);
int comment_parserlex(void);
extern void comment_lexer_scan_string ( const char *str );
Expression *params;
%}
%union {
@ -121,6 +122,11 @@ word:
}
%%
int comment_parserlex(void)
{
return comment_lexerlex();
}
void yyerror(char *msg) {
PRINTD("ERROR IN PARAMETER: Parser error in comments of file \n ");
params = NULL;
@ -128,8 +134,8 @@ void yyerror(char *msg) {
shared_ptr<Expression> CommentParser::parser(const char *text)
{
yy_scan_string(text);
int parserretval = yyparse();
comment_lexer_scan_string(text);
int parserretval = comment_parserparse();
if (parserretval != 0) return NULL;
return shared_ptr<Expression>(params);
}