#!/bin/bash # Parser builder # -------------------------------------------------------- function grammar { FILE="$1" PKG="$2" CLASS="$3" ## NAME="$(echo $N | tr '[:lower:]' '[:upper:]')" ## DIR1="$(echo $N | tr '[:upper:]' '[:lower:]')" DIR="../src/com/hp/hpl/jena/query/parser/$PKG" echo "---- Process grammar -- $1" javacc -OUTPUT_DIRECTORY=$DIR "${FILE}" RC=$? [ "$RC" = 0 ] || return ## echo "---- Create HTML" ## jjdoc -OUTPUT_FILE=${FILE%%.jj}.html "${FILE}" echo "---- Create text form" jjdoc -TEXT=true -OUTPUT_FILE=${FILE%%.jj}.txt "${FILE}" # Fix unnecessary imports echo "---- Fixing unused imports in ${NAME}TokenManager ..." F="$DIR/${CLASS}ParserTokenManager.java" sed -e 's/import .*//' < $F > F mv F $F echo "---- Done" } # -------------------------------------------------------- function rdqlGrammar { # This one uses the old RDQL expression code via JJTree ( echo "---- Process RDQL grammar" DIR="../src/com/hp/hpl/jena/query/parser/rdql" rm -f rdql-arq.jj jjtree "-OUTPUT_DIRECTORY=$DIR" rdql-arq.jjt RC=$? ## Move the .jj file back here mv $DIR/rdql-arq.jj . #echo "RC: $RC" if [ "$RC" = "0" ] then javacc -OUTPUT_DIRECTORY=../src/com/hp/hpl/jena/query/parser/rdql rdql-arq.jj rm rdql-arq.jj fi ) } # -------------------------------------------------------- if [ $# == 0 ] then set -- sparql arq ## echo "Usage: grammar [arq|sparql|rdql]" 1>&2 ## exit 1 fi for G in "$@" do case "$G" in sparql|sparql.jj) # The parser that is exactly the working group grammar. cpp -P -C -DSPARQL < master.jj > sparql.jj grammar sparql.jj sparql SPARQL ;; arq|arq.jj) cpp -P -C -DARQ < master.jj > arq.jj grammar arq.jj arq ARQ ;; sparql-alt|sparql-alt.jj) # The parser that was the working group grammar (RDQL style) grammar sparql-alt.jj sparql_alt SPARQLalt ;; rdql) echo "Tread carefully" 1>&2 rdqlGrammar ;; all) grammar sparql grammar arq # rdqlGrammar ;; *) echo "**** Unknown grammar: $G" 1>&2 ;; esac done