diff options
author | Mike Buland <eichlan@xagasoft.com> | 2010-10-12 07:35:08 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2010-10-12 07:35:08 +0000 |
commit | 0981b9d6a12bd7aadbf9286459e033ac1a2ba910 (patch) | |
tree | fa461761086f182e43f94637a9c8df040333e8a4 /src/parser.cpp | |
parent | 1ee5f374ed986333d5cdbbf41390f1c4c755a8e3 (diff) | |
download | libbu++-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.cpp | 93 |
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 | ||
44 | void Bu::Parser::setRootNonTerminal( int iRoot ) | ||
45 | { | ||
46 | iRootNonTerminal = iRoot; | ||
47 | } | ||
48 | |||
49 | void Bu::Parser::setRootNonTerminal( const Bu::FString &sRoot ) | ||
50 | { | ||
51 | setRootNonTerminal( hNonTerminalName.get( sRoot ) ); | ||
52 | } | ||
53 | |||
54 | int 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 | |||
62 | int 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 | |||
70 | void Bu::Parser::setNonTerminal( const Bu::FString &sName, NonTerminal &nt ) | ||
71 | { | ||
72 | aNonTerminal[hNonTerminalName.get(sName)] = nt; | ||
73 | } | ||
74 | |||
75 | int Bu::Parser::getNonTerminalId( const Bu::FString &sName ) | ||
76 | { | ||
77 | return hNonTerminalName.get( sName ); | ||
78 | } | ||
79 | |||
80 | int 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 | |||
88 | int 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 | |||
96 | void Bu::Parser::setReduction( const Bu::FString &sName, const Reduction &r ) | ||
97 | { | ||
98 | aReduction[hReductionName.get(sName)] = r; | ||
99 | } | ||
100 | |||
101 | int Bu::Parser::getReductionId( const Bu::FString &sName ) | ||
102 | { | ||
103 | return hReductionName.get( sName ); | ||
104 | } | ||
105 | |||
106 | // | ||
107 | // Bu::Parser::State | ||
108 | // | ||
109 | |||
110 | Bu::Parser::State::State( Bu::Parser::State::Type eType, int iIndex ) : | ||
111 | eType( eType ), | ||
112 | iIndex( iIndex ) | ||
113 | { | ||
114 | } | ||
115 | |||
116 | Bu::Parser::State::~State() | ||
117 | { | ||
118 | } | ||
119 | |||
120 | // | ||
121 | // Bu::Parser::NonTerminal | ||
122 | // | ||
123 | |||
124 | Bu::Parser::NonTerminal::NonTerminal() | ||
125 | { | ||
126 | } | ||
127 | |||
128 | Bu::Parser::NonTerminal::~NonTerminal() | ||
129 | { | ||
130 | } | ||
131 | |||
132 | void Bu::Parser::NonTerminal::addProduction( Production p ) | ||
133 | { | ||
134 | lProduction.append( p ); | ||
135 | } | ||
136 | |||