Example #1
0
        private IParsedType ParseGenericType(string typeName) {
            token = scanner.NextToken();
            if (token.TokenType != Scanner.TokenType.Number) {
                error = ParserError.Error(NumberExpected, scanner.CurrentIndex);
                return null;
            }
            var parsedType = new ParsedType(typeName + "`" + token.Text);

            token = scanner.NextToken();
            if (token.TokenType != Scanner.TokenType.LeftBracket) {
                error = ParserError.Error(LeftBracketExpected, scanner.CurrentIndex);
                return null;
            }
            ParseGenericTypeParameter(parsedType);
            if (error != ParserError.None) {
                return null;
            }

            if (token.TokenType != Scanner.TokenType.RightBracket) {
                error = ParserError.Error(RightBracketExpected, scanner.CurrentIndex);
                return null;
            }
            token = scanner.NextToken();
            return parsedType;
        }
Example #2
0
 public IParsedType Parse(string input, out IParserError anError) {
     scanner = new Scanner(input);
     error = ParserError.None;
     var parsedType = ParseTypeAndAssemblyName();
     anError = error;
     return parsedType;
 }
Example #3
0
 private IParsedType ParseSimpleOrArrayType(string typeName) {
     if (token.TokenType == Scanner.TokenType.LeftBracket) {
         token = scanner.NextToken();
         if (token.TokenType != Scanner.TokenType.RightBracket) {
             error = ParserError.Error(RightBracketExpected, scanner.CurrentIndex);
             return null;
         }
         typeName += "[]";
         token = scanner.NextToken();
     }
     return new ParsedType(typeName);
 }
Example #4
0
        private IParsedType ParseType() {
            token = scanner.NextToken();
            if (token.TokenType != Scanner.TokenType.Name) {
                error = ParserError.Error(NameExpected, scanner.CurrentIndex);
                return null;
            }
            string typeName = token.Text;

            token = scanner.NextToken();
            if (token.TokenType != Scanner.TokenType.Accent) {
                return ParseSimpleOrArrayType(typeName);
            }
            return ParseGenericType(typeName);
        }
Example #5
0
        private IParsedType ParseTypeAndAssemblyName() {
            IParsedType parsedType = ParseType();
            if (error != ParserError.None) {
                return null;
            }
            
            ParseAssemblyName(parsedType);
            if (error != ParserError.None) {
                return null;
            }

            if (!scanner.EOF || token.TokenType != Scanner.TokenType.EOF) {
                error = ParserError.Error(string.Format(UnexpectedToken, token.Text), scanner.CurrentIndex - token.Text.Length);
                return null;
            }
            return parsedType;
        }
Example #6
0
 private void ParseAssemblyName(IParsedType parsedType) {
     if (token.TokenType != Scanner.TokenType.Comma) {
         return;
     }
     token = scanner.NextToken();
     if (token.TokenType != Scanner.TokenType.Name) {
         error = ParserError.Error(NameExpected, scanner.CurrentIndex);
         return;
     }
     parsedType.AssemblyName = token.Text;
     token = scanner.NextToken();
 }