Example #1
0
        private static LexObject LexExisting(int lineNum, int charNum, char c, LexObject existing)
        {
            switch (existing.Type)
            {
            case LexType.Value:
                if (Char.IsWhiteSpace(c))
                {
                    return(null);
                }
                if (NonValueCharacters.Contains(c))
                {
                    return(LexNew(lineNum, charNum, c));
                }
                existing.Value += c.ToString(CultureInfo.InvariantCulture);
                return(existing);

            case LexType.String:
                existing.Value += c.ToString(CultureInfo.InvariantCulture);
                return(c == '"' ? null : existing);

            case LexType.Comment:
                return(c == '\n' ? null : existing);

            default:
                return(LexNew(lineNum, charNum, c));
            }
        }
Example #2
0
 private static void Assert(LexObject obj, bool value, string error)
 {
     if (!value)
     {
         throw new ProviderException("Unable to parse FGD. " + error.Trim() + "\n" +
                                     "On line " + obj.LineNumber + ", character " + obj.CharacterNumber);
     }
 }
Example #3
0
 private static void Assert(LexObject obj, bool value, string error)
 {
     if (!value)
     {
         throw new ProviderException("Unable to parse FGD. " + error.Trim() + "\n" +
                                     "On line " + obj.LineNumber + ", character " + obj.CharacterNumber);
     }
 }
Example #4
0
        private static VariableType ParseVariableType(LexObject obj)
        {
            var          type = obj.Value.ToLower().Replace("_", "");
            VariableType vt;

            if (Enum.TryParse(type, true, out vt))
            {
                return(vt);
            }
            throw new ProviderException("Unable to parse FGD. Invalid variable type: " + type + ".\n" +
                                        "On line " + obj.LineNumber + ", character " + obj.CharacterNumber);
        }
Example #5
0
        private static ClassType ParseClassType(string type, LexObject obj)
        {
            type = type.ToLower().Replace("class", "");
            ClassType ct;

            if (Enum.TryParse(type, true, out ct))
            {
                return(ct);
            }
            throw new ProviderException("Unable to parse FGD. Invalid class type: " + type + ".\n" +
                                        "On line " + obj.LineNumber + ", character " + obj.CharacterNumber);
        }
Example #6
0
        private static IEnumerable <LexObject> Lex(TextReader reader)
        {
            var       lineNum = 1;
            var       charNum = 0;
            int       i;
            LexObject current = null;

            while ((i = reader.Read()) >= 0)
            {
                var c = Convert.ToChar(i);
                if (c == '\n')
                {
                    lineNum++;
                    charNum = 0;
                }
                else
                {
                    charNum++;
                }
                if (current == null)
                {
                    current = LexNew(lineNum, charNum, c);
                }
                else
                {
                    var le = LexExisting(lineNum, charNum, c, current);
                    if (le != current)
                    {
                        yield return(current);

                        current = le;
                    }
                }
            }
            if (current != null)
            {
                yield return(current);
            }
        }
Example #7
0
 private static LexObject LexExisting(char c, LexObject existing)
 {
     switch (existing.Type)
     {
         case LexType.Value:
             if (Char.IsWhiteSpace(c))
             {
                 return null;
             }
             if (NonValueCharacters.Contains(c))
             {
                 return LexNew(c);
             }
             existing.Value += c.ToString();
             return existing;
         case LexType.String:
             existing.Value += c.ToString();
             return c == '"' ? null : existing;
         case LexType.Comment:
             return c == '\n' ? null : existing;
         default:
             return LexNew(c);
     }
 }
Example #8
0
 private static VariableType ParseVariableType(LexObject obj)
 {
     var type = obj.Value.ToLower().Replace("_", "");
     VariableType vt;
     if (Enum.TryParse(type, true, out vt))
     {
         return vt;
     }
     throw new ProviderException("Unable to parse FGD. Invalid variable type: " + type + ".\n" +
                                 "On line " + obj.LineNumber + ", character " + obj.CharacterNumber);
 }
Example #9
0
 private static ClassType ParseClassType(string type, LexObject obj)
 {
     type = type.ToLower().Replace("class", "");
     ClassType ct;
     if (Enum.TryParse(type, true, out ct))
     {
         return ct;
     }
     throw new ProviderException("Unable to parse FGD. Invalid class type: " + type + ".\n" +
                                 "On line " + obj.LineNumber + ", character " + obj.CharacterNumber);
 }