private static bool TryParse (Tokenizer.State state, Func <Tokenizer.State, Token> parser, out Token token) { state.Save(); Tokenizer.State stateCopy = new Tokenizer.State(state); token = parser(state); if (state.IsErrorOccured()) { state.Drop(); return(true); } else if (token != null) { token.Index = stateCopy.Index; token.Line = stateCopy.Line; token.Position = stateCopy.Position; state.Drop(); return(true); } state.Restore(); return(false); }
public static Token Parse(Tokenizer.State state) { if (state.CurrentCharacter == '/') { int begin = state.Index; bool inline = false; state.Index += 1; if (state.CurrentCharacter == '/') { state.Index += 1; ParseInlineCommentary(state); inline = true; } else if (state.CurrentCharacter == '*') { state.Index += 1; ParseMultilineCommentary(state); } else { return(null); } if (state.IsErrorOccured()) { state.Index = begin + 2; } return(new Token( value: state.Code.Substring(begin, state.Index - begin), type: TokenType.Commentary, subType: inline ? TokenSubType.InlineCommentary : TokenSubType.MultilineCommentary )); } return(null); }
public static Token Parse(Tokenizer.State state) { if (state.CurrentCharacter == '`') { var begin = state.Index; state.Index += 1; ParseInlineCommentary(state); if (state.IsErrorOccured()) { state.Index = begin + 2; } return(new Token( value: state.Code.Substring(begin, state.Index - begin), type: TokenType.Commentary, subType: TokenSubType.InlineCommentary )); } return(null); }