PHP Classes
Icontem

File: documentation.txt


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Debug  >  LR Parsing Tables  >  documentation.txt  
File: documentation.txt
Role: Documentation
Content type: text/plain
Description: Documentation
Class: LR Parsing Tables
Generate parsing tables for context free grammars
 

Contents

Class file image Download
The tables that are generated by this class are transition functions
that correlate with automata theory and can be executed by a finite
state machine, specifically a non-deterministic finite automata.

In English, this class will let you create the necessary LR tools
to parse any context-free grammar (in theory).

NOTE: If you don't know what LR means, don't try to parse any languages
with it. Learn this stuff first.

Providing we have a grammar, like so...

E -> E + E
E -> E - E
E -> ( E )
E -> int
E -> ident

... we can create LR tables that can be executed by an LR parser,
probably something generalized because of the lack of lookahead
symbols.

What this class will do is augment the grammar,

S -> E

create an item set and close (where int and ident, + and -, and "("
and ")" are terminals, S & E are nonterminals, and * are dots),

S -> * E
 + E -> E + E
 + E -> E - E
 + E -> ( E )
 + E -> int
 + E -> ident

and then continue this by rotating right and creating transitions
to each item set, such that:

ITEM SET 0
start -> • e
e -> • e T_PLUS e
e -> • e T_MINUS e
e -> • T_START_PAREN e T_END_PAREN
e -> • T_INT
e -> • T_IDENT

ITEM SET 1
start -> e • 
e -> e • T_PLUS e
e -> e • T_MINUS e

ITEM SET 2
e -> T_START_PAREN • e T_END_PAREN
e -> • e T_PLUS e
e -> • e T_MINUS e
e -> • T_START_PAREN e T_END_PAREN
e -> • T_INT
e -> • T_IDENT

ITEM SET 3
e -> T_INT • 


ITEM SET 4
e -> T_IDENT • 

ITEM SET 5
e -> e T_PLUS • e
e -> • e T_PLUS e
e -> • e T_MINUS e
e -> • T_START_PAREN e T_END_PAREN
e -> • T_INT
e -> • T_IDENT

ITEM SET 6
e -> e T_MINUS • e
e -> • e T_PLUS e
e -> • e T_MINUS e
e -> • T_START_PAREN e T_END_PAREN
e -> • T_INT
e -> • T_IDENT

ITEM SET 7
e -> T_START_PAREN e • T_END_PAREN
e -> e • T_PLUS e
e -> e • T_MINUS e

ITEM SET 8
e -> e T_PLUS e • 
e -> e • T_PLUS e
e -> e • T_MINUS e

ITEM SET 9
e -> e T_MINUS e • 
e -> e • T_PLUS e
e -> e • T_MINUS e

ITEM SET 10
e -> T_START_PAREN e T_END_PAREN • 

These will represent each state. Note, the above is what is outputted
by my class.

Additionally you must provide the class with the correct start symbol
such that 

start -> {provided}

and {provided} exists somewhere in your productions. Do not provide
undefined nonterminals.

LR_Parsing_Tables::LR_Parsing_Tables() will accept productions for
first argument and the start symbol for the second.

LR_Parsing_Tables::build() will build the tables and return them.

Use the other functions in the example to display the tables, which is
probably not your intention with these tables anyway.

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products