Example #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);
        }
                )
        { }
Example #2
0
        public Operator(GeneralLanguageDef languageDef)
            :
            base(
                inp =>
        {
            var res = Tok.Lexeme(
                from name in new Oper(languageDef)
                where !OpsHelper.IsReservedOp(name, languageDef)
                select new OperatorToken(name, inp.First().Location))
                      .Parse(inp);

            if (res.IsFaulted)
            {
                return(res);
            }

            if (res.Value.IsEmpty)
            {
                return(ParserResult.Fail <OperatorToken>("unexpected: reserved operator", inp));
            }

            return(res);
        }
                )
        { }
Example #3
0
 public Ident(GeneralLanguageDef languageDef)
     :
     base(
         inp => (from c in languageDef.IdentStart
                 from cs in Prim.Many(languageDef.IdentLetter)
                 select c.Cons(cs))
         .Fail("identifier")
         .Parse(inp)
         )
 {
 }
Example #4
0
 public Oper(GeneralLanguageDef languageDef)
     :
     base(
         inp => (from c in languageDef.OpStart
                 from cs in Prim.Many(languageDef.OpLetter)
                 select c.Cons(cs))
         .Fail("operator")
         .Parse(inp)
         )
 {
 }
Example #5
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)
         )
 {
 }
Example #6
0
 public ReservedOp(string name, GeneralLanguageDef languageDef)
     :
     base(
         inp => Tok.Lexeme(
             from op in Prim.String(name)
             from nf in Prim.NotFollowedBy(languageDef.OpLetter)
             .Fail("end of " + op.AsString())
             select new ReservedOpToken(op, inp.First().Location)
             )
         .Parse(inp)
         )
 {
 }
Example #7
0
 /// <summary>
 /// TODO: Make this pay attention to the case-sensitivity settings
 /// </summary>
 internal static bool IsReservedName(ImmutableList <ParserChar> name, GeneralLanguageDef languageDef)
 {
     return(languageDef.ReservedNames.Contains(name.AsString()));
 }
Example #8
0
 /// <summary>
 /// TODO: Make this pay attention to the case-sensitivity settings
 /// </summary>
 internal static Parser <ImmutableList <ParserChar> > CaseString(string str, GeneralLanguageDef languageDef)
 {
     return(Prim.String(str));
 }