HowManyAreAnalyzed(): use status_user_agent to report progress
[linguistica.git] / GrammarRule.cpp
blob4078b51e221f650fee776c5eb2d489f1b661ef4a
1 // Implementation of CGrammarRule methods
2 // Copyright © 2009 The University of Chicago
3 #include "GrammarRule.h"
5 #include "Config.h"
6 #include <QString>
7 #include "StringSurrogate.h"
8 #include "Parse.h"
9 #include "Typedefs.h"
11 CGrammarRule::CGrammarRule()
15 CGrammarRule::~CGrammarRule()
19 CSS CGrammarRule::GetLHS()
21 return GetPiece(1);
25 CParse CGrammarRule::GetRHS()
27 CParse rightHandSide;
28 for( int i = 2; i <= m_PieceCount; i++ )
30 rightHandSide.Append( GetPiece(i) );
33 return rightHandSide;
37 QString CGrammarRule::Display()
39 QString String,
40 Separator = "+";
42 String = GetPiece(1).Display() + " -> " + GetPiece(2).Display();
43 for( int i = 3; i <= m_PieceCount; i++ )
45 String += Separator;
46 String += GetPiece(i).Display();
49 return String;
54 // Terminal Rule
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);
81 return rightSide;
85 QString CTerminalRule::Display()
87 QString String,
88 Separator = "+";
90 String = m_leftSide.Display() + " -> " + QString( GetKey()[0] );
91 for( int i = 1; i < GetKeyLength(); i++ )
93 String += Separator;
94 String += QString( GetKey()[i] );
97 return String;
101 // Wild Card Rule
102 //==========================================
104 CWildCardRule::CWildCardRule( QString leftSide, int width )
106 Append( leftSide );
107 m_Width = width;
111 CWildCardRule::~CWildCardRule()
115 CSS CWildCardRule::GetLHS()
117 return GetKey();
121 CParse CWildCardRule::GetRHS()
123 int i;
124 QString rightSide = "";
125 for( i = 0; i < m_Width; i++ )
127 rightSide += GRAMMAR_RULE_WILD_CARD;
130 CSS ss( rightSide );
131 CParse parse( ss );
132 for( i = 0; i <= parse.GetKeyLength(); i++ )
134 parse.CutNFromTheLeft(i);
137 return parse;
141 QString CWildCardRule::Display()
143 QString String,
144 Separator = "+";
146 String = GetLHS().Display() + " -> " + GRAMMAR_RULE_WILD_CARD;
147 for( int i = 1; i < m_Width; i++ )
149 String += Separator;
150 String += GRAMMAR_RULE_WILD_CARD;
153 return String;