summaryrefslogtreecommitdiff
path: root/src/parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/parser.cpp b/src/parser.cpp
index 804e595..57144c2 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -31,9 +31,11 @@ void Parser::parse()
31 Bu::println( rOut, "%1").arg( deref( tsTerminal.peek() ) ); 31 Bu::println( rOut, "%1").arg( deref( tsTerminal.peek() ) );
32 } 32 }
33 tsTerminal.clear(); 33 tsTerminal.clear();
34 lex.setMode( Lexer::modeNormal );
34 break; 35 break;
35 36
36 case Token::tCommand: 37 case Token::tCommand:
38 lex.setMode( Lexer::modeCommand );
37 if( *t.sVal == "exit" || *t.sVal == "quit" ) 39 if( *t.sVal == "exit" || *t.sVal == "quit" )
38 return; 40 return;
39 else if( *t.sVal == "scale" ) 41 else if( *t.sVal == "scale" )
@@ -44,9 +46,9 @@ void Parser::parse()
44 Bu::println( rOut, "Current scale: %1"). 46 Bu::println( rOut, "Current scale: %1").
45 arg( lex.getScale() ); 47 arg( lex.getScale() );
46 } 48 }
47 else if( t2.eType == Token::tNumber ) 49 else if( t2.eType == Token::tString )
48 { 50 {
49 int32_t i = t2.nVal->toInt32(); 51 int32_t i = strtol( t2.sVal->getStr(), 0, 10 );
50 lex.setScale( i ); 52 lex.setScale( i );
51 if( i < 0 ) 53 if( i < 0 )
52 { 54 {
@@ -77,9 +79,9 @@ void Parser::parse()
77 Bu::println( rOut, "Current radix: %1"). 79 Bu::println( rOut, "Current radix: %1").
78 arg( lex.getRadix() ); 80 arg( lex.getRadix() );
79 } 81 }
80 else if( t2.eType == Token::tNumber ) 82 else if( t2.eType == Token::tString )
81 { 83 {
82 int32_t i = t2.nVal->toInt32(); 84 int32_t i = strtol( t2.sVal->getStr(), 0, 10 );
83 if( i < 2 || i > 36 ) 85 if( i < 2 || i > 36 )
84 Bu::println( rOut, "ERROR: Radix must be between " 86 Bu::println( rOut, "ERROR: Radix must be between "
85 "2 and 36 inclusive"); 87 "2 and 36 inclusive");
@@ -127,13 +129,9 @@ void Parser::parse()
127 "When using a radix greater than 10 all extended digits are lowercase letters\n" 129 "When using a radix greater than 10 all extended digits are lowercase letters\n"
128 "starting with 'a'. Upper case is not currently supported.\n" 130 "starting with 'a'. Upper case is not currently supported.\n"
129 "\n" 131 "\n"
130 "All numbers are interpreted in the current radix, this means that you need to\n" 132 "All numeric command parameters (i.e. \\scale, \\radix) are in base 10 no\n"
131 "set the radix using the current radix, even though the current value is aways\n" 133 "matter what radix is currently set. These are also displayed in base 10\n"
132 "displayed in decimal. That is, to go to base 8 and back to base 10 you would:\n" 134 "at all times.\n"
133 " \\radix 8\n"
134 " Radix changed to: 8\n"
135 " \\radix 12\n"
136 " Radix changed to: 10\n"
137 "\n" 135 "\n"
138 "Changing the radix always clears all variables.\n" 136 "Changing the radix always clears all variables.\n"
139 ); 137 );
@@ -144,6 +142,7 @@ void Parser::parse()
144 Bu::println( rOut, "ERROR: Unknown command '%1'"). 142 Bu::println( rOut, "ERROR: Unknown command '%1'").
145 arg( *t.sVal ); 143 arg( *t.sVal );
146 } 144 }
145 lex.setMode( Lexer::modeNormal );
147 break; 146 break;
148 147
149 case Token::tNumber: 148 case Token::tNumber:
@@ -292,6 +291,7 @@ void Parser::unwind()
292 case Token::tNumber: 291 case Token::tNumber:
293 case Token::tVariable: 292 case Token::tVariable:
294 case Token::tCommand: 293 case Token::tCommand:
294 case Token::tString:
295 case Token::tEndOfLine: 295 case Token::tEndOfLine:
296 case Token::tEndOfInput: 296 case Token::tEndOfInput:
297 // These should never show up at all 297 // These should never show up at all