Esempio n. 1
0
        private IList <SpecialToken> Helper_ConvertStringToList(string _inputexpr)
        {
            IList <SpecialToken> _result = new List <SpecialToken>();

            foreach (char c in _inputexpr)
            {
                var _token = new SpecialToken(c);
                _result.Add(_token);
            }
            return(_result);
        }
Esempio n. 2
0
        public void Equals_TypeIsDifferent_ReturnsFalse()
        {
            // arrange
            var sut1 = new SpecialToken(new SourceLocation(3, 6), SpecialTokenType.BlockEnd);
            var sut2 = new SpecialToken(new SourceLocation(3, 6), SpecialTokenType.BlockStart);

            // act
            var result = sut1.Equals(sut2);

            // assert
            Assert.False(result);
        }
Esempio n. 3
0
        public void Equals_ValuesAreEqual_ReturnsTrue()
        {
            // arrange
            var sut1 = new SpecialToken(new SourceLocation(3, 6), SpecialTokenType.BlockEnd);
            var sut2 = new SpecialToken(new SourceLocation(3, 6), SpecialTokenType.BlockEnd);

            // act
            var result = sut1.Equals(sut2);

            // assert
            Assert.True(result);
        }
Esempio n. 4
0
        public minus(List <minus> _minus_sequnce)
        {
            minus  current     = null;
            minus  prev        = null;
            string _expression = string.Empty;

            #region loop
            foreach (var _minus in _minus_sequnce)
            {
                /*
                 *  -- = +
                 ++ = +
                 ++ -+ = -
                 +- = -
                 */

                current      = _minus;
                _expression += current.expression;

                if (prev != null)
                {
                    if (  // do we have a --?
                        current.token.StringValue == "-" && prev.token.StringValue == "-" ||
                        prev.token.StringValue == "-" && current.token.StringValue == "-"
                        // or do we have a ++?
                        || (current.token.StringValue == "+" && prev.token.StringValue == "+") ||
                        (prev.token.StringValue == "+" && current.token.StringValue == "+")
                        )
                    {
                        current = new minus(new SpecialToken('+'));
                    }
                    else
                    {
                        current = new minus(new SpecialToken('-'));
                    }
                }

                prev = current;
            }
            #endregion

            if (_minus_sequnce.Count > 0)
            {
                token                 = current.token;
                is_minus              = true;
                expression            = _expression;
                functional_expression = current.expression;
            }
            else
            {
                is_minus = false;
            }
        }
Esempio n. 5
0
File: wsp.cs Progetto: wdmckee/X.IO
 public wsp(SpecialToken data)
 {
     if (data.StringValue.Equals(" "))
     {
         is_wsp     = true;
         expression = data.StringValue;
     }
     else
     {
         is_wsp = false;
     }
 }
Esempio n. 6
0
        // THIS SECTION IS KIND OF CHEATING. I SHOULD DO THIS IN A BNF SEQUENCE.
        // GO BACK AND REDO THIS !!!!
        public sign(List <sign> _sign_sequnce)
        {
            sign   current     = null;
            sign   prev        = null;
            string _expression = string.Empty;

            #region loop
            foreach (var _sign in _sign_sequnce)
            {
                /*
                 *  -- = +
                 ++ = +
                 ++ -+ = -
                 +- = -
                 */

                current      = _sign;
                _expression += current.expression;

                if (prev != null)
                {
                    if (  // do we have a --?
                        current.token.StringValue == "-" && prev.token.StringValue == "-" ||
                        prev.token.StringValue == "-" && current.token.StringValue == "-"
                        // or do we have a ++?
                        || (current.token.StringValue == "+" && prev.token.StringValue == "+") ||
                        (prev.token.StringValue == "+" && current.token.StringValue == "+")
                        )
                    {
                        current = new sign(new SpecialToken('+'));
                    }
                    else
                    {
                        current = new sign(new SpecialToken('-'));
                    }
                }

                prev = current;
            }
            #endregion

            if (_sign_sequnce.Count > 0)
            {
                token      = current.token;
                is_sign    = true;
                expression = _expression;
            }
            else
            {
                is_sign = false;
            }
        }
