Ejemplo n.º 1
0
 public override string ToString()
 {
     if (Function is ArithmeticBinaryFunction)
     {
         return($"{LeftBracket.GetInstance()}{_terms[0]}{Function}{_terms[1]}{RightBracket.GetInstance()}");
     }
     return($"{Function}{LeftBracket.GetInstance()}{string.Join<Term>(Comma.GetInstance().ToString(), _terms)}{RightBracket.GetInstance()}");
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Check existence of referenced Column(s) and convert to 'legal' Statement
        /// </summary>
        /// <example>CheckStatement(DataTable, "Column1Exists = Red, Column2NotExists = £$"$""!!, Column3Exists = 5);</example>
        /// <param name="table"></param>
        /// <param name="statement"></param>
        /// <param name="checktype"></param>
        /// <returns></returns>
        private static string CheckStatement(DataTable table, string statement, StatementType checktype)
        {
            // Initialise ..
            const char   Quote          = '\'';
            const char   Comma          = ',';
            const char   Equals         = '=';
            const string And            = " and ";
            string       statementFinal = string.Empty;

            // Set appropriate statement connector ..
            string connector = string.Empty;

            switch (checktype)
            {
            case StatementType.Set:
                connector = Comma.ToString();
                break;

            case StatementType.Where:
                connector = And;
                break;

            default:
                connector = Comma.ToString();
                break;
            }

            // Decompose multiple assignments into column(s) and value(s) ..
            string[] assignments = statement.Split(Comma);
            for (int assignmentIndex = 0; assignmentIndex < assignments.Length; assignmentIndex++)
            {
                string   assignment     = assignments[assignmentIndex].Trim();
                string[] columnAndvalue = assignment.Split(Equals);

                // Decompose further if assignment statement is valid ..
                if (columnAndvalue.Length == 2)
                {
                    string columnName  = columnAndvalue[0].Trim();
                    string columnValue = columnAndvalue[1].Trim();

                    //Check column exists in DataTable ..
                    if (IsColumn(table, columnName))
                    {
                        // .. and get its datatype ..
                        if (GetType(table, columnName) == typeof(string))
                        {
                            columnValue = Quote + columnValue + Quote;
                        }

                        // Construct final set statement ...
                        statementFinal += columnName + Equals + columnValue + connector;
                    }
                }
            }

            // Remove extra connector ..
            return(statementFinal.Substring(0, statementFinal.Length - connector.ToString().Length));
        }
Ejemplo n.º 3
0
        public override string ToString()
        {
            if (Predicate is ArithmeticPredicate)
            {
                return($"{LeftBracket.GetInstance()}{_terms[0]}{Predicate}{_terms[1]}{RightBracket.GetInstance()}");
            }

            return($"{Predicate}{LeftBracket.GetInstance()}{string.Join<Term>(Comma.GetInstance().ToString(), _terms)}{RightBracket.GetInstance()}");
        }
Ejemplo n.º 4
0
        public static void RemoveExtraComma()
        {
            var first   = new Comma();
            var secondB = new ClosingBracket();
            var secondT = new ClosingThread();

            for (var i = 0; i < TokenzedProgram.Count - 2; i++)
            {
                if (TokenzedProgram[i].GetKeyWordName() == first.KeyWordName() &&
                    (TokenzedProgram[i + 1].GetKeyWordName() == secondB.KeyWordName() ||
                     TokenzedProgram[i + 1].GetKeyWordName() == secondT.KeyWordName()))
                {
                    TokenzedProgram.RemoveAt(i);
                }
            }
        }
Ejemplo n.º 5
0
        private static void CheckOrder(Symbol left, Symbol right)
        {
            var err = left switch
            {
                Comma _ => (right is Comma),
                ArithmeticBinaryFunction _ => (right is ArithmeticBinaryFunction),
                ArithmeticPredicate _ => (right is ArithmeticPredicate),
                ObjectVariable _ => (right is ObjectVariable),
                IndividualConstant <BigInteger> _ => (right is IndividualConstant <BigInteger>),
                Quantifier _ => (right is Quantifier),
                BinaryPropositionalConnective _ => (right is BinaryPropositionalConnective),
                _ => false
            };

            if (err)
            {
                throw new ArgumentException($"symbols {left} and {right} cannot be placed side by side");
            }
        }
Ejemplo n.º 6
0
        private static NextToken ReadToken(this IEnumerable <CodeCharacter> code)
        {
            code = code.SkipWhile(c => c.IsWhitespace);

            if (!code.Any())
            {
                var token = new EndOfFile();
                return(new NextToken(token, () => ReadToken(code)));
            }

            var firstTokenChar = code.First();

            if (firstTokenChar.IsStartOfIdentifier)
            {
                var identifier = code
                                 .TakeWhile(c => c.IsBodyOfIdentifier)
                                 .Aggregate("", (s, c) => s + c.Value);

                code = code.SkipWhile(c => c.IsBodyOfIdentifier);

                var token = KeywordTable.ContainsKey(identifier)
                    ? KeywordTable[identifier].Invoke() as Token
                    : new Identifier();

                token.Value        = identifier;
                token.LineNumber   = firstTokenChar.LineNumber;
                token.LinePosition = firstTokenChar.LinePosition;
                return(new NextToken(token, () => ReadToken(code)));
            }

            if (firstTokenChar.IsDigit)
            {
                var number = code
                             .TakeWhile(c => c.IsDigit)
                             .Aggregate("", (s, c) => s + c.Value);

                code = code.Skip(number.Length);

                var token = new IntegerConstant();
                token.Value        = number;
                token.LineNumber   = firstTokenChar.LineNumber;
                token.LinePosition = firstTokenChar.LinePosition;
                return(new NextToken(token, () => ReadToken(code)));
            }

            if (firstTokenChar.IsStartOfStringLiteral)
            {
                var stringLiteral = code
                                    .Skip(1)
                                    .TakeWhile(c => c.Value != '"')
                                    .Aggregate("\"", (s, c) => s + c.Value)
                                    + '"';

                Debug.WriteLine(stringLiteral);

                code = code.Skip(stringLiteral.Length);

                var token = new StringLiteral();
                token.Value        = stringLiteral;
                token.LineNumber   = firstTokenChar.LineNumber;
                token.LinePosition = firstTokenChar.LinePosition;
                return(new NextToken(token, () => ReadToken(code)));
            }

            var t = new InvalidToken() as Token;

            switch (firstTokenChar.Value)
            {
            case '(': t = new LeftParen(); break;

            case ')': t = new RightParen(); break;

            case '{': t = new LeftCurlyBrace(); break;

            case '}': t = new RightCurlyBrace(); break;

            case '[': t = new LeftSquareBracket(); break;

            case ']': t = new RightSquareBracket(); break;

            case ',': t = new Comma(); break;

            case '*': t = new Asterisk(); break;

            case ';': t = new Semicolon(); break;
            }

            code = code.Skip(1);

            t.Value        = firstTokenChar.Value.ToString();
            t.LineNumber   = firstTokenChar.LineNumber;
            t.LinePosition = firstTokenChar.LinePosition;
            return(new NextToken(t, () => ReadToken(code)));
        }
Ejemplo n.º 7
0
 internal protected virtual T Visit(Comma node)
 {
     return(Visit(node as Expression));
 }
Ejemplo n.º 8
0
 public static void Rule(AdditionalCompoundTerms lhs, Comma comma, CompoundTermMember compoundTermMember, AdditionalCompoundTerms additionalCompoundTerms)
 {
 }
Ejemplo n.º 9
0
        private static IEnumerable <Symbol> ToSymbols(string str)
        {
            var index = 0;
            var isLastForUnaryMinus = true;

            while (index < str.Length)
            {
                switch (str[index])
                {
                case ' ':
                    ++index;
                    continue;

                case '(':
                    yield return(LeftBracket.GetInstance());

                    isLastForUnaryMinus = true;
                    ++index;
                    continue;

                case ')':
                    yield return(RightBracket.GetInstance());

                    isLastForUnaryMinus = false;
                    ++index;
                    continue;

                case ',':
                    yield return(Comma.GetInstance());

                    isLastForUnaryMinus = true;
                    ++index;
                    continue;

                case '\\':
                    yield return(SpecialSymbol(str, ref index));

                    isLastForUnaryMinus = true;
                    continue;
                }

                if (char.IsLetter(str[index]))
                {
                    yield return(LetterSymbol(str, ref index));

                    isLastForUnaryMinus = false;
                    continue;
                }

                if (char.IsDigit(str[index]))
                {
                    yield return(DigitSymbol(str, ref index));

                    isLastForUnaryMinus = false;
                    continue;
                }

                if (IsArithmeticPredicate(str[index]))
                {
                    yield return(ArithmeticPredicateSymbol(str, ref index));

                    isLastForUnaryMinus = true;
                    continue;
                }

                if (str[index] == '-')
                {
                    if (isLastForUnaryMinus)
                    {
                        yield return(UnaryMinus.GetInstance());

                        ++index;
                        continue;
                    }
                }

                if (IsArithmeticBinaryFunction(str[index]))
                {
                    yield return(ArithmeticBinaryFunctionSymbol(str, ref index));

                    isLastForUnaryMinus = true;
                    continue;
                }

                throw new ArgumentException($"the symbol {str[index]} with the number {index} is unexpected");
            }
        }
Ejemplo n.º 10
0
 public static void Rule(AdditionalStatementElements lhs, Comma comma, StatementElement statementElement, AdditionalStatementElements additionalStatementElements)
 {
     lhs.CodeCompoundTerms.Add(statementElement.CodeCompoundTerm);
     lhs.CodeCompoundTerms.AddRange(additionalStatementElements.CodeCompoundTerms);
 }
Ejemplo n.º 11
0
 public static void Rule(AdditionalCompoundTermMembers lhs, Comma comma, CompoundTermMember compoundTermMember, AdditionalCompoundTermMembers additionalCompoundTermMembers)
 {
     lhs.CodeTerms.Add(compoundTermMember.CodeTerm);
     lhs.CodeTerms.AddRange(additionalCompoundTermMembers.CodeTerms);
 }
Ejemplo n.º 12
0
 public static void Rule(AdditionalListItems lhs, Comma comma, ListItem listItem, AdditionalListItems additionalListItems)
 {
     lhs.CodeTerms.Add(listItem.CodeTerm);
     lhs.CodeTerms.AddRange(additionalListItems.CodeTerms);
 }
 public static void Rule(AdditionalStatementElements lhs, Comma comma, StatementElement statementElement, AdditionalStatementElements additionalStatementElements)
 {
     lhs.CodeCompoundTerms.Add(statementElement.CodeCompoundTerm);
     lhs.CodeCompoundTerms.AddRange(additionalStatementElements.CodeCompoundTerms);
 }
Ejemplo n.º 14
0
        public void TestTerminals()
        {
            AssertSuccess(LBrace.Parse("{"), '{', true);
            AssertSuccess(RBrace.Parse("}"), '}', true);
            AssertSuccess(LParen.Parse("("), '(', true);
            AssertSuccess(RParen.Parse(")"), ')', true);
            AssertSuccess(Comma.Parse(","), ',', true);
            AssertSuccess(UScore.Parse("_"), '_', true);
            AssertSuccess(DQuote.Parse("\""), '"', true);
            AssertSuccess(SQuote.Parse("'"), '\'', true);

            AssertSuccess(Str.Parse("\"abc\""), "abc", true);
            AssertSuccess(Chr.Parse("'a'"), "a", true);

            AssertSuccess(ExprParser.Int.Parse("234"), "234", true);
            AssertSuccess(Float.Parse("234.0"), "234.0", true);
            AssertSuccess(Float.Parse(".0"), ".0", true);
            AssertSuccess(Float.Parse("1e2"), "1e2", true);
            AssertSuccess(Float.Parse("1E2"), "1E2", true);
            AssertSuccess(Float.Parse("1E-2"), "1E-2", true);
            AssertSuccess(Float.Parse("1E+2"), "1E+2", true);
            AssertSuccess(Float.Parse("1.0E2"), "1.0E2", true);
            AssertSuccess(Float.Parse("1.0E-2"), "1.0E-2", true);
            AssertSuccess(Float.Parse("1.0E+2"), "1.0E+2", true);


            AssertSuccess(IdStart.Parse("_"), '_', true);
            AssertSuccess(IdStart.Parse("a"), 'a', true);
            AssertSuccess(IdRest.Parse("_"), '_', true);
            AssertSuccess(IdRest.Parse("1"), '1', true);
            AssertSuccess(IdRest.Parse("_"), '_', true);
            AssertSuccess(IdRest.Parse("a"), 'a', true);
            AssertSuccess(Id.Parse("_"), "_", true);
            AssertSuccess(Id.Parse("A"), "A", true);
            AssertSuccess(Id.Parse("z"), "z", true);
            AssertSuccess(Id.Parse("abc"), "abc", true);
            AssertSuccess(Id.Parse("_abc"), "_abc", true);
            AssertSuccess(Id.Parse("_1"), "_1", true);
            AssertSuccess(Id.Parse("_1_a_zZ"), "_1_a_zZ", true);
            AssertSuccess(Id.Parse("e"), "e", true);
            AssertSuccess(Id.Parse("el"), "el", true);
            AssertSuccess(Id.Parse("els"), "els", true);
            AssertSuccess(Id.Parse("else1"), "else1", true);
            AssertSuccess(Id.Parse("i"), "i", true);
            AssertSuccess(Id.Parse("if1"), "if1", true);
            AssertSuccess(Id.Parse("if_"), "if_", true);
            AssertSuccess(Id.Parse("t"), "t", true);
            AssertSuccess(Id.Parse("tr"), "tr", true);

            AssertSuccess(True.Parse("true"), "true", true);
            AssertSuccess(False.Parse("false"), "false", true);
            AssertSuccess(If.Parse("if"), "if", true);
            AssertSuccess(Else.Parse("else"), "else", true);
            AssertSuccess(Then.Parse("then"), "then", true);
            AssertSuccess(ExprParser.In.Parse("in"), "in", true);

            AssertSuccess(Bool.Parse("true"), "true", true);
            AssertSuccess(Bool.Parse("false"), "false", true);
            AssertSuccess(Bool.Parse("\"true\""), "true", true);
            AssertSuccess(Bool.Parse("\"false\""), "false", true);

            AssertSuccess(KeyWords.Parse("else"), "else", true);
            AssertSuccess(KeyWords.Parse("then"), "then", true);
            AssertSuccess(KeyWords.Parse("if"), "if", true);
            AssertSuccess(KeyWords.Parse("in "), "in", true);
        }
Ejemplo n.º 15
0
 protected override EP_VP1 Visit(Comma node)
 {
     return(Visit(node as Expression));
 }
Ejemplo n.º 16
0
 public Comma(MathItem prev, MathItem?next)
 {
     Content = prev;
     Next    = next switch { null => null, Comma c => c, _ => new Comma(next, null) };
 }
Ejemplo n.º 17
0
 protected override Comma VisitComma(Comma node)
 {
     visitedComma = true;
     Assert.IsTrue(node.Value == ",");
     return(base.VisitComma(node));
 }
Ejemplo n.º 18
0
 public Member(Lexer.Token name, Block body, Comma args)
 {
     Name      = name;
     Body      = body;
     Arguments = args;
 }
Ejemplo n.º 19
0
 protected virtual Comma VisitComma(Comma node)
 {
     return(VisitSyntaxNode(node) as Comma);
 }
Ejemplo n.º 20
0
 public static void Rule(AdditionalCompoundTerms lhs, Comma comma, CompoundTermMember compoundTermMember, AdditionalCompoundTerms additionalCompoundTerms)
 {
 }
 public static void Rule(AdditionalCompoundTermMembers lhs, Comma comma, CompoundTermMember compoundTermMember, AdditionalCompoundTermMembers additionalCompoundTermMembers)
 {
     lhs.CodeTerms.Add(compoundTermMember.CodeTerm);
     lhs.CodeTerms.AddRange(additionalCompoundTermMembers.CodeTerms);
 }
Ejemplo n.º 22
0
 public static void Rule(AdditionalListItems lhs, Comma comma, ListItem listItem, AdditionalListItems additionalListItems)
 {
     lhs.CodeTerms.Add(listItem.CodeTerm);
     lhs.CodeTerms.AddRange(additionalListItems.CodeTerms);
 }