📄 parser.cs
字号:
#line 326 "cs.ATG"
m.Check(Modifiers.Classes);
lexer.NextToken();
#line 327 "cs.ATG"
TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
templates = newType.Templates;
compilationUnit.AddChild(newType);
compilationUnit.BlockStart(newType);
newType.StartLocation = m.GetDeclarationLocation(t.Location);
newType.Type = Types.Class;
Expect(1);
#line 335 "cs.ATG"
newType.Name = t.val;
if (la.kind == 23) {
TypeParameterList(
#line 338 "cs.ATG"
templates);
}
if (la.kind == 9) {
ClassBase(
#line 340 "cs.ATG"
out names);
#line 340 "cs.ATG"
newType.BaseTypes = names;
}
while (
#line 343 "cs.ATG"
IdentIsWhere()) {
TypeParameterConstraintsClause(
#line 343 "cs.ATG"
templates);
}
#line 345 "cs.ATG"
newType.BodyStartLocation = t.EndLocation;
Expect(16);
ClassBody();
Expect(17);
if (la.kind == 11) {
lexer.NextToken();
}
#line 347 "cs.ATG"
newType.EndLocation = t.Location;
compilationUnit.BlockEnd();
} else if (StartOf(8)) {
#line 350 "cs.ATG"
m.Check(Modifiers.StructsInterfacesEnumsDelegates);
if (la.kind == 108) {
lexer.NextToken();
#line 351 "cs.ATG"
TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
templates = newType.Templates;
newType.StartLocation = m.GetDeclarationLocation(t.Location);
compilationUnit.AddChild(newType);
compilationUnit.BlockStart(newType);
newType.Type = Types.Struct;
Expect(1);
#line 358 "cs.ATG"
newType.Name = t.val;
if (la.kind == 23) {
TypeParameterList(
#line 361 "cs.ATG"
templates);
}
if (la.kind == 9) {
StructInterfaces(
#line 363 "cs.ATG"
out names);
#line 363 "cs.ATG"
newType.BaseTypes = names;
}
while (
#line 366 "cs.ATG"
IdentIsWhere()) {
TypeParameterConstraintsClause(
#line 366 "cs.ATG"
templates);
}
#line 369 "cs.ATG"
newType.BodyStartLocation = t.EndLocation;
StructBody();
if (la.kind == 11) {
lexer.NextToken();
}
#line 371 "cs.ATG"
newType.EndLocation = t.Location;
compilationUnit.BlockEnd();
} else if (la.kind == 82) {
lexer.NextToken();
#line 375 "cs.ATG"
TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
templates = newType.Templates;
compilationUnit.AddChild(newType);
compilationUnit.BlockStart(newType);
newType.StartLocation = m.GetDeclarationLocation(t.Location);
newType.Type = Types.Interface;
Expect(1);
#line 382 "cs.ATG"
newType.Name = t.val;
if (la.kind == 23) {
TypeParameterList(
#line 385 "cs.ATG"
templates);
}
if (la.kind == 9) {
InterfaceBase(
#line 387 "cs.ATG"
out names);
#line 387 "cs.ATG"
newType.BaseTypes = names;
}
while (
#line 390 "cs.ATG"
IdentIsWhere()) {
TypeParameterConstraintsClause(
#line 390 "cs.ATG"
templates);
}
#line 392 "cs.ATG"
newType.BodyStartLocation = t.EndLocation;
InterfaceBody();
if (la.kind == 11) {
lexer.NextToken();
}
#line 394 "cs.ATG"
newType.EndLocation = t.Location;
compilationUnit.BlockEnd();
} else if (la.kind == 67) {
lexer.NextToken();
#line 398 "cs.ATG"
TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
compilationUnit.AddChild(newType);
compilationUnit.BlockStart(newType);
newType.StartLocation = m.GetDeclarationLocation(t.Location);
newType.Type = Types.Enum;
Expect(1);
#line 404 "cs.ATG"
newType.Name = t.val;
if (la.kind == 9) {
lexer.NextToken();
IntegralType(
#line 405 "cs.ATG"
out name);
#line 405 "cs.ATG"
newType.BaseTypes.Add(new TypeReference(name));
}
#line 407 "cs.ATG"
newType.BodyStartLocation = t.EndLocation;
EnumBody();
if (la.kind == 11) {
lexer.NextToken();
}
#line 409 "cs.ATG"
newType.EndLocation = t.Location;
compilationUnit.BlockEnd();
} else {
lexer.NextToken();
#line 413 "cs.ATG"
DelegateDeclaration delegateDeclr = new DelegateDeclaration(m.Modifier, attributes);
templates = delegateDeclr.Templates;
delegateDeclr.StartLocation = m.GetDeclarationLocation(t.Location);
if (
#line 417 "cs.ATG"
NotVoidPointer()) {
Expect(122);
#line 417 "cs.ATG"
delegateDeclr.ReturnType = new TypeReference("void", 0, null);
} else if (StartOf(9)) {
Type(
#line 418 "cs.ATG"
out type);
#line 418 "cs.ATG"
delegateDeclr.ReturnType = type;
} else SynErr(131);
Expect(1);
#line 420 "cs.ATG"
delegateDeclr.Name = t.val;
if (la.kind == 23) {
TypeParameterList(
#line 423 "cs.ATG"
templates);
}
Expect(20);
if (StartOf(10)) {
FormalParameterList(
#line 425 "cs.ATG"
p);
#line 425 "cs.ATG"
delegateDeclr.Parameters = p;
}
Expect(21);
while (
#line 429 "cs.ATG"
IdentIsWhere()) {
TypeParameterConstraintsClause(
#line 429 "cs.ATG"
templates);
}
Expect(11);
#line 431 "cs.ATG"
delegateDeclr.EndLocation = t.Location;
compilationUnit.AddChild(delegateDeclr);
}
} else SynErr(132);
}
void TypeParameterList(
#line 2026 "cs.ATG"
List<TemplateDefinition> templates) {
#line 2028 "cs.ATG"
AttributeSection section;
List<AttributeSection> attributes = new List<AttributeSection>();
Expect(23);
while (la.kind == 18) {
AttributeSection(
#line 2032 "cs.ATG"
out section);
#line 2032 "cs.ATG"
attributes.Add(section);
}
Expect(1);
#line 2033 "cs.ATG"
templates.Add(new TemplateDefinition(t.val, attributes));
while (la.kind == 14) {
lexer.NextToken();
while (la.kind == 18) {
AttributeSection(
#line 2034 "cs.ATG"
out section);
#line 2034 "cs.ATG"
attributes.Add(section);
}
Expect(1);
#line 2035 "cs.ATG"
templates.Add(new TemplateDefinition(t.val, attributes));
}
Expect(22);
}
void ClassBase(
#line 446 "cs.ATG"
out List<TypeReference> names) {
#line 448 "cs.ATG"
TypeReference typeRef;
names = new List<TypeReference>();
Expect(9);
ClassType(
#line 452 "cs.ATG"
out typeRef, false);
#line 452 "cs.ATG"
if (typeRef != null) { names.Add(typeRef); }
while (la.kind == 14) {
lexer.NextToken();
TypeName(
#line 453 "cs.ATG"
out typeRef, false);
#line 453 "cs.ATG"
if (typeRef != null) { names.Add(typeRef); }
}
}
void TypeParameterConstraintsClause(
#line 2039 "cs.ATG"
List<TemplateDefinition> templates) {
#line 2040 "cs.ATG"
string name = ""; TypeReference type;
Expect(1);
#line 2042 "cs.ATG"
if (t.val != "where") Error("where expected");
Expect(1);
#line 2043 "cs.ATG"
name = t.val;
Expect(9);
TypeParameterConstraintsClauseBase(
#line 2045 "cs.ATG"
out type);
#line 2046 "cs.ATG"
TemplateDefinition td = null;
foreach (TemplateDefinition d in templates) {
if (d.Name == name) {
td = d;
break;
}
}
if ( td != null && type != null) { td.Bases.Add(type); }
while (la.kind == 14) {
lexer.NextToken();
TypeParameterConstraintsClauseBase(
#line 2055 "cs.ATG"
out type);
#line 2056 "cs.ATG"
td = null;
foreach (TemplateDefinition d in templates) {
if (d.Name == name) {
td = d;
break;
}
}
if ( td != null && type != null) { td.Bases.Add(type); }
}
}
void ClassBody() {
#line 457 "cs.ATG"
AttributeSection section;
while (StartOf(11)) {
#line 459 "cs.ATG"
List<AttributeSection> attributes = new List<AttributeSection>();
ModifierList m = new ModifierList();
while (la.kind == 18) {
AttributeSection(
#line 462 "cs.ATG"
out section);
#line 462 "cs.ATG"
attributes.Add(section);
}
MemberModifiers(
#line 463 "cs.ATG"
m);
ClassMemberDecl(
#line 464 "cs.ATG"
m, attributes);
}
}
void StructInterfaces(
#line 468 "cs.ATG"
out List<TypeReference> names) {
#line 470 "cs.ATG"
TypeReference typeRef;
names = new List<TypeReference>();
Expect(9);
TypeName(
#line 474 "cs.ATG"
out typeRef, false);
#line 474 "cs.ATG"
if (typeRef != null) { names.Add(typeRef); }
while (la.kind == 14) {
lexer.NextToken();
TypeName(
#line 475 "cs.ATG"
out typeRef, false);
#line 475 "cs.ATG"
if (typeRef != null) { names.Add(typeRef); }
}
}
void StructBody() {
#line 479 "cs.ATG"
AttributeSection section;
Expect(16);
while (StartOf(12)) {
#line 482 "cs.ATG"
List<AttributeSection> attributes = new List<AttributeSection>();
ModifierList m = new ModifierList();
while (la.kind == 18) {
AttributeSection(
#line 485 "cs.ATG"
out section);
#line 485 "cs.ATG"
attributes.Add(section);
}
MemberModifiers(
#line 486 "cs.ATG"
m);
StructMemberDecl(
#line 487 "cs.ATG"
m, attributes);
}
Expect(17);
}
void InterfaceBase(
#line 492 "cs.ATG"
out List<TypeReference> names) {
#line 494 "cs.ATG"
TypeReference typeRef;
names = new List<TypeReference>();
Expect(9);
TypeName(
#line 498 "cs.ATG"
out typeRef, false);
#line 498 "cs.ATG"
if (typeRef != null) { names.Add(typeRef); }
while (la.kind == 14) {
lexer.NextToken();
TypeName(
#line 499 "cs.ATG"
out typeRef, false);
#line 499 "cs.ATG"
if (typeRef != null) { names.Add(typeRef); }
}
}
void InterfaceBody() {
Expect(16);
while (StartOf(13)) {
InterfaceMemberDecl();
}
Expect(17);
}
void IntegralType(
#line 659 "cs.ATG"
out string name) {
#line 659 "cs.ATG"
name = "";
switch (la.kind) {
case 101: {
lexer.NextToken();
#line 661 "cs.ATG"
name = "sbyte";
break;
}
case 53: {
lexer.NextToken();
#line 662 "cs.ATG"
name = "byte";
break;
}
case 103: {
lexer.NextToken();
#line 663 "cs.ATG"
name = "short";
break;
}
case 119: {
lexer.NextToken();
#line 664 "cs.ATG"
name = "ushort";
break;
}
case 81: {
lexer.NextToken();
#line 665 "cs.ATG"
name = "int";
break;
}
case 115: {
lexer.NextToken();
#line 666 "cs.ATG"
name = "uint";
break;
}
case 86: {
lexer.NextToken();
#line 667 "cs.ATG"
name = "long";
break;
}
case 116: {
lexer.NextToken();
#line 668 "cs.ATG"
name = "ulong";
break;
}
case 56: {
lexer.NextToken();
#line 669 "cs.ATG"
name = "char";
break;
}
default: SynErr(133); break;
}
}
void EnumBody() {
#line 508 "cs.ATG"
FieldDeclaration f;
Expect(16);
if (la.kind == 1 || la.kind == 18) {
EnumMemberDecl(
#line 511 "cs.ATG"
out f);
#line 511 "cs.ATG"
compilationUnit.AddChild(f);
while (
#line 512 "cs.ATG"
NotFinalComma()) {
Expect(14);
EnumMemberDecl(
#line 513 "cs.ATG"
out f);
#line 513 "cs.ATG"
compilationUnit.AddChild(f);
}
if (la.kind == 14) {
lexer.NextToken();
}
}
Expect(17);
}
void Type(
#line 518 "cs.ATG"
out TypeReference type) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -