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); }
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); }
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); }
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; } }
public wsp(SpecialToken data) { if (data.StringValue.Equals(" ")) { is_wsp = true; expression = data.StringValue; } else { is_wsp = false; } }
// 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; } }
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); }
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); }
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; } }
public iterator(dynamic data) { if (data.StringValue.Equals("@")) { is_iterator = true; token = data; expression = data.StringValue; } else { is_iterator = false; } }
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); }
public comma(SpecialToken data) { if (data.StringValue.Equals(",")) { is_comma = true; token = data; expression = data.StringValue; } else { is_comma = false; } }
public sign(SpecialToken data) { if (data.StringValue == "-" || data.StringValue == "+") { token = data; is_sign = true; expression = data.StringValue; } else { is_sign = false; } }
public pipe(SpecialToken data) { if (data.StringValue.Equals("|")) { is_pipe = true; token = data; expression = data.StringValue; } else { is_pipe = false; } }
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; } }
public bracket(SpecialToken data) { if ( data.StringValue.Equals("[") | data.StringValue.Equals("]") ) { is_bracket = true; expression = data.StringValue; } else { is_bracket = false; } }
public paren(SpecialToken data) { if ( data.StringValue.Equals("(") | data.StringValue.Equals(")") ) { is_paren = true; expression = data.StringValue; } else { is_paren = false; } }
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; } }
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; } }
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()); }
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); }
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; } }
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(); }
public fractional_constant(digit_sequence _lhs_digit_sequence, SpecialToken _ident) { lhs_digit_sequence = _lhs_digit_sequence; ident = _ident; expression = lhs_digit_sequence?.expression + "."; }