mirror of
https://review.haiku-os.org/buildtools
synced 2024-11-23 07:18:49 +01:00
ecc89c9a6a
git-svn-id: file:///srv/svn/repos/haiku/buildtools/trunk@15729 a95241bf-73f2-0310-859d-f6bbb57e9c96
89 lines
1.4 KiB
Bash
Executable File
89 lines
1.4 KiB
Bash
Executable File
#!/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.*' 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
|