Esempio n. 7
0
        public void GetHashCode_ValuesAreEqual_ReturnsSameHashCode()
        {
            // arrange
            var sut1 = new SpecialToken(new SourceLocation(3, 6), SpecialTokenType.BlockEnd);
            var sut2 = new SpecialToken(new SourceLocation(3, 6), SpecialTokenType.BlockEnd);

            // act
            var hashCode1 = sut1.GetHashCode();
            var hashCode2 = sut2.GetHashCode();

            // assert
            Assert.Equal(hashCode1, hashCode2);
        }
Esempio n. 8
0
        public void Ctor_WhenCalled_SetsProperties()
        {
            // arrange
            var location = new SourceLocation(2, 3);

            // act
            var sut = new SpecialToken(location, SpecialTokenType.BlockStart);

            // assert
            Assert.Equal(2, sut.Location.LineNumber);
            Assert.Equal(3, sut.Location.CharacterNumber);
            Assert.Equal(SpecialTokenType.BlockStart, sut.Type);
        }
Esempio n. 9
0
 public conditional(SpecialToken data)
 {
     if (data.StringValue.Equals("<") || data.StringValue.Equals(">") || data.StringValue.Equals("="))
     {
         is_conditional = true;
         token          = data;
         expression     = data.StringValue;
     }
     else
     {
         is_conditional = false;
     }
 }
Esempio n. 10
0
 public iterator(dynamic data)
 {
     if (data.StringValue.Equals("@"))
     {
         is_iterator = true;
         token       = data;
         expression  = data.StringValue;
     }
     else
     {
         is_iterator = false;
     }
 }
Esempio n. 11
0
        public void GetHashCode_ValuesAreNotEqual_ReturnsDifferentHashCodes()
        {
            // arrange
            var sut1 = new SpecialToken(new SourceLocation(3, 6), SpecialTokenType.BlockEnd);
            var sut2 = new SpecialToken(new SourceLocation(3, 6), SpecialTokenType.BlockStart);

            // act
            var hashCode1 = sut1.GetHashCode();
            var hashCode2 = sut2.GetHashCode();

            // act, assert
            Assert.NotEqual(hashCode1, hashCode2);
        }
Esempio n. 12
0
 public comma(SpecialToken data)
 {
     if (data.StringValue.Equals(","))
     {
         is_comma   = true;
         token      = data;
         expression = data.StringValue;
     }
     else
     {
         is_comma = false;
     }
 }
Esempio n. 13
0
 public sign(SpecialToken data)
 {
     if (data.StringValue == "-" || data.StringValue == "+")
     {
         token      = data;
         is_sign    = true;
         expression = data.StringValue;
     }
     else
     {
         is_sign = false;
     }
 }
Esempio n. 14
0
 public pipe(SpecialToken data)
 {
     if (data.StringValue.Equals("|"))
     {
         is_pipe    = true;
         token      = data;
         expression = data.StringValue;
     }
     else
     {
         is_pipe = false;
     }
 }
Esempio n. 15
0
 public infix_operator_type1(SpecialToken data)
 {
     if (
         data.StringValue.Equals("+")
         | data.StringValue.Equals("-")
         )
     {
         is_infix_operator_type1 = true;
         expression = data.StringValue;
     }
     else
     {
         is_infix_operator_type1 = false;
     }
 }
Esempio n. 16
0
 public bracket(SpecialToken data)
 {
     if (
         data.StringValue.Equals("[")
         | data.StringValue.Equals("]")
         )
     {
         is_bracket = true;
         expression = data.StringValue;
     }
     else
     {
         is_bracket = false;
     }
 }
Esempio n. 17
0
 public paren(SpecialToken data)
 {
     if (
         data.StringValue.Equals("(")
         | data.StringValue.Equals(")")
         )
     {
         is_paren   = true;
         expression = data.StringValue;
     }
     else
     {
         is_paren = false;
     }
 }
