📄 parser.cs
字号:
#line 2918 "VBNET.ATG"
qualidentBuilder.Append(t.val);
while (
#line 2919 "VBNET.ATG"
DotAndIdentOrKw()) {
Expect(10);
IdentifierOrKeyword(
#line 2919 "VBNET.ATG"
out name);
#line 2919 "VBNET.ATG"
qualidentBuilder.Append('.'); qualidentBuilder.Append(name);
}
#line 2921 "VBNET.ATG"
qualident = qualidentBuilder.ToString();
}
void TypeName(
#line 2077 "VBNET.ATG"
out TypeReference typeref) {
#line 2078 "VBNET.ATG"
ArrayList rank = null;
NonArrayTypeName(
#line 2080 "VBNET.ATG"
out typeref, false);
ArrayTypeModifiers(
#line 2081 "VBNET.ATG"
out rank);
#line 2082 "VBNET.ATG"
if (rank != null && typeref != null) {
typeref.RankSpecifier = (int[])rank.ToArray(typeof(int));
}
}
void NamespaceBody() {
while (StartOf(1)) {
NamespaceMemberDecl();
}
Expect(88);
Expect(126);
Expect(1);
}
void AttributeSection(
#line 2253 "VBNET.ATG"
out AttributeSection section) {
#line 2255 "VBNET.ATG"
string attributeTarget = "";List<ASTAttribute> attributes = new List<ASTAttribute>();
ASTAttribute attribute;
Expect(27);
#line 2259 "VBNET.ATG"
Point startPos = t.Location;
if (
#line 2260 "VBNET.ATG"
IsLocalAttrTarget()) {
if (la.kind == 93) {
lexer.NextToken();
#line 2261 "VBNET.ATG"
attributeTarget = "event";
} else if (la.kind == 154) {
lexer.NextToken();
#line 2262 "VBNET.ATG"
attributeTarget = "return";
} else {
Identifier();
#line 2265 "VBNET.ATG"
string val = t.val.ToLower(System.Globalization.CultureInfo.InvariantCulture);
if (val != "field" || val != "method" ||
val != "module" || val != "param" ||
val != "property" || val != "type")
Error("attribute target specifier (event, return, field," +
"method, module, param, property, or type) expected");
attributeTarget = t.val;
}
Expect(13);
}
Attribute(
#line 2275 "VBNET.ATG"
out attribute);
#line 2275 "VBNET.ATG"
attributes.Add(attribute);
while (
#line 2276 "VBNET.ATG"
NotFinalComma()) {
Expect(12);
Attribute(
#line 2276 "VBNET.ATG"
out attribute);
#line 2276 "VBNET.ATG"
attributes.Add(attribute);
}
if (la.kind == 12) {
lexer.NextToken();
}
Expect(26);
#line 2280 "VBNET.ATG"
section = new AttributeSection(attributeTarget, attributes);
section.StartLocation = startPos;
section.EndLocation = t.EndLocation;
}
void TypeModifier(
#line 2973 "VBNET.ATG"
Modifiers m) {
switch (la.kind) {
case 148: {
lexer.NextToken();
#line 2974 "VBNET.ATG"
m.Add(Modifier.Public, t.Location);
break;
}
case 147: {
lexer.NextToken();
#line 2975 "VBNET.ATG"
m.Add(Modifier.Protected, t.Location);
break;
}
case 99: {
lexer.NextToken();
#line 2976 "VBNET.ATG"
m.Add(Modifier.Internal, t.Location);
break;
}
case 145: {
lexer.NextToken();
#line 2977 "VBNET.ATG"
m.Add(Modifier.Private, t.Location);
break;
}
case 158: {
lexer.NextToken();
#line 2978 "VBNET.ATG"
m.Add(Modifier.Static, t.Location);
break;
}
case 157: {
lexer.NextToken();
#line 2979 "VBNET.ATG"
m.Add(Modifier.New, t.Location);
break;
}
case 122: {
lexer.NextToken();
#line 2980 "VBNET.ATG"
m.Add(Modifier.Abstract, t.Location);
break;
}
case 131: {
lexer.NextToken();
#line 2981 "VBNET.ATG"
m.Add(Modifier.Sealed, t.Location);
break;
}
case 203: {
lexer.NextToken();
#line 2982 "VBNET.ATG"
m.Add(Modifier.Partial, t.Location);
break;
}
default: SynErr(213); break;
}
}
void NonModuleDeclaration(
#line 647 "VBNET.ATG"
Modifiers m, List<AttributeSection> attributes) {
#line 649 "VBNET.ATG"
TypeReference typeRef = null;
List<TypeReference> baseInterfaces = null;
switch (la.kind) {
case 67: {
#line 652 "VBNET.ATG"
m.Check(Modifier.Classes);
lexer.NextToken();
#line 655 "VBNET.ATG"
TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
newType.StartLocation = t.Location;
compilationUnit.AddChild(newType);
compilationUnit.BlockStart(newType);
newType.Type = ClassType.Class;
Identifier();
#line 662 "VBNET.ATG"
newType.Name = t.val;
TypeParameterList(
#line 663 "VBNET.ATG"
newType.Templates);
EndOfStmt();
#line 665 "VBNET.ATG"
newType.BodyStartLocation = t.Location;
if (la.kind == 110) {
ClassBaseType(
#line 666 "VBNET.ATG"
out typeRef);
#line 666 "VBNET.ATG"
newType.BaseTypes.Add(typeRef);
}
while (la.kind == 107) {
TypeImplementsClause(
#line 667 "VBNET.ATG"
out baseInterfaces);
#line 667 "VBNET.ATG"
newType.BaseTypes.AddRange(baseInterfaces);
}
ClassBody(
#line 668 "VBNET.ATG"
newType);
#line 670 "VBNET.ATG"
compilationUnit.BlockEnd();
break;
}
case 121: {
lexer.NextToken();
#line 674 "VBNET.ATG"
m.Check(Modifier.VBModules);
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 681 "VBNET.ATG"
newType.Name = t.val;
Expect(1);
#line 683 "VBNET.ATG"
newType.BodyStartLocation = t.Location;
ModuleBody(
#line 684 "VBNET.ATG"
newType);
#line 686 "VBNET.ATG"
compilationUnit.BlockEnd();
break;
}
case 166: {
lexer.NextToken();
#line 690 "VBNET.ATG"
m.Check(Modifier.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 697 "VBNET.ATG"
newType.Name = t.val;
TypeParameterList(
#line 698 "VBNET.ATG"
newType.Templates);
Expect(1);
#line 700 "VBNET.ATG"
newType.BodyStartLocation = t.Location;
while (la.kind == 107) {
TypeImplementsClause(
#line 701 "VBNET.ATG"
out baseInterfaces);
#line 701 "VBNET.ATG"
newType.BaseTypes.AddRange(baseInterfaces);
}
StructureBody(
#line 702 "VBNET.ATG"
newType);
#line 704 "VBNET.ATG"
compilationUnit.BlockEnd();
break;
}
case 90: {
lexer.NextToken();
#line 709 "VBNET.ATG"
m.Check(Modifier.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 717 "VBNET.ATG"
newType.Name = t.val;
if (la.kind == 48) {
lexer.NextToken();
NonArrayTypeName(
#line 718 "VBNET.ATG"
out typeRef, false);
#line 718 "VBNET.ATG"
newType.BaseTypes.Add(typeRef);
}
Expect(1);
#line 720 "VBNET.ATG"
newType.BodyStartLocation = t.Location;
EnumBody(
#line 721 "VBNET.ATG"
newType);
#line 723 "VBNET.ATG"
compilationUnit.BlockEnd();
break;
}
case 112: {
lexer.NextToken();
#line 728 "VBNET.ATG"
m.Check(Modifier.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 735 "VBNET.ATG"
newType.Name = t.val;
TypeParameterList(
#line 736 "VBNET.ATG"
newType.Templates);
EndOfStmt();
#line 738 "VBNET.ATG"
newType.BodyStartLocation = t.Location;
while (la.kind == 110) {
InterfaceBase(
#line 739 "VBNET.ATG"
out baseInterfaces);
#line 739 "VBNET.ATG"
newType.BaseTypes.AddRange(baseInterfaces);
}
InterfaceBody(
#line 740 "VBNET.ATG"
newType);
#line 742 "VBNET.ATG"
compilationUnit.BlockEnd();
break;
}
case 80: {
lexer.NextToken();
#line 747 "VBNET.ATG"
m.Check(Modifier.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 754 "VBNET.ATG"
delegateDeclr.Name = t.val;
TypeParameterList(
#line 755 "VBNET.ATG"
delegateDeclr.Templates);
if (la.kind == 24) {
lexer.NextToken();
if (StartOf(4)) {
FormalParameterList(
#line 756 "VBNET.ATG"
p);
}
Expect(25);
#line 756 "VBNET.ATG"
delegateDeclr.Parameters = p;
}
} else if (la.kind == 100) {
lexer.NextToken();
Identifier();
#line 758 "VBNET.ATG"
delegateDeclr.Name = t.val;
TypeParameterList(
#line 759 "VBNET.ATG"
delegateDeclr.Templates);
if (la.kind == 24) {
lexer.NextToken();
if (StartOf(4)) {
FormalParameterList(
#line 760 "VBNET.ATG"
p);
}
Expect(25);
#line 760 "VBNET.ATG"
delegateDeclr.Parameters = p;
}
if (la.kind == 48) {
lexer.NextToken();
#line 761 "VBNET.ATG"
TypeReference type;
TypeName(
#line 761 "VBNET.ATG"
out type);
#line 761 "VBNET.ATG"
delegateDeclr.ReturnType = type;
}
} else SynErr(214);
#line 763 "VBNET.ATG"
delegateDeclr.EndLocation = t.EndLocation;
Expect(1);
#line 766 "VBNET.ATG"
compilationUnit.AddChild(delegateDeclr);
break;
}
default: SynErr(215); break;
}
}
void TypeParameterList(
#line 600 "VBNET.ATG"
List<TemplateDefinition> templates) {
#line 602 "VBNET.ATG"
TemplateDefinition template;
if (
#line 605 "VBNET.ATG"
la.kind == Tokens.OpenParenthesis && Peek(1).kind == Tokens.Of) {
lexer.NextToken();
Expect(200);
TypeParameter(
#line 606 "VBNET.ATG"
out template);
#line 608 "VBNET.ATG"
if (template != null) templates.Add(template);
while (la.kind == 12) {
lexer.NextToken();
TypeParameter(
#line 611 "VBNET.ATG"
out template);
#line 613 "VBNET.ATG"
if (template != null) templates.Add(template);
}
Expect(25);
}
}
void TypeParameter(
#line 621 "VBNET.ATG"
out TemplateDefinition template) {
Identifier();
#line 623 "VBNET.ATG"
template = new TemplateDefinition(t.val, null);
if (la.kind == 48) {
TypeParameterConstraints(
#line 624 "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 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;
}
default: SynErr(216); break;
}
}
void TypeParameterConstraints(
#line 628 "VBNET.ATG"
TemplateDefinition template) {
#line 630 "VBNET.ATG"
TypeReference constraint;
Expect(48);
if (la.kind == 22) {
lexer.NextToken();
TypeName(
#line 636 "VBNET.ATG"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -