Login   Register  
PHP Classes
elePHPant
Icontem

File: howto_grammar.txt

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Richard Keizer  >  Pragmatic BNF-a-like parser  >  howto_grammar.txt  >  Download  
File: howto_grammar.txt
Role: Documentation
Content type: text/plain
Description: grammar basics explained
Class: Pragmatic BNF-a-like parser
Parse language source with a BNF grammar syntax
Author: By
Last change:
Date: 2011-10-04 07:51
Size: 1,378 bytes
 

Contents

Class file image Download
How to write a grammar:

following the rules of writing grammar is very easy… writing good grammar is terribly difficult

these are the rules of writing a grammar:

* a grammar describes 1 or more rules.
* a rule is defined as:  symbol ::= expression
* symbol 'root' *must* be defined, this is the starting point.
* each expression is defined as 1 or more symbols and/or terminal nodes
* a terminal node is contained within single quotes ('') and may not contain spaces
* a terminal node is expressed by a regular expression (regex)
* equal symbols on the left-hand-side (LHS) of a rule are interpreted as boolean OR

example 1:
	animal ::= 'horse'
	animal ::= 'dog'
	animal ::= 'cow'

	is read as: animal = 'horse' OR 'dog' OR 'cow'

example 2: (recursion)
	animals ::= animal animals
	animals ::= animal

	is read as: animals =  any endless combination of animals OR a single animal
	note that the first rule's expression is 'animal animals', if we were writing 'animals animal' we would
	go endlessly recursive because the expression is evaluated left-to-right (and since animals equals animals
	we would have a problem)

example 3: (regex)
	digit ::= '[0-9]'	is read as any character '0'..'9'
	number ::= '[0-9]+'	is read as one or more characters '0'..'9'

	this makes it easy to stuff like:
	variable ::= '[a-zA-Z][a-zA-Z0-9]*'		(a variable starting with a alphanumeric)