// helpers public int readTokenCharsType(string chars, IoTokenType type) { foreach (char c in chars) { if (readTokenCharType(c, type) != 0) { return(1); } } return(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); }
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)); }
public int readTokenCharType(char c, IoTokenType type) { pushPos(); if (readChar(c) != 0) { grabTokenType(type); popPos(); return(1); } popPosBack(); return(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; }
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); }
public int readTokenCharType(char c, IoTokenType type) { pushPos(); if (readChar(c) != 0) { grabTokenType(type); popPos(); return 1; } popPosBack(); return 0; }
// helpers public int readTokenCharsType(string chars, IoTokenType type) { foreach (char c in chars) { if (readTokenCharType(c, type) != 0) return 1; } return 0; }
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); }