diff options
| author | Mike Buland <eichlan@xagasoft.com> | 2016-11-30 13:57:04 -0700 |
|---|---|---|
| committer | Mike Buland <eichlan@xagasoft.com> | 2016-11-30 13:57:04 -0700 |
| commit | 0321e6e39b8cf24718cf853c28f0f35443753264 (patch) | |
| tree | 878bdaa2296014244f2dbe90d61c5c869e8204b7 /src/parser.cpp | |
| parent | f50e787110c8b3ecbc1b07262842dd5fdc8a5e42 (diff) | |
| download | clic-0321e6e39b8cf24718cf853c28f0f35443753264.tar.gz clic-0321e6e39b8cf24718cf853c28f0f35443753264.tar.bz2 clic-0321e6e39b8cf24718cf853c28f0f35443753264.tar.xz clic-0321e6e39b8cf24718cf853c28f0f35443753264.zip | |
Working on the parser, some issues.
Diffstat (limited to '')
| -rw-r--r-- | src/parser.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index 153b6fe..1f9a193 100644 --- a/src/parser.cpp +++ b/src/parser.cpp | |||
| @@ -22,6 +22,58 @@ void Parser::parse() | |||
| 22 | { | 22 | { |
| 23 | for(;;) | 23 | for(;;) |
| 24 | { | 24 | { |
| 25 | lex.nextToken(); | ||
| 26 | expr(); | ||
| 27 | |||
| 28 | for( TokenStack::iterator i = tsStack.begin(); i; i++ ) | ||
| 29 | { | ||
| 30 | Bu::sio << *i << " "; | ||
| 31 | } | ||
| 32 | } | ||
| 33 | } | ||
| 34 | |||
| 35 | void Parser::expr() | ||
| 36 | { | ||
| 37 | if( lex[0].eType == Token::tVariable && | ||
| 38 | lex[1].eType == Token::tEquals ) | ||
| 39 | { | ||
| 40 | // Assignment! | ||
| 41 | expr(); | ||
| 42 | return; | ||
| 43 | } | ||
| 44 | exprP(); | ||
| 45 | } | ||
| 46 | |||
| 47 | void Parser::exprP() | ||
| 48 | { | ||
| 49 | switch( lex[0].eType ) | ||
| 50 | { | ||
| 51 | case Token::tNumber: | ||
| 52 | case Token::tVariable: | ||
| 53 | tsStack.push( lex[0] ); | ||
| 54 | lex.nextToken(); | ||
| 55 | break; | ||
| 56 | |||
| 57 | case Token::tOpenParen: | ||
| 58 | lex.nextToken(); | ||
| 59 | expr(); | ||
| 60 | if( lex[0].eType != Token::tCloseParen ) | ||
| 61 | { | ||
| 62 | throw Bu::ExceptionBase("Expected close paren"); | ||
| 63 | } | ||
| 64 | lex.nextToken(); | ||
| 65 | break; | ||
| 66 | |||
| 67 | case Token::tMinus: | ||
| 68 | lex.nextToken(); | ||
| 69 | exprP(); | ||
| 70 | tsStack.push( Token( Token::tNegate ) ); | ||
| 71 | break; | ||
| 72 | } | ||
| 73 | } | ||
| 74 | /* | ||
| 75 | for(;;) | ||
| 76 | { | ||
| 25 | Token t = lex.nextToken(); | 77 | Token t = lex.nextToken(); |
| 26 | switch( t.eType ) | 78 | switch( t.eType ) |
| 27 | { | 79 | { |
| @@ -158,6 +210,7 @@ void Parser::parse() | |||
| 158 | } | 210 | } |
| 159 | } | 211 | } |
| 160 | } | 212 | } |
| 213 | */ | ||
| 161 | 214 | ||
| 162 | Number Parser::getVariable( const Bu::String &sName ) | 215 | Number Parser::getVariable( const Bu::String &sName ) |
| 163 | { | 216 | { |
| @@ -171,6 +224,7 @@ void Parser::setVariable( const Bu::String &sName, const Number &rValue ) | |||
| 171 | 224 | ||
| 172 | void Parser::unwind() | 225 | void Parser::unwind() |
| 173 | { | 226 | { |
| 227 | /* | ||
| 174 | for(;;) | 228 | for(;;) |
| 175 | { | 229 | { |
| 176 | DBS_START( PARSE ); | 230 | DBS_START( PARSE ); |
| @@ -312,6 +366,7 @@ void Parser::unwind() | |||
| 312 | getPriority( t.eType ) ) | 366 | getPriority( t.eType ) ) |
| 313 | return; | 367 | return; |
| 314 | } | 368 | } |
| 369 | */ | ||
| 315 | } | 370 | } |
| 316 | 371 | ||
| 317 | int Parser::reqTokens( Token::Type eType ) | 372 | int Parser::reqTokens( Token::Type eType ) |
