From 5cd9f5c9656660bbe1995ab308f7d322226536a5 Mon Sep 17 00:00:00 2001 From: Daniel Franke Date: Wed, 9 May 2018 10:11:57 +0200 Subject: regenerate-lexers.bash: Factor file names into variables --- Utilities/Scripts/regenerate-lexers.bash | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/Utilities/Scripts/regenerate-lexers.bash b/Utilities/Scripts/regenerate-lexers.bash index 22b681f..85cfd80 100755 --- a/Utilities/Scripts/regenerate-lexers.bash +++ b/Utilities/Scripts/regenerate-lexers.bash @@ -10,23 +10,29 @@ for lexer in \ Expr \ Fortran do + cxx_file=cm${lexer}Lexer.cxx + h_file=cm${lexer}Lexer.h + in_file=cm${lexer}Lexer.in.l + echo "Generating Lexer ${lexer}" - flex --nounistd -DFLEXINT_H --noline --header-file=cm${lexer}Lexer.h -ocm${lexer}Lexer.cxx cm${lexer}Lexer.in.l - sed -i 's/\s*$//' cm${lexer}Lexer.h cm${lexer}Lexer.cxx # remove trailing whitespaces - sed -i '${/^$/d;}' cm${lexer}Lexer.h cm${lexer}Lexer.cxx # remove blank line at the end - sed -i '1i#include "cmStandardLexer.h"' cm${lexer}Lexer.cxx # add cmStandardLexer.h include + flex --nounistd -DFLEXINT_H --noline --header-file=${h_file} -o${cxx_file} ${in_file} + sed -i 's/\s*$//' ${h_file} ${cxx_file} # remove trailing whitespaces + sed -i '${/^$/d;}' ${h_file} ${cxx_file} # remove blank line at the end + sed -i '1i#include "cmStandardLexer.h"' ${cxx_file} # add cmStandardLexer.h include done # these lexers (at the moment only the ListFileLexer) are compiled as C and do not generate a header for lexer in ListFile do + c_file=cm${lexer}Lexer.c + in_file=cm${lexer}Lexer.in.l echo "Generating Lexer ${lexer}" - flex --nounistd -DFLEXINT_H --noline -ocm${lexer}Lexer.c cm${lexer}Lexer.in.l - sed -i 's/\s*$//' cm${lexer}Lexer.c # remove trailing whitespaces - sed -i '${/^$/d;}' cm${lexer}Lexer.c # remove blank line at the end - sed -i '1i#include "cmStandardLexer.h"' cm${lexer}Lexer.c # add cmStandardLexer.h include + flex --nounistd -DFLEXINT_H --noline -o${c_file} ${in_file} + sed -i 's/\s*$//' ${c_file} # remove trailing whitespaces + sed -i '${/^$/d;}' ${c_file} # remove blank line at the end + sed -i '1i#include "cmStandardLexer.h"' ${c_file} # add cmStandardLexer.h include done -- cgit v0.12 From 3d382a494fd8d4aad1a4206559c316138441098d Mon Sep 17 00:00:00 2001 From: Daniel Franke Date: Wed, 9 May 2018 10:11:57 +0200 Subject: regenerate-lexers.bash: Add option to check timestamps --- Utilities/Scripts/regenerate-lexers.bash | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/Utilities/Scripts/regenerate-lexers.bash b/Utilities/Scripts/regenerate-lexers.bash index 85cfd80..b09f25b 100755 --- a/Utilities/Scripts/regenerate-lexers.bash +++ b/Utilities/Scripts/regenerate-lexers.bash @@ -2,6 +2,11 @@ set -e +forced=1 +if [[ "${1}" = "make" ]]; then + forced=0 +fi + pushd "${BASH_SOURCE%/*}/../../Source/LexerParser" > /dev/null for lexer in \ @@ -14,11 +19,15 @@ do h_file=cm${lexer}Lexer.h in_file=cm${lexer}Lexer.in.l + if [[ (${in_file} -nt ${cxx_file}) || (${in_file} -nt ${h_file}) || (${forced} -gt 0) ]]; then echo "Generating Lexer ${lexer}" - flex --nounistd -DFLEXINT_H --noline --header-file=${h_file} -o${cxx_file} ${in_file} - sed -i 's/\s*$//' ${h_file} ${cxx_file} # remove trailing whitespaces - sed -i '${/^$/d;}' ${h_file} ${cxx_file} # remove blank line at the end - sed -i '1i#include "cmStandardLexer.h"' ${cxx_file} # add cmStandardLexer.h include + flex --nounistd -DFLEXINT_H --noline --header-file=${h_file} -o${cxx_file} ${in_file} + sed -i 's/\s*$//' ${h_file} ${cxx_file} # remove trailing whitespaces + sed -i '${/^$/d;}' ${h_file} ${cxx_file} # remove blank line at the end + sed -i '1i#include "cmStandardLexer.h"' ${cxx_file} # add cmStandardLexer.h include + else + echo "Skipped generating Lexer ${lexer}" + fi done @@ -28,11 +37,15 @@ do c_file=cm${lexer}Lexer.c in_file=cm${lexer}Lexer.in.l - echo "Generating Lexer ${lexer}" - flex --nounistd -DFLEXINT_H --noline -o${c_file} ${in_file} - sed -i 's/\s*$//' ${c_file} # remove trailing whitespaces - sed -i '${/^$/d;}' ${c_file} # remove blank line at the end - sed -i '1i#include "cmStandardLexer.h"' ${c_file} # add cmStandardLexer.h include + if [[ (${in_file} -nt ${c_file}) || (${forced} -gt 0) ]]; then + echo "Generating Lexer ${lexer}" + flex --nounistd -DFLEXINT_H --noline -o${c_file} ${in_file} + sed -i 's/\s*$//' ${c_file} # remove trailing whitespaces + sed -i '${/^$/d;}' ${c_file} # remove blank line at the end + sed -i '1i#include "cmStandardLexer.h"' ${c_file} # add cmStandardLexer.h include + else + echo "Skipped generating Lexer ${lexer}" + fi done -- cgit v0.12 From 7a33cfc1bce0a4946da166327515557b48d3a2ea Mon Sep 17 00:00:00 2001 From: Daniel Franke Date: Wed, 9 May 2018 10:11:57 +0200 Subject: regenerate-parsers.bash: Add script to automate parser generation This depends on - a suitable flex version in PATH (currently 3.0.4) - a suitable version of 'sed' in PATH (e.g. GNU sed) --- Utilities/Scripts/regenerate-parsers.bash | 37 +++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100755 Utilities/Scripts/regenerate-parsers.bash diff --git a/Utilities/Scripts/regenerate-parsers.bash b/Utilities/Scripts/regenerate-parsers.bash new file mode 100755 index 0000000..6fb35c0 --- /dev/null +++ b/Utilities/Scripts/regenerate-parsers.bash @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +set -e + +forced=1 +if [[ "${1}" = "make" ]]; then + forced=0 +fi + +pushd "${BASH_SOURCE%/*}/../../Source/LexerParser" > /dev/null + +for parser in \ + CommandArgument \ + DependsJava \ + Expr \ + Fortran +do + in_file=cm${parser}Parser.y + cxx_file=cm${parser}Parser.cxx + h_file=cm${parser}ParserTokens.h + prefix=cm${parser}_yy + + if [[ (${in_file} -nt ${cxx_file}) || (${in_file} -nt ${h_file}) || (${forced} -gt 0) ]]; then + echo "Generating Parser ${parser}" + bison --yacc --name-prefix=${prefix} --defines=${h_file} -o${cxx_file} ${in_file} + sed -i '/\/\* Else will try to reuse/ i\ +#if 0 +/^yyerrlab1:/ a\ +#endif +' ${cxx_file} + else + echo "Skipped generating Parser ${parser}" + fi +done + + +popd > /dev/null -- cgit v0.12