internal static CTFTypeSpecifier ParseTypeSpecifier(CTFScope scope, TokParser tp) { Token.EnumId id = tp.Token.Id; switch (id) { case Token.EnumId.VOID: case Token.EnumId.CHAR: case Token.EnumId.SHORT: case Token.EnumId.INT: case Token.EnumId.FLOAT: case Token.EnumId.DOUBLE: case Token.EnumId.SIGNED: case Token.EnumId.BOOL: case Token.EnumId.COMPLEX: case Token.EnumId.IMAGINARY: throw new CTFException(); // unsupported case Token.EnumId.LONG: case Token.EnumId.UNSIGNED: tp.Next(); return(Get(id)); case Token.EnumId.STRUCT: return(CTFStructSpecifier.Parse(scope, tp)); case Token.EnumId.VARIANT: return(CTFVaraintSpecifier.Parse(scope, tp)); case Token.EnumId.ENUM: return(CTFEnumSpecifier.Parse(scope, tp)); // ctf-type-specifier case Token.EnumId.FLOATING_POINT: case Token.EnumId.INTEGER: tp.Next(); tp.MustBe(Token.EnumId.LCURL); List <CTFAssignmentExpression> cael = CTFAssignmentExpression.ParseList(scope, tp); tp.MustBe(Token.EnumId.RCURL); return(new CTFATypeSpecifier(id, cael)); case Token.EnumId.STRING: tp.Next(); return(Get(Token.EnumId.STRING)); case Token.EnumId.IDEN: // must be a type in a scope CTFTypeSpecifier ct = CTFNTypeSpecifier.Get(scope, tp.Token.Buffer); if (ct == null) { return(null); } tp.Next(); return(ct); } return(null); }
public void MustBe(Token.EnumId id) { if (Token.Id != id) { throw new CTFException(); } Next(); }
public bool Match(Token.EnumId id) { if (Token.Id != id) { return(false); } Next(); return(true); }
public static CTFTypeSpecifier Get(Token.EnumId id) { CTFTypeSpecifier value; cache.TryGetValue(id, out value); if (value == null) { value = new CTFITypeSpecifier(id); cache.Add(id, value); } return(value); }
private CTFEnumSpecifier(Token.EnumId id, List <CTFTypeSpecifier> cds, List <CTFEnumElem> list) : base(id) { this.Cds = cds; this.List = list; }
public CTFITypeSpecifier(Token.EnumId id) { this.Id = id; }
public CTFATypeSpecifier(Token.EnumId id, List <CTFAssignmentExpression> cael) : base(id) { this.cael = cael; }
private CTFVaraintSpecifier(Token.EnumId id, CTFUnaryExpression cue, List <CTFStructOrVariantDeclaration> list) { this.Cue = cue; this.List = list; }