Parse tree design

From CSSEMediaWiki
(Difference between revisions)
Jump to: navigation, search
(1st Design)
m (Removed last year's efforts)
Line 9: Line 9:
 
== Terminology ==
 
== Terminology ==
 
In parsing lingo a ''symbol'' is a name in a grammar.  Each symbol is either a ''terminal'' or a ''non-terminal''.  Non-terminals appear on the left hand side of a grammar production; terminals don't.
 
In parsing lingo a ''symbol'' is a name in a grammar.  Each symbol is either a ''terminal'' or a ''non-terminal''.  Non-terminals appear on the left hand side of a grammar production; terminals don't.
 
== Class-Design ==
 
 
=== 1st Design ===
 
[[Image:ParseTree.jpeg]]
 
 
That's the first Design that came up in class. It is a [[Composite]] Pattern.
 
*the addKid()-function in the Terminal class throws an exception
 
*symbol is of type [[Enum idiom|enum]], which has a representation for every symbol of the grammar.
 
 
Problem: [[Beware type switches|Beware of Typeswitch]]
 
 
=== 2nd Design ===
 
[[Image:ParseTreeEnum.jpeg]]
 
 
To overcome the [[Beware type switches|Beware of Typeswitch]] problem an enum-hierarchy was added, so that a NonTerminal Symbol cannot have a Terminal Symbol.
 

Revision as of 00:47, 3 August 2009

A context free grammar defines a language, e.g.

Grammar.gif

A parse tree shows how a sentence in the language is structured according to the grammar.

Parsetree.gif

Terminology

In parsing lingo a symbol is a name in a grammar. Each symbol is either a terminal or a non-terminal. Non-terminals appear on the left hand side of a grammar production; terminals don't.

Personal tools