#!/bin/bash CC=cc TURTLESDIR=`dirname $0` if (( $# == 0 )) ; then echo "Usage: build-turtles-parser LANGFILE"; echo "Generate a turtles parser from a LANG.lang.xml file."; exit 1; fi LANGFILE=$1 LANG=`basename $LANGFILE .lang.xml` BUILDDIR=$LANG"_parser_builddir" if ! xmllint --noout $LANGFILE; then echo "Malformed XML file." exit 1; fi case $LANGFILE in *".lang.xml") ;; *) echo LANGFILE must have the form '$LANG.lang.xml'; exit 1; ;; esac rm -rf $BUILDDIR mkdir $BUILDDIR cd $BUILDDIR TURTLESDIR=../$TURTLESDIR # Resolve language. xsltproc $TURTLESDIR/resolve_lists.xsl ../$LANGFILE | \ xsltproc -o $LANG.resolved-lang.xml \ $TURTLESDIR/enumerate_productions.xsl - # Generate BNF. xsltproc -o ../$LANG.bnf $TURTLESDIR/language2bnf.xsl \ $LANG.resolved-lang.xml # Generate the lexer. xsltproc -o $LANG"_lexer.l" \ $TURTLESDIR/generate_flex_lexer.xsl \ $LANG.resolved-lang.xml flex -o$LANG"_lexer.c" $LANG"_lexer.l" # Generate the parser. xsltproc -o $LANG"_parser.y" \ $TURTLESDIR/generate_bison_parser.xsl \ $LANG.resolved-lang.xml bison -v -d $LANG"_parser.y" # Compile. $CC `xml2-config --cflags --libs` \ -o ../$LANG"_parser" \ $LANG"_parser.tab.c"