# This file is part of flex.

# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:

# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.

# Neither the name of the University nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.

# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE.

EXTRA_DIST = \
	ChangeLog \
	Makefile.examples \
	README \
	cat.lex   \
	dates.lex \
	datetest.dat \
	eof_rules.lex \
	eof_test01.txt \
	eof_test02.txt \
	eof_test03.txt \
	expr.lex \
	expr.y \
	front.lex \
	front.y \
	j2t.lex \
	myname.lex \
	myname.txt \
	myname2.lex \
	numbers.lex \
	pas_include.lex \
	pascal.lex \
	reject.lex \
	replace.lex \
	string1.lex \
	string2.lex \
	strtest.dat \
	unput.lex \
	user_act.lex \
	userinit.lex \
	wc.lex \
	yymore.lex \
	yymore2.lex \
	yymoretest.dat
