yyacc #1

  • //
  • guest/
  • miklos_fazekas/
  • jamnewlex/
  • yyacc
  • View
  • Commits
  • Open Download .zip Download (1 KB)
#!/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
# Change User Description Committed
#1 2540 Miklos Fazekas New lexical scanner
//guest/perforce_software/jam/src/yyacc
#4 2493 rmg Rewrite the past: update all jam's source with comments to
reflect changes since about 2.3, very early 2001.

Whitespace only change.

=== computer:1666: Change 37660 by seiwald@play-seiwald on 2002/11/06 22:41:35

Note: I regenerated jamgram.c on my linux 7.3 system prior to
the submit, since patch was so unhappy trying to lay down the
changes from Christopher's change. Presumably this is just due to
different yacc/bison/whatever particulars on the system where
Christopher made the changes originally. - rmg
#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