1 // Implementation of CGrammarRule methods
2 // Copyright © 2009 The University of Chicago
3 #include "GrammarRule.h"
7 #include "StringSurrogate.h"
11 CGrammarRule::CGrammarRule()
15 CGrammarRule::~CGrammarRule()
19 CSS
CGrammarRule::GetLHS()
25 CParse
CGrammarRule::GetRHS()
28 for( int i
= 2; i
<= m_PieceCount
; i
++ )
30 rightHandSide
.Append( GetPiece(i
) );
37 QString
CGrammarRule::Display()
42 String
= GetPiece(1).Display() + " -> " + GetPiece(2).Display();
43 for( int i
= 3; i
<= m_PieceCount
; i
++ )
46 String
+= GetPiece(i
).Display();
55 //==========================================
57 CTerminalRule::CTerminalRule( QString leftSide
)
59 m_leftSide
= CSS( leftSide
);
63 CTerminalRule::~CTerminalRule()
67 CSS
CTerminalRule::GetLHS()
69 return m_leftSide
.GetKey();
73 CParse
CTerminalRule::GetRHS()
75 CParse
rightSide( GetKey() );
76 for( int i
= 0; i
<= rightSide
.GetKeyLength(); i
++ )
78 rightSide
.CutNFromTheLeft(i
);
85 QString
CTerminalRule::Display()
90 String
= m_leftSide
.Display() + " -> " + QString( GetKey()[0] );
91 for( int i
= 1; i
< GetKeyLength(); i
++ )
94 String
+= QString( GetKey()[i
] );
102 //==========================================
104 CWildCardRule::CWildCardRule( QString leftSide
, int width
)
111 CWildCardRule::~CWildCardRule()
115 CSS
CWildCardRule::GetLHS()
121 CParse
CWildCardRule::GetRHS()
124 QString rightSide
= "";
125 for( i
= 0; i
< m_Width
; i
++ )
127 rightSide
+= GRAMMAR_RULE_WILD_CARD
;
132 for( i
= 0; i
<= parse
.GetKeyLength(); i
++ )
134 parse
.CutNFromTheLeft(i
);
141 QString
CWildCardRule::Display()
146 String
= GetLHS().Display() + " -> " + GRAMMAR_RULE_WILD_CARD
;
147 for( int i
= 1; i
< m_Width
; i
++ )
150 String
+= GRAMMAR_RULE_WILD_CARD
;