Exemplo n.º 1
0
        private string evalSub(StructToken token, int subIndex)
        {
            TreeToken subToken   = token.SubTokens[subIndex];
            int       precedence = OperatorProperties.GetPrecedence(token);
            bool      brackets   = precedence > OperatorProperties.GetPrecedence(subToken);
            string    expr       = subToken.Evaluate(this);

            if (brackets)
            {
                expr = $"<mo>(</mo>{expr}<mo>)</mo>";
            }
            return(expr);
        }
Exemplo n.º 2
0
 private static void createTreeNode(Stack <Token> stack, StructToken token)
 {
     if (token is SignOperatorToken signToken)
     {
         if (stack.Count < 1)
         {
             throw new ParserSyntaxException(token.Position);
         }
         signToken.SubTokens[1] = (TreeToken)stack.Pop();
         signToken.SubTokens[0] = new NumberToken("0", signToken.Position);
         stack.Push(signToken);
     }
     else if (token is OperatorToken opToken)
     {
         if (stack.Count < 2)
         {
             throw new ParserSyntaxException(token.Position);
         }
         opToken.SubTokens[1] = (TreeToken)stack.Pop();
         opToken.SubTokens[0] = (TreeToken)stack.Pop();
         stack.Push(opToken);
     }
     else if (token is FuncToken funcToken)
     {
         if (stack.Count < 1)
         {
             throw new ParserSyntaxException(token.Position);
         }
         var paramToken = stack.Pop() as FuncParamToken;
         if (paramToken == null)
         {
             throw new ParserSyntaxException(token.Position);
         }
         if (funcToken.ArgCount != -1 && paramToken.ParamList.Count != funcToken.ArgCount)
         {
             throw new ParserFunctionArgumentException(funcToken.Symbol, token.Position, paramToken.ParamList.Count);
         }
         int i = 0;
         foreach (var subTokenList in paramToken.ParamList)
         {
             funcToken.SubTokens.Add(CreateTree(subTokenList));
             i++;
         }
         stack.Push(funcToken);
     }
 }