示例#1
0
    public static Terminal_NumericValue Parse(
        ParserContext context,
        String spelling,
        String regex,
        int length)
    {
        context.Push("NumericValue", spelling + "," + regex);

        bool parsed = true;

        Terminal_NumericValue numericValue = null;

        try
        {
            String value = context.text.Substring(context.index, length);

            if ((parsed = Regex.IsMatch(value, regex)))
            {
                context.index += length;
                numericValue   = new Terminal_NumericValue(value, null);
            }
        }
        catch (ArgumentOutOfRangeException) { parsed = false; }

        context.Pop("NumericValue", parsed);

        return(numericValue);
    }
示例#2
0
 public Object Visit(Terminal_NumericValue value)
 {
     Console.Write(value.spelling);
     terminal = true;
     return(null);
 }
示例#3
0
    public static Rule_Minutes Parse(ParserContext context)
    {
        context.Push("Minutes");

        Rule rule;
        bool parsed = true;
        ParserAlternative b;
        int s0 = context.index;
        ParserAlternative a0 = new ParserAlternative(s0);

        List <ParserAlternative> as1 = new List <ParserAlternative>();

        parsed = false;
        {
            int s1 = context.index;
            ParserAlternative a1 = new ParserAlternative(s1);
            parsed = true;
            if (parsed)
            {
                bool f1 = true;
                int  c1 = 0;
                for (int i1 = 0; i1 < 1 && f1; i1++)
                {
                    rule = Terminal_NumericValue.Parse(context, "%x30-35", "[\\x30-\\x35]", 1);
                    if ((f1 = rule != null))
                    {
                        a1.Add(rule, context.index);
                        c1++;
                    }
                }
                parsed = c1 == 1;
            }
            if (parsed)
            {
                bool f1 = true;
                int  c1 = 0;
                for (int i1 = 0; i1 < 1 && f1; i1++)
                {
                    rule = Terminal_NumericValue.Parse(context, "%x30-39", "[\\x30-\\x39]", 1);
                    if ((f1 = rule != null))
                    {
                        a1.Add(rule, context.index);
                        c1++;
                    }
                }
                parsed = c1 == 1;
            }
            if (parsed)
            {
                as1.Add(a1);
            }
            context.index = s1;
        }

        b = ParserAlternative.GetBest(as1);

        parsed = b != null;

        if (parsed)
        {
            a0.Add(b.rules, b.end);
            context.index = b.end;
        }

        rule = null;
        if (parsed)
        {
            rule = new Rule_Minutes(context.text.Substring(a0.start, a0.end - a0.start), a0.rules);
        }
        else
        {
            context.index = s0;
        }

        context.Pop("Minutes", parsed);

        return((Rule_Minutes)rule);
    }
示例#4
0
    public static Rule_Hours Parse(ParserContext context)
    {
        context.Push("Hours");

        Rule rule;
        bool parsed = true;
        ParserAlternative b;
        int s0 = context.index;
        ParserAlternative a0 = new ParserAlternative(s0);

        List <ParserAlternative> as1 = new List <ParserAlternative>();

        parsed = false;
        {
            int s1 = context.index;
            ParserAlternative a1 = new ParserAlternative(s1);
            parsed = true;
            if (parsed)
            {
                bool f1 = true;
                int  c1 = 0;
                for (int i1 = 0; i1 < 1 && f1; i1++)
                {
                    int g1 = context.index;
                    List <ParserAlternative> as2 = new List <ParserAlternative>();
                    parsed = false;
                    {
                        int s2 = context.index;
                        ParserAlternative a2 = new ParserAlternative(s2);
                        parsed = true;
                        if (parsed)
                        {
                            bool f2 = true;
                            int  c2 = 0;
                            for (int i2 = 0; i2 < 1 && f2; i2++)
                            {
                                rule = Terminal_NumericValue.Parse(context, "%x30-31", "[\\x30-\\x31]", 1);
                                if ((f2 = rule != null))
                                {
                                    a2.Add(rule, context.index);
                                    c2++;
                                }
                            }
                            parsed = c2 == 1;
                        }
                        if (parsed)
                        {
                            bool f2 = true;
                            int  c2 = 0;
                            for (int i2 = 0; i2 < 1 && f2; i2++)
                            {
                                rule = Terminal_NumericValue.Parse(context, "%x30-39", "[\\x30-\\x39]", 1);
                                if ((f2 = rule != null))
                                {
                                    a2.Add(rule, context.index);
                                    c2++;
                                }
                            }
                            parsed = c2 == 1;
                        }
                        if (parsed)
                        {
                            as2.Add(a2);
                        }
                        context.index = s2;
                    }

                    b = ParserAlternative.GetBest(as2);

                    parsed = b != null;

                    if (parsed)
                    {
                        a1.Add(b.rules, b.end);
                        context.index = b.end;
                    }
                    f1 = context.index > g1;
                    if (parsed)
                    {
                        c1++;
                    }
                }
                parsed = c1 == 1;
            }
            if (parsed)
            {
                as1.Add(a1);
            }
            context.index = s1;
        }
        {
            int s1 = context.index;
            ParserAlternative a1 = new ParserAlternative(s1);
            parsed = true;
            if (parsed)
            {
                bool f1 = true;
                int  c1 = 0;
                for (int i1 = 0; i1 < 1 && f1; i1++)
                {
                    int g1 = context.index;
                    List <ParserAlternative> as2 = new List <ParserAlternative>();
                    parsed = false;
                    {
                        int s2 = context.index;
                        ParserAlternative a2 = new ParserAlternative(s2);
                        parsed = true;
                        if (parsed)
                        {
                            bool f2 = true;
                            int  c2 = 0;
                            for (int i2 = 0; i2 < 1 && f2; i2++)
                            {
                                rule = Terminal_NumericValue.Parse(context, "%x32", "[\\x32]", 1);
                                if ((f2 = rule != null))
                                {
                                    a2.Add(rule, context.index);
                                    c2++;
                                }
                            }
                            parsed = c2 == 1;
                        }
                        if (parsed)
                        {
                            bool f2 = true;
                            int  c2 = 0;
                            for (int i2 = 0; i2 < 1 && f2; i2++)
                            {
                                rule = Terminal_NumericValue.Parse(context, "%x30-33", "[\\x30-\\x33]", 1);
                                if ((f2 = rule != null))
                                {
                                    a2.Add(rule, context.index);
                                    c2++;
                                }
                            }
                            parsed = c2 == 1;
                        }
                        if (parsed)
                        {
                            as2.Add(a2);
                        }
                        context.index = s2;
                    }

                    b = ParserAlternative.GetBest(as2);

                    parsed = b != null;

                    if (parsed)
                    {
                        a1.Add(b.rules, b.end);
                        context.index = b.end;
                    }
                    f1 = context.index > g1;
                    if (parsed)
                    {
                        c1++;
                    }
                }
                parsed = c1 == 1;
            }
            if (parsed)
            {
                as1.Add(a1);
            }
            context.index = s1;
        }

        b = ParserAlternative.GetBest(as1);

        parsed = b != null;

        if (parsed)
        {
            a0.Add(b.rules, b.end);
            context.index = b.end;
        }

        rule = null;
        if (parsed)
        {
            rule = new Rule_Hours(context.text.Substring(a0.start, a0.end - a0.start), a0.rules);
        }
        else
        {
            context.index = s0;
        }

        context.Pop("Hours", parsed);

        return((Rule_Hours)rule);
    }
 public object Visit(Terminal_NumericValue value)
 {
     /* WON'T BE VISITED */
     return(true);
 }