Ejemplo n.º 1
0
        public static IValue ParseValue(string text, int sectionCharIndex, ParsingStatus status)
        {
            if (!IsLocalSymbol(text))
            {
                return(null);
            }

            char       localSymbolChar = text[0];
            SymbolBase symbol          = status.Symbols[new string(localSymbolChar, 1)];

            if (symbol == null)
            {
                symbol = new LocalSymbol(localSymbolChar - '0');
                status.Symbols.Add(symbol);
            }

            if (!(symbol is LocalSymbol))
            {
                status.ReportParsingError(sectionCharIndex, 1, "non-local symbol named " + localSymbolChar + " already defined, unable to refer to it");
                return(symbol);
            }

            if (IsDefinitionChar(text[1]))
            {
                status.ReportParsingError(sectionCharIndex + 1, 1, "local symbol definition found where reference was expected");
                return(symbol);
            }

            return(new Reference((LocalSymbol)symbol, IsForwardReferenceChar(text[1]) ? Reference.Directions.Forwards : Reference.Directions.Backwards));
        }
Ejemplo n.º 2
0
        public static SymbolBase ParseDefinition(string text, int sectionCharIndex, ParsingStatus status)
        {
            if (!IsLocalSymbol(text))
            {
                return(null);
            }

            if (!IsDefinitionChar(text[1]))
            {
                status.ReportParsingError(sectionCharIndex + 1, 1, "local symbol reference found where definition was expected");
            }

            char       localSymbolChar = text[0];
            SymbolBase symbol          = status.Symbols[localSymbolChar.ToString()];

            if (symbol == null)
            {
                return(new LocalSymbol(localSymbolChar - '0'));
            }

            if (!(symbol is LocalSymbol))
            {
                status.ReportParsingError(sectionCharIndex, 1, "non-local symbol named " + localSymbolChar + " already defined");
            }

            return(symbol);
        }
Ejemplo n.º 3
0
        public static IValue ParseValue(string text, int sectionCharIndex, ParsingStatus status)
        {
            var symbolValue = LocalSymbol.ParseValue(text, sectionCharIndex, status);

            if (symbolValue != null)
            {
                return(symbolValue);
            }

            if (!IsValueSymbolName(text))
            {
                return(null);
            }

            SymbolBase symbol = status.Symbols[text];

            if (symbol == null)
            {
                symbol = new ValueSymbol(text);
                status.Symbols.Add(symbol);
            }

            return(symbol);
        }