Esempio n. 18
0
        public minus(SpecialToken data)
        {
            // here we account for "-exp(7)" but despite being called "minus"
            // i guess it can account for "+exp(7)" as well though its kinda pointless.

            if (
                data.StringValue.Equals("-")
                | data.StringValue.Equals("+")
                )
            {
                token      = data;
                is_minus   = true;
                expression = data.StringValue;
            }
            else
            {
                is_minus = false;
            }
        }
Esempio n. 19
0
 public digit(dynamic data)
 {
     if (data.Value.Equals('0') ||
         data.Value.Equals('1') ||
         data.Value.Equals('2') ||
         data.Value.Equals('3') ||
         data.Value.Equals('4') ||
         data.Value.Equals('5') ||
         data.Value.Equals('6') ||
         data.Value.Equals('7') ||
         data.Value.Equals('8') ||
         data.Value.Equals('9')
         )
     {
         is_digit   = true;
         token      = data;
         expression = data.StringValue;
     }
     else
     {
         is_digit = false;
     }
 }
Esempio n. 20
0
                private static Token[] GetInfixTokens(string term)
                {
                    //Leerzeichen entfernen und in Kleinbuchstaben konvertieren
                    term = term.Replace(" ", string.Empty).ToLowerInvariant();

                    var tokens = new List <Token>();

                    //mit RegEx alle Zahlen aussortieren
                    var numbers = parserRegEx.Matches(term);

                    term = parserRegEx.Replace(term, "1");

                    var sb = new StringBuilder(term);

                    //Term in Tokens teilen
                    var numberIndex = 0;

                    while (sb.Length > 0)
                    {
                        var validToken = false;

                        //Zahlen prüfen
                        if (sb.StartsWith("1"))
                        {
                            var t = new NumberToken();
                            t.ParseFromString(numbers[numberIndex].Groups["number"].Value);
                            tokens.Add(t);

                            numberIndex++;

                            //term = ReduceString(term, 1);
                            sb.Remove(0, 1);

                            validToken = true;
                        }

                        //Operatoren prüfen
                        if (!validToken)
                        {
                            for (int i = 0; i < operators.Length; i++)
                            {
                                var token = operators[i];
                                if (sb.StartsWith(token))
                                {
                                    var t = new OperatorToken();

                                    if ((token == '+' || token == '-') && (tokens.Count == 0 || tokens.Last().GetName() == "(")) //Vorzeichen
                                    {
                                        if (token == '-')
                                        {
                                            t.ParseFromString("!");
                                        }
                                    }
                                    else
                                    {
                                        t.ParseFromString(token.ToString());
                                    }

                                    tokens.Add(t);

                                    //term = ReduceString(term, 1);
                                    sb.Remove(0, 1);

                                    validToken = true;
                                    break;
                                }
                            }
                        }

                        //Funktionen prüfen
                        if (!validToken)
                        {
                            for (int i = 0; i < functions.Length; i++)
                            {
                                var token = functions[i];
                                if (sb.StartsWith(token))
                                {
                                    var t = new FunctionToken();
                                    t.ParseFromString(token);
                                    tokens.Add(t);

                                    //term = ReduceString(term, token.Length);
                                    sb.Remove(0, token.Length);

                                    validToken = true;
                                    break;
                                }
                            }
                        }

                        //Rest prüfen
                        if (!validToken)
                        {
                            if (sb.StartsWith("pi")) //Pi
                            {
                                var t = new NumberToken();
                                t.ParseFromString(System.Math.PI.ToString());
                                tokens.Add(t);

                                //term = ReduceString(term, 2);
                                sb.Remove(0, 2);
                            }

                            else if (sb.StartsWith("e")) //e
                            {
                                var t = new NumberToken();
                                t.ParseFromString(System.Math.E.ToString());
                                tokens.Add(t);

                                //term = ReduceString(term, 1);
                                sb.Remove(0, 1);
                            }

                            else if (sb.StartsWith("(")) //öffnende Klammer
                            {
                                var t = new SpecialToken();
                                t.ParseFromString("(");
                                tokens.Add(t);

                                //term = ReduceString(term, 1);
                                sb.Remove(0, 1);
                            }

                            else if (sb.StartsWith(")")) //schließende Klammer
                            {
                                var t = new SpecialToken();
                                t.ParseFromString(")");
                                tokens.Add(t);

                                //term = ReduceString(term, 1);
                                sb.Remove(0, 1);
                            }

                            else if (sb.StartsWith(";")) //Argumenttrennzeichen
                            {
                                var t = new SpecialToken();
                                t.ParseFromString(";");
                                tokens.Add(t);

                                //term = ReduceString(term, 1);
                                sb.Remove(0, 1);
                            }

                            else //Token nicht bekannt
                            {
                                throw new ArgumentException("Dieser Term enthält einen ungültigen Token.");
                            }
                        }
                    }

                    return(tokens.ToArray());
                }
