#!/bin/sh# yyacc - yacc wrapper## Allows tokens to be written as `literal` and then automatically# substituted with #defined tokens.## Usage:# yyacc file.y filetab.h file.yy## inputs:# file.yy yacc grammar with ` literals## outputs:# file.y yacc grammar# filetab.h array of string <-> token mappings## 03-13-93 - Documented and p moved in sed command (for some reason,# s/x/y/p doesn't work).# 10-12-93 - Take basename as second argument.# 12-31-96 - reversed order of args to be compatible with GenFile rule# 03/19/02 (seiwald) - suffix symbols with _t to avoid conflicts#outy=${1?}outh=${2?}in=${3?}out=`basename $in .yy`T=/tmp/yy$$trap 'rm -f $T.*' 0sed ': 1/`/{hs/[^`]*`\([^`]*\)`.*/\1/pgs/[^`]*`[^`]*`//b 1}d' $in | sort -u | sed 'hy/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/s/:/_COLON/s/!/_BANG/s/&&/_AMPERAMPER/s/&/_AMPER/s/+/_PLUS/s/||/_BARBAR/s/|/_BAR/s/;/_SEMIC/s/-/_MINUS/s/</_LANGLE/s/>/_RANGLE/s/\./_PERIOD/s/?/_QUESTION/s/=/_EQUALS/s/,/_COMMA/s/\[/_LBRACKET/s/]/_RBRACKET/s/{/_LBRACE/s/}/_RBRACE/s/(/_LPAREN/s/)/_RPAREN/s/.*/&_t/Gs/\n/ /' > $T.1sed 's:^\(.*\) \(.*\)$:s/`\2`/\1/g:s:\.:\\.:gs:\[:\\[:g' $T.1 > $T.srm -f $outy $outh(sed 's:^\(.*\) \(.*\)$:%token \1:' $T.1sed -f $T.s $in) > $outy(sed 's:^\(.*\) \(.*\)$: { "\2", \1 },:' $T.1) > $outh