public Identifier(GeneralLanguageDef languageDef) : base( inp => { var res = Tok.Lexeme( from name in new Ident(languageDef) where !IdentHelper.IsReservedName(name, languageDef) select new IdentifierToken(name, inp.First().Location) ) .Parse(inp); if (res.IsFaulted) { return(res); } if (res.Value.IsEmpty) { return(ParserResult.Fail <IdentifierToken>("unexpected: reserved word", inp)); } return(res); } ) { }
public Reserved(string name, GeneralLanguageDef languageDef) : base( inp => Tok.Lexeme( from cs in IdentHelper.CaseString(name, languageDef) from nf in Prim.NotFollowedBy(languageDef.IdentLetter) .Fail("end of " + cs.AsString()) select new ReservedToken(cs, inp.Head().Location) ) .Parse(inp) ) { }