📄 parser.cs
字号:
TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
compilationUnit.AddChild(newType);
compilationUnit.BlockStart(newType);
newType.StartLocation = m.GetDeclarationLocation(t.Location);
newType.Type = ClassType.Module;
Identifier();
#line 440 "VBNET.ATG"
newType.Name = t.val;
Expect(1);
#line 442 "VBNET.ATG"
newType.BodyStartLocation = t.Location;
ModuleBody(
#line 443 "VBNET.ATG"
newType);
#line 445 "VBNET.ATG"
compilationUnit.BlockEnd();
break;
}
case 166: {
lexer.NextToken();
#line 449 "VBNET.ATG"
m.Check(Modifiers.VBStructures);
TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
compilationUnit.AddChild(newType);
compilationUnit.BlockStart(newType);
newType.StartLocation = m.GetDeclarationLocation(t.Location);
newType.Type = ClassType.Struct;
Identifier();
#line 456 "VBNET.ATG"
newType.Name = t.val;
TypeParameterList(
#line 457 "VBNET.ATG"
newType.Templates);
Expect(1);
#line 459 "VBNET.ATG"
newType.BodyStartLocation = t.Location;
while (la.kind == 107) {
TypeImplementsClause(
#line 460 "VBNET.ATG"
out baseInterfaces);
#line 460 "VBNET.ATG"
newType.BaseTypes.AddRange(baseInterfaces);
}
StructureBody(
#line 461 "VBNET.ATG"
newType);
#line 463 "VBNET.ATG"
compilationUnit.BlockEnd();
break;
}
case 90: {
lexer.NextToken();
#line 468 "VBNET.ATG"
m.Check(Modifiers.VBEnums);
TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
newType.StartLocation = m.GetDeclarationLocation(t.Location);
compilationUnit.AddChild(newType);
compilationUnit.BlockStart(newType);
newType.Type = ClassType.Enum;
Identifier();
#line 476 "VBNET.ATG"
newType.Name = t.val;
if (la.kind == 48) {
lexer.NextToken();
NonArrayTypeName(
#line 477 "VBNET.ATG"
out typeRef, false);
#line 477 "VBNET.ATG"
newType.BaseTypes.Add(typeRef);
}
Expect(1);
#line 479 "VBNET.ATG"
newType.BodyStartLocation = t.Location;
EnumBody(
#line 480 "VBNET.ATG"
newType);
#line 482 "VBNET.ATG"
compilationUnit.BlockEnd();
break;
}
case 112: {
lexer.NextToken();
#line 487 "VBNET.ATG"
m.Check(Modifiers.VBInterfacs);
TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
newType.StartLocation = m.GetDeclarationLocation(t.Location);
compilationUnit.AddChild(newType);
compilationUnit.BlockStart(newType);
newType.Type = ClassType.Interface;
Identifier();
#line 494 "VBNET.ATG"
newType.Name = t.val;
TypeParameterList(
#line 495 "VBNET.ATG"
newType.Templates);
EndOfStmt();
#line 497 "VBNET.ATG"
newType.BodyStartLocation = t.Location;
while (la.kind == 110) {
InterfaceBase(
#line 498 "VBNET.ATG"
out baseInterfaces);
#line 498 "VBNET.ATG"
newType.BaseTypes.AddRange(baseInterfaces);
}
InterfaceBody(
#line 499 "VBNET.ATG"
newType);
#line 501 "VBNET.ATG"
compilationUnit.BlockEnd();
break;
}
case 80: {
lexer.NextToken();
#line 506 "VBNET.ATG"
m.Check(Modifiers.VBDelegates);
DelegateDeclaration delegateDeclr = new DelegateDeclaration(m.Modifier, attributes);
delegateDeclr.ReturnType = new TypeReference("", "System.Void");
delegateDeclr.StartLocation = m.GetDeclarationLocation(t.Location);
List<ParameterDeclarationExpression> p = new List<ParameterDeclarationExpression>();
if (la.kind == 167) {
lexer.NextToken();
Identifier();
#line 513 "VBNET.ATG"
delegateDeclr.Name = t.val;
TypeParameterList(
#line 514 "VBNET.ATG"
delegateDeclr.Templates);
if (la.kind == 24) {
lexer.NextToken();
if (StartOf(4)) {
FormalParameterList(
#line 515 "VBNET.ATG"
p);
}
Expect(25);
#line 515 "VBNET.ATG"
delegateDeclr.Parameters = p;
}
} else if (la.kind == 100) {
lexer.NextToken();
Identifier();
#line 517 "VBNET.ATG"
delegateDeclr.Name = t.val;
TypeParameterList(
#line 518 "VBNET.ATG"
delegateDeclr.Templates);
if (la.kind == 24) {
lexer.NextToken();
if (StartOf(4)) {
FormalParameterList(
#line 519 "VBNET.ATG"
p);
}
Expect(25);
#line 519 "VBNET.ATG"
delegateDeclr.Parameters = p;
}
if (la.kind == 48) {
lexer.NextToken();
#line 520 "VBNET.ATG"
TypeReference type;
TypeName(
#line 520 "VBNET.ATG"
out type);
#line 520 "VBNET.ATG"
delegateDeclr.ReturnType = type;
}
} else SynErr(214);
#line 522 "VBNET.ATG"
delegateDeclr.EndLocation = t.EndLocation;
Expect(1);
#line 525 "VBNET.ATG"
compilationUnit.AddChild(delegateDeclr);
break;
}
default: SynErr(215); break;
}
}
void TypeParameterList(
#line 349 "VBNET.ATG"
List<TemplateDefinition> templates) {
#line 351 "VBNET.ATG"
TemplateDefinition template;
if (
#line 354 "VBNET.ATG"
la.kind == Tokens.OpenParenthesis && Peek(1).kind == Tokens.Of) {
lexer.NextToken();
Expect(200);
TypeParameter(
#line 355 "VBNET.ATG"
out template);
#line 357 "VBNET.ATG"
if (template != null) templates.Add(template);
while (la.kind == 12) {
lexer.NextToken();
TypeParameter(
#line 360 "VBNET.ATG"
out template);
#line 362 "VBNET.ATG"
if (template != null) templates.Add(template);
}
Expect(25);
}
}
void TypeParameter(
#line 370 "VBNET.ATG"
out TemplateDefinition template) {
Identifier();
#line 372 "VBNET.ATG"
template = new TemplateDefinition(t.val, null);
if (la.kind == 48) {
TypeParameterConstraints(
#line 373 "VBNET.ATG"
template);
}
}
void Identifier() {
switch (la.kind) {
case 2: {
lexer.NextToken();
break;
}
case 169: {
lexer.NextToken();
break;
}
case 51: {
lexer.NextToken();
break;
}
case 70: {
lexer.NextToken();
break;
}
case 204: {
lexer.NextToken();
break;
}
case 49: {
lexer.NextToken();
break;
}
case 47: {
lexer.NextToken();
break;
}
case 50: {
lexer.NextToken();
break;
}
case 144: {
lexer.NextToken();
break;
}
case 176: {
lexer.NextToken();
break;
}
case 177: {
lexer.NextToken();
break;
}
case 134: {
lexer.NextToken();
break;
}
case 95: {
lexer.NextToken();
break;
}
default: SynErr(216); break;
}
}
void TypeParameterConstraints(
#line 377 "VBNET.ATG"
TemplateDefinition template) {
#line 379 "VBNET.ATG"
TypeReference constraint;
Expect(48);
if (la.kind == 22) {
lexer.NextToken();
TypeParameterConstraint(
#line 385 "VBNET.ATG"
out constraint);
#line 385 "VBNET.ATG"
if (constraint != null) { template.Bases.Add(constraint); }
while (la.kind == 12) {
lexer.NextToken();
TypeParameterConstraint(
#line 388 "VBNET.ATG"
out constraint);
#line 388 "VBNET.ATG"
if (constraint != null) { template.Bases.Add(constraint); }
}
Expect(23);
} else if (StartOf(5)) {
TypeParameterConstraint(
#line 391 "VBNET.ATG"
out constraint);
#line 391 "VBNET.ATG"
if (constraint != null) { template.Bases.Add(constraint); }
} else SynErr(217);
}
void TypeParameterConstraint(
#line 395 "VBNET.ATG"
out TypeReference constraint) {
#line 396 "VBNET.ATG"
constraint = null;
if (la.kind == 67) {
lexer.NextToken();
#line 397 "VBNET.ATG"
constraint = TypeReference.ClassConstraint;
} else if (la.kind == 166) {
lexer.NextToken();
#line 398 "VBNET.ATG"
constraint = TypeReference.StructConstraint;
} else if (la.kind == 127) {
lexer.NextToken();
#line 399 "VBNET.ATG"
constraint = TypeReference.NewConstraint;
} else if (StartOf(6)) {
TypeName(
#line 400 "VBNET.ATG"
out constraint);
} else SynErr(218);
}
void ClassBaseType(
#line 716 "VBNET.ATG"
out TypeReference typeRef) {
#line 718 "VBNET.ATG"
typeRef = null;
Expect(110);
TypeName(
#line 721 "VBNET.ATG"
out typeRef);
EndOfStmt();
}
void TypeImplementsClause(
#line 1492 "VBNET.ATG"
out List<TypeReference> baseInterfaces) {
#line 1494 "VBNET.ATG"
baseInterfaces = new List<TypeReference>();
TypeReference type = null;
Expect(107);
TypeName(
#line 1497 "VBNET.ATG"
out type);
#line 1499 "VBNET.ATG"
baseInterfaces.Add(type);
while (la.kind == 12) {
lexer.NextToken();
TypeName(
#line 1502 "VBNET.ATG"
out type);
#line 1503 "VBNET.ATG"
baseInterfaces.Add(type);
}
EndOfStmt();
}
void ClassBody(
#line 535 "VBNET.ATG"
TypeDeclaration newType) {
#line 536 "VBNET.ATG"
AttributeSection section;
while (StartOf(7)) {
#line 538 "VBNET.ATG"
List<AttributeSection> attributes = new List<AttributeSection>();
ModifierList m = new ModifierList();
while (la.kind == 27) {
AttributeSection(
#line 541 "VBNET.ATG"
out section);
#line 541 "VBNET.ATG"
attributes.Add(section);
}
while (StartOf(8)) {
MemberModifier(
#line 542 "VBNET.ATG"
m);
}
ClassMemberDecl(
#line 543 "VBNET.ATG"
m, attributes);
}
}
void ModuleBody(
#line 562 "VBNET.ATG"
TypeDeclaration newType) {
#line 563 "VBNET.ATG"
AttributeSection section;
while (StartOf(7)) {
#line 565 "VBNET.ATG"
List<AttributeSection> attributes = new List<AttributeSection>();
ModifierList m = new ModifierList();
while (la.kind == 27) {
AttributeSection(
#line 568 "VBNET.ATG"
out section);
#line 568 "VBNET.ATG"
attributes.Add(section);
}
while (StartOf(8)) {
MemberModifier(
#line 569 "VBNET.ATG"
m);
}
ClassMemberDecl(
#line 570 "VBNET.ATG"
m, attributes);
}
Expect(88);
Expect(121);
#line 572 "VBNET.ATG"
newType.EndLocation = t.EndLocation;
Expect(1);
}
void StructureBody(
#line 547 "VBNET.ATG"
TypeDeclaration newType) {
#line 548 "VBNET.ATG"
AttributeSection section;
while (StartOf(7)) {
#line 550 "VBNET.ATG"
List<AttributeSection> attributes = new List<AttributeSection>();
ModifierList m = new ModifierList();
while (la.kind == 27) {
AttributeSection(
#line 553 "VBNET.ATG"
out section);
#line 553 "VBNET.ATG"
attributes.Add(section);
}
while (StartOf(8)) {
MemberModifier(
#line 554 "VBNET.ATG"
m);
}
StructureMemberDecl(
#line 555 "VBNET.ATG"
m, attributes);
}
Expect(88);
Expect(166);
#line 557 "VBNET.ATG"
newType.EndLocation = t.EndLocation;
Expect(1);
}
void NonArrayTypeName(
#line 1941 "VBNET.ATG"
out TypeReference typeref, bool canBeUnbound) {
#line 1943 "VBNET.ATG"
string name;
typeref = null;
bool isGlobal = false;
if (StartOf(9)) {
if (la.kind == 198) {
lexer.NextToken();
Expect(10);
#line 1948 "VBNET.ATG"
isGlobal = true;
}
QualIdentAndTypeArguments(
#line 1949 "VBNET.ATG"
out typeref, canBeUnbound);
#line 1950 "VBNET.ATG"
typeref.IsGlobal = isGlobal;
while (la.kind == 10) {
lexer.NextToken();
#line 1951 "VBNET.ATG"
TypeReference nestedTypeRef;
QualIdentAndTypeArguments(
#line 1952 "VBNET.ATG"
out nestedTypeRef, canBeUnbound);
#line 1953 "VBNET.ATG"
typeref = new InnerClassTypeReference(typeref, nestedTypeRef.Type, nestedTypeRef.GenericTypes);
}
} else if (la.kind == 133) {
lexer.NextToken();
#line 1956 "VBNET.ATG"
typeref = new TypeReference("System.Object");
} else if (StartOf(10)) {
PrimitiveTypeName(
#line 1957 "VBNET.ATG"
out name);
#line 1957 "VBNET.ATG"
typeref = new TypeReference(name);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -