#!/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 # # 3-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 outy=${1?} outh=${2?} in=${3?} out=`basename $in .yy` T=/tmp/yy$$ trap 'rm -f $T.*' 0 sed ' : 1 /`/{ h s/[^`]*`\([^`]*\)`.*/\1/ p g s/[^`]*`[^`]*`// b 1 } d ' $in | sort -u | sed ' h y/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/ G s/\n/ / ' > $T.1 sed ' s:^\(.*\) \(.*\)$:s/`\2`/\1/g: s:\.:\\.:g s:\[:\\[:g ' $T.1 > $T.s rm -f $outy $outh ( sed 's:^\(.*\) \(.*\)$:%token \1:' $T.1 sed -f $T.s $in ) > $outy ( sed 's:^\(.*\) \(.*\)$: { "\2", \1 },:' $T.1 ) > $outh
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 1991 | Yonas Jongkind | Creating a branch so that I can edit it. | ||
//guest/perforce_software/jam/src/yyacc | |||||
#3 | 1565 | Perforce staff |
Suffix yyacc generated symbols with _t to ensure they don't conflict with other symbols, as RULE was. |
||
#2 | 76 | Laura Wingerd |
Integrate command-block-too-long fix, plus minor doc updates. Jam/MR release level is now 2.2.5. (change 72, change 73, change 74, change 75) |
||
#1 | 2 | laura | Add Jam/MR 2.2 source |