Skip to content
PEP is an Earley Parser: an implementation of Earley's CFG chart-parsing algorithm in Java
Java HTML Shell
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.


Type Name Latest commit message Commit time
Failed to load latest commit information.


Pep version 0.4: an Earley parser in Java, Copyright (C) 2007 Scott Martin.

Pep is free software distributed under the terms of the GNU Lesser General
Public License. See the COPYING file for details.

Author: Scott Martin (

The name `Pep' stands for "Pep is an Earley Parser" and is an example of
direct left recursion. Pep can both recognize and parse strings of any
context-free grammar (CFG). For the parsing case, Pep provides all possible
parses of a given string according to a given grammar. Several sample grammars
are provided in the ./samples directory. For an example of how to use Pep as a
library, see the command-line front end implemented in
edu/osu/ling/pep/ (found in the ./src directory).

Thanks to Detmar Meurers for providing the `tiny' grammar, to Jim Slattery
for pointing out that ParseTree.children is much better represented as a
java.util.List than a java.util.Set, and to Harun Resit Zafer for noticing that 
GrammarParser should really be public.

		Java Runtime Environment >= 1.5
		Ant >= 1.6.1
		JUnit >= 3.8.1

1.	Set the environment variable PEP_HOME to the directory where Pep is
	unpacked. For example, with Pep's directory as the current directory,
	$ export PEP_HOME=`pwd`
	on Linux systems.

2.	Invoke Pep using the shell script in $PEP_HOME/bin/pep. The location of
	the grammar to use, seed category, and string to parse must be
	specified. Example (again from $PEP_HOME on a Linux machine):
	$ ./bin/pep -v -g samples/miniscule.xml -s S the boy left
	or equivalently (reading from standard input):
	$ echo the boy left | ./bin/pep -v -g samples/miniscule.xml -s S -
	This command will parse the string `the boy left' using the grammar in
	samples/miniscule.xml for the seed category `S'. Pep can show more or less
	information about what it is doing depending on the level of verbosity, as
	specified by the flag "-v n" (where n is the verbosity level, and 1 is 
	assumed for n if it is omittied). For more help on Pep's options, invoke 
	pep as above with `-h' or `--help' among the arguments.
	The $PEP_HOME/samples directory contains several sample grammars. Each
	grammar is specified in its own XML file, and example sentences are
	listed. The file etc/grammar.xsd contains an XML schema describing the format
	of Pep's grammar files.

An ant build file (build.xml) is included for building Pep from source. To
compile Pep's source to Java bytecode, just run ant with the `compile' target:

$ ant compile

The packaged Pep library can also be recreated using the `package' task.

The ant build file (as discussed above in `Building') contains a target for
compiling and running the JUnit tasks that test Pep. To run all unit tests,
just run ant with the `test' target.

Javadoc API documentation for Pep can be generated using the `document' task,
which will place the API docs in $PEP_HOME/docs/api.
You can’t perform that action at this time.