Esempio n. 21
0
 internal void OnSpecialToken([NotNull] SpecialTokenEventArgs e)
 {
     SpecialToken?.Invoke(this, e);
 }
 /// <summary>
 /// Invokes the <see cref="SpecialToken"/> event
 /// </summary>
 /// <param name="e">The event arguments</param>
 protected virtual void OnSpecialToken(SpecialTokenEventArgs e)
 {
     SpecialToken?.Invoke(this, e);
 }
Esempio n. 23
0
        public letter(SpecialToken data)
        {
            if (data.StringValue.Equals("a") ||
                data.StringValue.Equals("b") ||
                data.StringValue.Equals("c") ||
                data.StringValue.Equals("d") ||
                data.StringValue.Equals("e") ||
                data.StringValue.Equals("f") ||
                data.StringValue.Equals("g") ||
                data.StringValue.Equals("h") ||
                data.StringValue.Equals("i") ||
                data.StringValue.Equals("j") ||
                data.StringValue.Equals("k") ||
                data.StringValue.Equals("l") ||
                data.StringValue.Equals("m") ||
                data.StringValue.Equals("n") ||
                data.StringValue.Equals("o") ||
                data.StringValue.Equals("p") ||
                data.StringValue.Equals("q") ||
                data.StringValue.Equals("r") ||
                data.StringValue.Equals("s") ||
                data.StringValue.Equals("t") ||
                data.StringValue.Equals("u") ||
                data.StringValue.Equals("v") ||
                data.StringValue.Equals("w") ||
                data.StringValue.Equals("x") ||
                data.StringValue.Equals("y") ||
                data.StringValue.Equals("z")

                || data.StringValue.Equals("A") ||
                data.StringValue.Equals("B") ||
                data.StringValue.Equals("C") ||
                data.StringValue.Equals("D") ||
                data.StringValue.Equals("E") ||
                data.StringValue.Equals("F") ||
                data.StringValue.Equals("G") ||
                data.StringValue.Equals("H") ||
                data.StringValue.Equals("I") ||
                data.StringValue.Equals("J") ||
                data.StringValue.Equals("K") ||
                data.StringValue.Equals("L") ||
                data.StringValue.Equals("M") ||
                data.StringValue.Equals("N") ||
                data.StringValue.Equals("O") ||
                data.StringValue.Equals("P") ||
                data.StringValue.Equals("Q") ||
                data.StringValue.Equals("R") ||
                data.StringValue.Equals("S") ||
                data.StringValue.Equals("T") ||
                data.StringValue.Equals("U") ||
                data.StringValue.Equals("V") ||
                data.StringValue.Equals("W") ||
                data.StringValue.Equals("X") ||
                data.StringValue.Equals("Y") ||
                data.StringValue.Equals("Z")


                || data.StringValue.Equals("_")

                )
            {
                is_letter  = true;
                token      = data;
                expression = data.StringValue;
            }
            else
            {
                is_letter = false;
            }
        }
