예제 #1
0
        private TypeIdParserScanData.SubsetEntry ParseSubset(TokenTransition expected, bool advance = true, bool error = true)
        {
            var subsetScan = currentScanner.NextToken(expected);

            if (subsetScan.Count == 1)
            {
                if (advance)
                {
                    currentScanner.Accept(subsetScan[0]);
                }
                return((TypeIdParserScanData.SubsetEntry)subsetScan[0]);
            }
            else if (error)
            {
                throw new SyntaxErrorException();
            }
            return(null);
        }
예제 #2
0
        private TypeIdParserScanData.CaptureEntry ParseCaptureInternal(TokenTransition expected, bool error = true, bool advance = true)
        {
            var captureScan = currentScanner.NextToken(expected & (TypeIdParserTokens.CultureIdentifier | TypeIdParserTokens.HexByte | TypeIdParserTokens.HexQWord | TypeIdParserTokens.NestedQualifiedAssemblyIdentifier | TypeIdParserTokens.Number | TypeIdParserTokens.QualifiedAssemblyIdentifier | TypeIdParserTokens.QualifiedIdentifier | TypeIdParserTokens.Whitespace));

            if (captureScan.Count == 1)
            {
                var capture = (TypeIdParserScanData.CaptureEntry)captureScan[0];
                if (advance)
                {
                    currentScanner.Accept(captureScan[0]);
                }
                return(capture);
            }
            else if (error)
            {
                throw new SyntaxErrorException();
            }
            return(null);
        }
예제 #3
0
 private string ParseCapture(TokenTransition expected, bool error = true, bool advance = true)
 {
     return(ParseCaptureInternal(expected, error, advance).Capture);
 }
예제 #4
0
        private Tuple <string, TypeIdParserScanData.SubsetEntry, bool> ParseCaptureOrSubset(TokenTransition expected, bool advance = true, bool error = true)
        {
            var capture = ParseCaptureInternal(expected, false, advance);

            TypeIdParserScanData.SubsetEntry subset = null;
            if (capture == null)
            {
                subset = ParseSubset(expected, advance, error);
            }
            else
            {
                return(new Tuple <string, TypeIdParserScanData.SubsetEntry, bool>(capture.Capture, null, true));
            }
            return(new Tuple <string, TypeIdParserScanData.SubsetEntry, bool>(null, subset, false));
        }