示例#1
0
        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);
        }
                )
        { }
示例#2
0
 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)
         )
 {
 }