1
0

括弧の実�

This commit is contained in:
otya128
2015-06-03 21:18:55 +09:00
parent 018d59ee7f
commit 3c9c1dd2aa
3 changed files with 17 additions and 3 deletions

View File

@@ -3,9 +3,10 @@ import otya.smilebasic.parser;
int main(string[] argv) int main(string[] argv)
{ {
writeln("Hello D-World!"); writeln("Hello D-World!");
auto parser = new Parser("1+2*3+4"); auto parser = new Parser("1+2*(3+4)");
writeln(parser.calc()); writeln(parser.calc());
writeln(1+2*3+4); writeln(1+2*3+4);
writeln(1+2*(3+4));
readln(); readln();
return 0; return 0;
} }

View File

@@ -21,6 +21,8 @@ class Lexical
table['-'] = TokenType.Minus; table['-'] = TokenType.Minus;
table['*'] = TokenType.Mul; table['*'] = TokenType.Mul;
table['/'] = TokenType.Div; table['/'] = TokenType.Div;
table['('] = TokenType.LParen;
table[')'] = TokenType.RParen;
} }
bool empty() bool empty()
{ {
@@ -140,6 +142,7 @@ class Parser
} }
int calc() int calc()
{ {
lex.popFront();
auto exp = expression(); auto exp = expression();
writeln(); writeln();
return calc(exp); return calc(exp);
@@ -177,7 +180,6 @@ class Parser
Expression expression() Expression expression()
{ {
Expression node = null; Expression node = null;
lex.popFront();
return term(8, node); return term(8, node);
} }
Expression term(int order, Expression node) Expression term(int order, Expression node)
@@ -221,10 +223,19 @@ class Parser
stdout.flush(); stdout.flush();
node = new Constant(Value(token.value.integerValue)); node = new Constant(Value(token.value.integerValue));
break; break;
case TokenType.LParen:
lex.popFront();
node = expression();
token = lex.front();
if(token.type != TokenType.RParen)
//error
{}
break;
default: default:
return node; return node;
} }
if(!lex.empty())lex.popFront(); if(!lex.empty())
lex.popFront();
return node; return node;
} }
} }

View File

@@ -16,6 +16,8 @@ enum TokenType
Xor, Xor,
Print, Print,
If, If,
LParen,
RParen,
} }
struct Token struct Token