summaryrefslogtreecommitdiff
path: root/src/parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp38
1 files changed, 25 insertions, 13 deletions
diff --git a/src/parser.cpp b/src/parser.cpp
index c7cf994..701c4bd 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -20,8 +20,7 @@ Parser::~Parser()
20Expression *Parser::parse() 20Expression *Parser::parse()
21{ 21{
22 pCurExp = new Expression(); 22 pCurExp = new Expression();
23 exprR(); 23 statement();
24 reduce();
25 24
26 printState("Final"); 25 printState("Final");
27 26
@@ -40,7 +39,7 @@ void Parser::exprR()
40 39
41void Parser::expr() 40void Parser::expr()
42{ 41{
43 //Bu::sio << "::expr " << lex[0] << Bu::sio.nl; 42 Bu::sio << "::expr " << lex[0] << Bu::sio.nl;
44 if( lex[0].eType == Token::tEndOfInput ) 43 if( lex[0].eType == Token::tEndOfInput )
45 return; 44 return;
46 45
@@ -57,7 +56,7 @@ void Parser::expr()
57 case Token::tModulus: 56 case Token::tModulus:
58 Token t = lex[0]; 57 Token t = lex[0];
59 lex.nextToken(); 58 lex.nextToken();
60 //Bu::sio << "->expr " << t << " " << lex[0] << Bu::sio.nl; 59 Bu::sio << "->expr " << t << " " << lex[0] << Bu::sio.nl;
61 if( lex[0].eType == Token::tOpenParen ) 60 if( lex[0].eType == Token::tOpenParen )
62 { 61 {
63 exprP(); 62 exprP();
@@ -70,10 +69,10 @@ void Parser::expr()
70 if( lex[0].eType == Token::tNumber || 69 if( lex[0].eType == Token::tNumber ||
71 lex[0].eType == Token::tVariable ) 70 lex[0].eType == Token::tVariable )
72 { 71 {
73 //Bu::sio << "->expr " << t << 72 Bu::sio << "->expr " << t <<
74 // " " << lex[0] << 73 " " << lex[0] <<
75 // " " << lex[1] << 74 " " << lex[1] <<
76 // Bu::sio.nl; 75 Bu::sio.nl;
77 shift( lex[0] ); 76 shift( lex[0] );
78 if( lex[1].eType&Token::mMetaOperator ) 77 if( lex[1].eType&Token::mMetaOperator )
79 { 78 {
@@ -111,14 +110,14 @@ void Parser::expr()
111 else if( lex[0].eType == Token::tMinus ) 110 else if( lex[0].eType == Token::tMinus )
112 { 111 {
113 // This is negation 112 // This is negation
114 //Bu::sio << "next token: " << lex[0] << Bu::sio.nl; 113 Bu::sio << "next token: " << lex[0] << Bu::sio.nl;
115 printState("inline-negate"); 114 printState("inline-negate");
116 exprP(); 115 exprP();
117 printState("inline-negate-post"); 116 printState("inline-negate-post");
118 shift( t ); 117 shift( t );
119 printState("inline-negate-post2"); 118 printState("inline-negate-post2");
120 119
121 //Bu::sio << "??? " << lex[0] << Bu::sio.nl; 120 Bu::sio << "??? " << lex[0] << Bu::sio.nl;
122 } 121 }
123 } 122 }
124 break; 123 break;
@@ -157,7 +156,7 @@ void Parser::exprP()
157 exprR(); 156 exprR();
158 if( lex[0].eType != Token::tCloseParen ) 157 if( lex[0].eType != Token::tCloseParen )
159 { 158 {
160 //Bu::sio << "::exprP " << lex[0] << Bu::sio.nl; 159 Bu::sio << "::exprP " << lex[0] << Bu::sio.nl;
161 throw Bu::ExceptionBase("Expected close paren"); 160 throw Bu::ExceptionBase("Expected close paren");
162 } 161 }
163 shift( lex[0] ); 162 shift( lex[0] );
@@ -175,6 +174,21 @@ void Parser::exprP()
175 break; 174 break;
176 } 175 }
177} 176}
177
178void Parser::statement()
179{
180 if( lex[0].eType == Token::tCommand )
181 {
182 lex.setMode( Lexer::modeCommand );
183 lex.setMode( Lexer::modeNormal );
184 }
185 else
186 {
187 exprR();
188 reduce();
189 }
190}
191
178/* 192/*
179case Token::tCommand: 193case Token::tCommand:
180 lex.setMode( Lexer::modeCommand ); 194 lex.setMode( Lexer::modeCommand );
@@ -403,7 +417,6 @@ int Parser::getPriority( Token::Type eType )
403 417
404void Parser::printState( const Bu::String &sTag ) 418void Parser::printState( const Bu::String &sTag )
405{ 419{
406 /*
407 Bu::sio << "----------------" << Bu::sio.nl; 420 Bu::sio << "----------------" << Bu::sio.nl;
408 Bu::sio << sTag << " stack:"; 421 Bu::sio << sTag << " stack:";
409 for( TokenStack::iterator i = tsParse.begin(); i; i++ ) 422 for( TokenStack::iterator i = tsParse.begin(); i; i++ )
@@ -418,6 +431,5 @@ void Parser::printState( const Bu::String &sTag )
418 } 431 }
419 Bu::sio << Bu::sio.nl; 432 Bu::sio << Bu::sio.nl;
420 Bu::sio << "----------------" << Bu::sio.nl; 433 Bu::sio << "----------------" << Bu::sio.nl;
421 */
422} 434}
423 435