Esempio n. 1
0
        public static bool CanPrintAsNumber(UString textValue, Symbol typeMarker)
        {
            int la0;

            // Check if the typeMarker is potentially acceptable for printing as a number
            // line 26
            if (typeMarker.Name.TryGet(0, '\0') != '_' || !IsNormalIdentifier(typeMarker.Name))
            {
                return(false);
            }
            // line 28
            char firstTMChar = typeMarker.Name.TryGet(1, '\0');

            // line 29
            if (firstTMChar == 'e' || firstTMChar == 'E' || firstTMChar == 'p' || firstTMChar == 'P')
            {
                return(false);
            }

            // Prepare LexerSource needed by LLLPG, and our error counter
            // line 33
            if (src == null)
            {
                src           = new LexerSource <UString>(textValue, "", 0, false);
                src.ErrorSink = msgCounter = new NullMessageSink();
            }
            else
            {
                src.Reset(textValue, "", 0, false);                     // re-use old object
                msgCounter.ResetCountersToZero();
            }

            // Find out whether textValue is in numeric format
            // line 42
            bool isHex = false;

            // Line 44: ([−])?
            do
            {
                la0 = src.LA0;
                if (la0 == '−')
                {
                    src.Skip();
                }
                else if (la0 == -1 || la0 == '.' || la0 >= '0' && la0 <= '9')
                {
                    ;
                }
                else
                {
                    src.Error(0, "In rule 'CanPrintAsNumber', expected one of: [\\$.0-9−]");
                }
            } while (false);
            // Line 45: ( BinNumber / HexNumber / DecNumber )
            la0 = src.LA0;
            if (la0 == '0')
            {
                switch (src.LA(1))
                {
                case 'B':
                case 'b':
                    BinNumber();
                    break;

                case 'X':
                case 'x':
                {
                    HexNumber();
                    // line 46
                    isHex = true;
                }
                break;

                case -1:
                case '\'':
                case '.':
                case '0':
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                case '9':
                case 'E':
                case '_':
                case 'e':
                    DecNumber();
                    break;

                default:
                    src.Error(1, "In rule 'CanPrintAsNumber', expected one of: [\\$'.0-9BEX_bex]");
                    break;
                }
            }
            else if (la0 == '.' || la0 >= '1' && la0 <= '9')
            {
                DecNumber();
            }
            else
            {
                src.Error(0, "In rule 'CanPrintAsNumber', expected one of: [.0-9]");
            }
            src.Match(-1);
            // line 50
            return(msgCounter.ErrorCount == 0 &&
                   !(isHex && (firstTMChar >= 'a' && firstTMChar <= 'f' || firstTMChar >= 'A' && firstTMChar <= 'F')));
        }
Esempio n. 2
0
        void Num()
        {
            int la0, la1;

                        #line 97 "Grammars.ecs"
            bool dot = false;
                        #line default
            // Line 98: ([.])?
            la0 = _src.LA0;
            if (la0 == '.')
            {
                _src.Skip();
                                #line 98 "Grammars.ecs"
                dot = true;
                                #line default
            }
            _src.MatchRange('0', '9');
            // Line 99: ([0-9])*
            for (;;)
            {
                la0 = _src.LA0;
                if (la0 >= '0' && la0 <= '9')
                {
                    _src.Skip();
                }
                else
                {
                    break;
                }
            }
            // Line 100: (&!{dot} [.] [0-9] ([0-9])*)?
            la0 = _src.LA0;
            if (la0 == '.')
            {
                if (!dot)
                {
                    la1 = _src.LA(1);
                    if (la1 >= '0' && la1 <= '9')
                    {
                        _src.Skip();
                        _src.Skip();
                        // Line 100: ([0-9])*
                        for (;;)
                        {
                            la0 = _src.LA0;
                            if (la0 >= '0' && la0 <= '9')
                            {
                                _src.Skip();
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                }
            }
                        #line 101 "Grammars.ecs"
            _value = double.Parse(_src.CharSource.Substring(_startIndex, _src.InputPosition - _startIndex));
                        #line default
        }