Esempio n. 1
0
File: IoLexer.cs Progetto: ypyf/io
        // helpers

        public int readTokenCharsType(string chars, IoTokenType type)
        {
            foreach (char c in chars)
            {
                if (readTokenCharType(c, type) != 0)
                {
                    return(1);
                }
            }
            return(0);
        }
Esempio n. 2
0
        public IoToken grabTokenType(IoTokenType type)
        {
            int len = grabLength();

            string s1 = s.Substring(lastPos(), len);

            if (len == 0)
            {
                throw new Exception("IoLexer fatal error: empty token\n");
            }

            return addTokenStringType(s1, type);
        }
Esempio n. 3
0
File: IoLexer.cs Progetto: ypyf/io
        public IoToken grabTokenType(IoTokenType type)
        {
            int len = grabLength();

            string s1 = s.Substring(lastPos(), len);

            if (len == 0)
            {
                throw new Exception("IoLexer fatal error: empty token\n");
            }

            return(addTokenStringType(s1, type));
        }
Esempio n. 4
0
File: IoLexer.cs Progetto: ypyf/io
        public int readTokenCharType(char c, IoTokenType type)
        {
            pushPos();

            if (readChar(c) != 0)
            {
                grabTokenType(type);
                popPos();
                return(1);
            }

            popPosBack();
            return(0);
        }
Esempio n. 5
0
        public IoToken addTokenStringType(string s1, IoTokenType type)
        {
            IoToken top = currentToken();
            IoToken t = new IoToken();

            t.lineNumber = currentLineNumber();
            t.charNumber = currentPos;

            if (t.charNumber < 0)
            {
                System.Console.WriteLine("bad t->charNumber = %i\n", t.charNumber);
            }

            t.name = s1;
            t.type = type;

            if (top != null)
            {
                top.nextToken = t;
            }

            tokenStream.Add(t);
            return t;
        }
Esempio n. 6
0
File: IoLexer.cs Progetto: ypyf/io
        public IoToken addTokenStringType(string s1, IoTokenType type)
        {
            IoToken top = currentToken();
            IoToken t   = new IoToken();

            t.lineNumber = currentLineNumber();
            t.charNumber = currentPos;

            if (t.charNumber < 0)
            {
                System.Console.WriteLine("bad t->charNumber = %i\n", t.charNumber);
            }

            t.name = s1;
            t.type = type;

            if (top != null)
            {
                top.nextToken = t;
            }

            tokenStream.Add(t);
            return(t);
        }
Esempio n. 7
0
        public int readTokenCharType(char c, IoTokenType type)
        {
            pushPos();

            if (readChar(c) != 0)
            {
                grabTokenType(type);
                popPos();
                return 1;
            }

            popPosBack();
            return 0;
        }
Esempio n. 8
0
 // helpers
 public int readTokenCharsType(string chars, IoTokenType type)
 {
     foreach (char c in chars)
     {
         if (readTokenCharType(c, type) != 0)
             return 1;
     }
     return 0;
 }
Esempio n. 9
0
File: IoLexer.cs Progetto: ypyf/io
        public int readMessage()
        {
            int foundSymbol = 0;

            pushPos();
            readPadding();
            foundSymbol = readSymbol();

            char groupChar;

            while (readSeparator() != 0 || readComment() != 0)
            {
                ;
            }

            groupChar = peekChar();

            // this is bug in original IoVM so I've commented this out

            if ("[{".IndexOf(groupChar) != -1 || (foundSymbol == 0 &&
                                                  groupChar == '('))
            {
                string groupName = nameForGroupChar(groupChar);
                addTokenStringType(groupName, IoTokenType.IDENTIFIER_TOKEN);
            }

            if (readTokenCharsType("([{", IoTokenType.OPENPAREN_TOKEN) != 0)
            {
                readPadding();
                do
                {
                    IoTokenType type = currentToken().type;
                    readPadding();

                    // Empty argument: (... ,)
                    if (IoTokenType.COMMA_TOKEN == type)
                    {
                        char c = current;
                        if (',' == c || ")]}".IndexOf(c) != -1)
                        {
                            readMessageError("missing argument in argument list");
                            return(0);
                        }
                    }

                    if (groupChar == '[')
                    {
                        specialChars = "._";
                    }
                    messageChain();
                    if (groupChar == '[')
                    {
                        specialChars = ":._";
                    }
                    readPadding();
                } while (readTokenCharType(',', IoTokenType.COMMA_TOKEN) != 0);

                if (readTokenCharsType(")]}", IoTokenType.CLOSEPAREN_TOKEN) == 0)
                {
                    if (groupChar == '(')
                    {
                        readMessageError("unmatched ()s");
                    }
                    else if (groupChar == '[')
                    {
                        readMessageError("unmatched []s");
                    }
                    else if (groupChar == '{')
                    {
                        readMessageError("unmatched {}s");
                    }
                    return(0);
                }

                popPos();
                return(1);
            }

            if (foundSymbol != 0)
            {
                popPos();
                return(1);
            }

            popPosBack();
            return(0);
        }