From ce68e816bd82612c14f3492e8bc969da9bfab06c Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Thu, 9 May 2013 15:24:11 -0600 Subject: Added better filtering in Number::set, and cli options. The command line options let you set the initial radix/scale, and there's a function te test if any number is prime, that's fun. --- src/parser.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'src/parser.cpp') diff --git a/src/parser.cpp b/src/parser.cpp index 57144c2..38988f5 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -152,22 +152,17 @@ void Parser::parse() default: if( tsNonTerminal.getSize() == 0 || - getPriority( tsNonTerminal.peek().eType ) < + getPriority( tsNonTerminal.peek().eType ) <= getPriority( t.eType ) ) { // Bu::println("Pushing non-terminal: %1").arg( t.eType ); tsNonTerminal.push( t ); - -// for( TokenStack::iterator i = tsTerminal.begin(); i; i++ ) Bu::print(" [%1]").arg( *(*i).nVal ); Bu::println(""); -// for( TokenStack::iterator i = tsNonTerminal.begin(); i; i++ ) Bu::print(" <%1>").arg( (*i).eType ); Bu::println(""); } else { // Bu::println("Unwinding stack before pushing: %1").arg( t.eType ); unwind(); tsNonTerminal.push( t ); -// for( TokenStack::iterator i = tsTerminal.begin(); i; i++ ) Bu::print(" [%1]").arg( *(*i).nVal ); Bu::println(""); -// for( TokenStack::iterator i = tsNonTerminal.begin(); i; i++ ) Bu::print(" <%1>").arg( (*i).eType ); Bu::println(""); } break; } @@ -178,8 +173,19 @@ void Parser::unwind() { for(;;) { -// for( TokenStack::iterator i = tsTerminal.begin(); i; i++ ) Bu::print(" [%1]").arg( *(*i).nVal ); Bu::println(""); -// for( TokenStack::iterator i = tsNonTerminal.begin(); i; i++ ) Bu::print(" <%1>").arg( (*i).eType ); Bu::println(""); +/* + for( TokenStack::iterator i = tsTerminal.begin(); i; i++ ) + { + if( (*i).eType == Token::tNumber ) + Bu::print(" [%1]").arg( *(*i).nVal ); + else + Bu::print(" [%1]").arg( *(*i).sVal ); + } + Bu::println(""); + for( TokenStack::iterator i = tsNonTerminal.begin(); i; i++ ) + Bu::print(" <%1>").arg( (*i).eType ); + Bu::println(""); +*/ if( tsNonTerminal.isEmpty() ) return; @@ -330,7 +336,6 @@ int Parser::getPriority( Token::Type eType ) case Token::tNumber: case Token::tVariable: case Token::tCommand: - case Token::tEquals: return 0; case Token::tPlus: @@ -348,6 +353,7 @@ int Parser::getPriority( Token::Type eType ) case Token::tEndOfLine: case Token::tEndOfInput: + case Token::tEquals: return -1; default: -- cgit v1.2.3