Skip to content

Commit 4e6eda5

Browse files
now whitespace/no operator counts as multiplication
1 parent bb0ab59 commit 4e6eda5

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

Demo/Program.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public static void Main(string[] args)
2727
Value result = expressionTree.Evaluate(symbolManager);
2828

2929
Console.WriteLine("{0} = {1}", detail, result);
30+
expressionTree.Assign(symbolManager);
3031
}
3132
catch (Exception exception)
3233
{

shunting_yard/src/parser/ExpressionParser.cs

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,32 @@ IExpression ParseExpression(TokenStream tokenStream, int precedence)
5959
}
6060
IExpression leftExpression = prefixParselet.Parse(ParseExpression, tokenStream, token);
6161

62-
IInfixParselet infixParselet;
63-
while (_infixParselets.TryGetValue(tokenStream.Peek().TokenType, out infixParselet)
64-
&& (precedence < infixParselet.Precedence))
62+
while (true)
6563
{
66-
tokenStream.Consume();
64+
IInfixParselet infixParselet;
65+
bool isInfix = _infixParselets.TryGetValue(tokenStream.Peek().TokenType, out infixParselet);
66+
if (!isInfix)
67+
{
68+
if (_prefixParselets.ContainsKey(tokenStream.Peek().TokenType))
69+
{
70+
infixParselet = _infixParselets[TokenType.Star];
71+
}
72+
else
73+
{
74+
break;
75+
}
76+
}
77+
78+
if (precedence >= infixParselet.Precedence)
79+
{
80+
break;
81+
}
82+
83+
if (isInfix)
84+
{
85+
tokenStream.Consume();
86+
}
87+
6788
leftExpression = infixParselet.Parse(ParseExpression, tokenStream, leftExpression);
6889
}
6990

shunting_yard/src/visitors/ExpressionTree.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ public Value Evaluate(ISymbolManager symbolProvider)
2121
return evaluationVisitor.GetResult();
2222
}
2323

24-
/*public void Assign()
24+
public void Assign(ISymbolManager symbolManager)
2525
{
26-
AssignVisitor assignVisitor = new AssignVisitor(_parser.FunctionsManager, _parser.VariablesManager);
26+
AssignVisitor assignVisitor = new AssignVisitor(symbolManager);
2727
_rootExpression.Accept(assignVisitor);
28-
}*/
28+
}
2929

3030
public string ToDebug()
3131
{

0 commit comments

Comments
 (0)