Esempio n. 24
0
                private static Token[] GetInfixTokens(string term)
                {
                    //Leerzeichen entfernen und in Kleinbuchstaben konvertieren
                    term = term.Replace(" ", string.Empty).ToLowerInvariant();

                    var tokens = new List<Token>();

                    //mit RegEx alle Zahlen aussortieren
                    var numbers = parserRegEx.Matches(term);
                    term = parserRegEx.Replace(term, "1");

                    var sb = new StringBuilder(term);

                    //Term in Tokens teilen
                    var numberIndex = 0;
                    while (sb.Length > 0)
                    {
                        var validToken = false;

                        //Zahlen prüfen
                        if (sb.StartsWith("1"))
                        {
                            var t = new NumberToken();
                            t.ParseFromString(numbers[numberIndex].Groups["number"].Value);
                            tokens.Add(t);

                            numberIndex++;

                            //term = ReduceString(term, 1);
                            sb.Remove(0, 1);

                            validToken = true;
                        }

                        //Operatoren prüfen
                        if (!validToken)
                            for (int i = 0; i < operators.Length; i++)
                            {
                                var token = operators[i];
                                if (sb.StartsWith(token))
                                {
                                    var t = new OperatorToken();

                                    if ((token == '+' || token == '-') && (tokens.Count == 0 || tokens.Last().GetName() == "(")) //Vorzeichen
                                    {
                                        if (token == '-')
                                            t.ParseFromString("!");
                                    }
                                    else
                                        t.ParseFromString(token.ToString());

                                    tokens.Add(t);

                                    //term = ReduceString(term, 1);
                                    sb.Remove(0, 1);

                                    validToken = true;
                                    break;
                                }
                            }

                        //Funktionen prüfen
                        if (!validToken)
                            for (int i = 0; i < functions.Length; i++)
                            {
                                var token = functions[i];
                                if (sb.StartsWith(token))
                                {
                                    var t = new FunctionToken();
                                    t.ParseFromString(token);
                                    tokens.Add(t);

                                    //term = ReduceString(term, token.Length);
                                    sb.Remove(0, token.Length);

                                    validToken = true;
                                    break;
                                }
                            }

                        //Rest prüfen
                        if (!validToken)
                        {
                            if (sb.StartsWith("pi")) //Pi
                            {
                                var t = new NumberToken();
                                t.ParseFromString(System.Math.PI.ToString());
                                tokens.Add(t);

                                //term = ReduceString(term, 2);
                                sb.Remove(0, 2);
                            }

                            else if (sb.StartsWith("e")) //e
                            {
                                var t = new NumberToken();
                                t.ParseFromString(System.Math.E.ToString());
                                tokens.Add(t);

                                //term = ReduceString(term, 1);
                                sb.Remove(0, 1);
                            }

                            else if (sb.StartsWith("(")) //öffnende Klammer
                            {
                                var t = new SpecialToken();
                                t.ParseFromString("(");
                                tokens.Add(t);

                                //term = ReduceString(term, 1);
                                sb.Remove(0, 1);
                            }

                            else if (sb.StartsWith(")")) //schließende Klammer
                            {
                                var t = new SpecialToken();
                                t.ParseFromString(")");
                                tokens.Add(t);

                                //term = ReduceString(term, 1);
                                sb.Remove(0, 1);
                            }

                            else if (sb.StartsWith(";")) //Argumenttrennzeichen
                            {
                                var t = new SpecialToken();
                                t.ParseFromString(";");
                                tokens.Add(t);

                                //term = ReduceString(term, 1);
                                sb.Remove(0, 1);
                            }

                            else //Token nicht bekannt
                                throw new ArgumentException("Dieser Term enthält einen ungültigen Token.");
                        }
                    }

                    return tokens.ToArray();
                }
Esempio n. 25
0
 public fractional_constant(digit_sequence _lhs_digit_sequence, SpecialToken _ident)
 {
     lhs_digit_sequence = _lhs_digit_sequence;
     ident      = _ident;
     expression = lhs_digit_sequence?.expression + ".";
 }