summaryrefslogtreecommitdiff
path: root/src/parser.cpp
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2010-10-12 07:35:08 +0000
committerMike Buland <eichlan@xagasoft.com>2010-10-12 07:35:08 +0000
commit0981b9d6a12bd7aadbf9286459e033ac1a2ba910 (patch)
treefa461761086f182e43f94637a9c8df040333e8a4 /src/parser.cpp
parent1ee5f374ed986333d5cdbbf41390f1c4c755a8e3 (diff)
downloadlibbu++-0981b9d6a12bd7aadbf9286459e033ac1a2ba910.tar.gz
libbu++-0981b9d6a12bd7aadbf9286459e033ac1a2ba910.tar.bz2
libbu++-0981b9d6a12bd7aadbf9286459e033ac1a2ba910.tar.xz
libbu++-0981b9d6a12bd7aadbf9286459e033ac1a2ba910.zip
Ok, libbu++ compiles again, the basic parser system is getting there, I think,
it's still a little tricky becasue you have to do the non-terminal prime seperation yourself (I forget what it's really called), but it's going quite well. After a few tweaks to the core of it, we should be able to do some math :)
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/parser.cpp b/src/parser.cpp
index 7015070..e8e8ff2 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -41,3 +41,96 @@ void Bu::Parser::parse()
41 } 41 }
42} 42}
43 43
44void Bu::Parser::setRootNonTerminal( int iRoot )
45{
46 iRootNonTerminal = iRoot;
47}
48
49void Bu::Parser::setRootNonTerminal( const Bu::FString &sRoot )
50{
51 setRootNonTerminal( hNonTerminalName.get( sRoot ) );
52}
53
54int Bu::Parser::addNonTerminal( const Bu::FString &sName, NonTerminal &nt )
55{
56 int iId = aNonTerminal.getSize();
57 aNonTerminal.append( nt );
58 hNonTerminalName.insert( sName, iId );
59 return iId;
60}
61
62int Bu::Parser::addNonTerminal( const Bu::FString &sName )
63{
64 int iId = aNonTerminal.getSize();
65 aNonTerminal.append( NonTerminal() );
66 hNonTerminalName.insert( sName, iId );
67 return iId;
68}
69
70void Bu::Parser::setNonTerminal( const Bu::FString &sName, NonTerminal &nt )
71{
72 aNonTerminal[hNonTerminalName.get(sName)] = nt;
73}
74
75int Bu::Parser::getNonTerminalId( const Bu::FString &sName )
76{
77 return hNonTerminalName.get( sName );
78}
79
80int Bu::Parser::addReduction( const Bu::FString &sName, const Reduction &r )
81{
82 int iId = aReduction.getSize();
83 aReduction.append( r );
84 hReductionName.insert( sName, iId );
85 return iId;
86}
87
88int Bu::Parser::addReduction( const Bu::FString &sName )
89{
90 int iId = aReduction.getSize();
91 aReduction.append( Reduction() );
92 hReductionName.insert( sName, iId );
93 return iId;
94}
95
96void Bu::Parser::setReduction( const Bu::FString &sName, const Reduction &r )
97{
98 aReduction[hReductionName.get(sName)] = r;
99}
100
101int Bu::Parser::getReductionId( const Bu::FString &sName )
102{
103 return hReductionName.get( sName );
104}
105
106//
107// Bu::Parser::State
108//
109
110Bu::Parser::State::State( Bu::Parser::State::Type eType, int iIndex ) :
111 eType( eType ),
112 iIndex( iIndex )
113{
114}
115
116Bu::Parser::State::~State()
117{
118}
119
120//
121// Bu::Parser::NonTerminal
122//
123
124Bu::Parser::NonTerminal::NonTerminal()
125{
126}
127
128Bu::Parser::NonTerminal::~NonTerminal()
129{
130}
131
132void Bu::Parser::NonTerminal::addProduction( Production p )
133{
134 lProduction.append( p );
135}
136