CONFIG: report parser stats with wmake/scripts/makeParser

This commit is contained in:
Mark Olesen 2019-10-08 18:58:32 +02:00 committed by Andrew Heather
parent e81fda7924
commit f2c4d7b81b
2 changed files with 29 additions and 8 deletions

View File

@ -1,11 +1,13 @@
#!/bin/sh
cd ${0%/*} || exit 1 # Run from this directory
# Manually create ragel scanner and the lemon parser header
# Manually create ragel scanner and lemon parser header
prefix=evalStringToScalar
"$WM_PROJECT_DIR/wmake/scripts/makeParser" \
-scanner=evalStringToScalarScanner.rl \
-parser=evalStringToScalarLemonParser.lyy \
;
-prefix="$prefix" \
-scanner=Scanner.rl \
-parser=LemonParser.lyy \
"$@"
#------------------------------------------------------------------------------

View File

@ -25,8 +25,12 @@ usage() {
Usage: ${0##*/} [options]
options:
-prefix=NAME Common prefix for parser and scanner
-parser=FILE Generate lemon parser header
-scanner=FILE Generate ragel scanner code
-parser Use 'LemonParser.lyy' for non-prefixed parser name
-scanner Use 'Scanner.rl' for non-prefixed scanner name
-code Generate lemon parser code
-remove Remove generated code
-h, -help Print the usage
@ -40,14 +44,19 @@ USAGE
# Parse arguments and options
#------------------------------------------------------------------------------
unset parser scanner optRemove
unset prefix parser scanner optCode optRemove
while [ "$#" -gt 0 ]
do
case "$1" in
(-h | -help*) usage ;;
(-prefix=*) prefix="${1#*=}" ;;
(-parser=*) parser="${1#*=}" ;;
(-scanner=*) scanner="${1#*=}" ;;
(-parser) parser=LemonParser.lyy ;;
(-scanner) scanner=Scanner.rl ;;
(-code) optCode=true ;;
(-remove) optRemove=true ;;
(*) break ;;
@ -70,7 +79,8 @@ removeFile() {
case "$scanner" in
(*.rl)
output="${scanner%.*}.cc"
input="${prefix}${scanner}"
output="${prefix}${scanner%.*}.cc"
if [ "$optRemove" = true ]
then
@ -78,24 +88,33 @@ case "$scanner" in
elif command -v ragel >/dev/null
then
echo "Generating ragel scanner"
ragel -G2 -o "$output" "$scanner"
ragel -G2 -o "$output" "$input"
else
echo "No ragel, leaving scanner intact"
fi
echo
;;
esac
case "$parser" in
(*.ly | *.lyy)
extCode=cc
input="${prefix}${parser}"
output="${parser%.*}.h"
if [ "$optRemove" = true ]
then
removeFile "$output" "lemon header"
elif [ "$optCode" = true ]
then
echo "Generating lemon parser code ($extCode)"
"$WM_PROJECT_DIR/wmake/scripts/wrap-lemon" -e"$extCode" -s "$input"
else
echo "Generating lemon parser header"
"$WM_PROJECT_DIR/wmake/scripts/wrap-lemon" -header "$parser"
"$WM_PROJECT_DIR/wmake/scripts/wrap-lemon" -header -s "$input"
fi
echo
;;
esac