📄 parser.cs
字号:
while (la.kind == 14) {
lexer.NextToken();
#line 539 "cs.ATG"
++i;
}
Expect(19);
#line 539 "cs.ATG"
r.Add(i);
} else SynErr(156);
}
#line 542 "cs.ATG"
if (type != null) {
type.RankSpecifier = r.ToArray();
type.PointerNestingLevel = pointer;
}
}
void SimpleType(
#line 570 "cs.ATG"
out string name) {
#line 571 "cs.ATG"
name = String.Empty;
if (StartOf(19)) {
IntegralType(
#line 573 "cs.ATG"
out name);
} else if (la.kind == 74) {
lexer.NextToken();
#line 574 "cs.ATG"
name = "float";
} else if (la.kind == 65) {
lexer.NextToken();
#line 575 "cs.ATG"
name = "double";
} else if (la.kind == 61) {
lexer.NextToken();
#line 576 "cs.ATG"
name = "decimal";
} else if (la.kind == 51) {
lexer.NextToken();
#line 577 "cs.ATG"
name = "bool";
} else SynErr(157);
}
void NullableQuestionMark(
#line 2000 "cs.ATG"
ref TypeReference typeRef) {
#line 2001 "cs.ATG"
List<TypeReference> typeArguments = new List<TypeReference>(1);
Expect(12);
#line 2005 "cs.ATG"
if (typeRef != null) typeArguments.Add(typeRef);
typeRef = new TypeReference("System.Nullable", typeArguments);
}
void FixedParameter(
#line 607 "cs.ATG"
out ParameterDeclarationExpression p) {
#line 609 "cs.ATG"
TypeReference type;
ParameterModifiers mod = ParameterModifiers.In;
Location start = t.Location;
if (la.kind == 92 || la.kind == 99) {
if (la.kind == 99) {
lexer.NextToken();
#line 615 "cs.ATG"
mod = ParameterModifiers.Ref;
} else {
lexer.NextToken();
#line 616 "cs.ATG"
mod = ParameterModifiers.Out;
}
}
Type(
#line 618 "cs.ATG"
out type);
Expect(1);
#line 618 "cs.ATG"
p = new ParameterDeclarationExpression(type, t.val, mod); p.StartLocation = start; p.EndLocation = t.Location;
}
void ParameterArray(
#line 621 "cs.ATG"
out ParameterDeclarationExpression p) {
#line 622 "cs.ATG"
TypeReference type;
Expect(94);
Type(
#line 624 "cs.ATG"
out type);
Expect(1);
#line 624 "cs.ATG"
p = new ParameterDeclarationExpression(type, t.val, ParameterModifiers.Params);
}
void AccessorModifiers(
#line 627 "cs.ATG"
out ModifierList m) {
#line 628 "cs.ATG"
m = new ModifierList();
if (la.kind == 95) {
lexer.NextToken();
#line 630 "cs.ATG"
m.Add(Modifiers.Private, t.Location);
} else if (la.kind == 96) {
lexer.NextToken();
#line 631 "cs.ATG"
m.Add(Modifiers.Protected, t.Location);
if (la.kind == 83) {
lexer.NextToken();
#line 632 "cs.ATG"
m.Add(Modifiers.Internal, t.Location);
}
} else if (la.kind == 83) {
lexer.NextToken();
#line 633 "cs.ATG"
m.Add(Modifiers.Internal, t.Location);
if (la.kind == 96) {
lexer.NextToken();
#line 634 "cs.ATG"
m.Add(Modifiers.Protected, t.Location);
}
} else SynErr(158);
}
void Block(
#line 1201 "cs.ATG"
out Statement stmt) {
Expect(16);
#line 1203 "cs.ATG"
BlockStatement blockStmt = new BlockStatement();
blockStmt.StartLocation = t.Location;
compilationUnit.BlockStart(blockStmt);
if (!ParseMethodBodies) lexer.SkipCurrentBlock(0);
while (StartOf(20)) {
Statement();
}
Expect(17);
#line 1210 "cs.ATG"
stmt = blockStmt;
blockStmt.EndLocation = t.EndLocation;
compilationUnit.BlockEnd();
}
void EventAccessorDecls(
#line 1136 "cs.ATG"
out EventAddRegion addBlock, out EventRemoveRegion removeBlock) {
#line 1137 "cs.ATG"
AttributeSection section;
List<AttributeSection> attributes = new List<AttributeSection>();
Statement stmt;
addBlock = null;
removeBlock = null;
while (la.kind == 18) {
AttributeSection(
#line 1144 "cs.ATG"
out section);
#line 1144 "cs.ATG"
attributes.Add(section);
}
if (
#line 1146 "cs.ATG"
IdentIsAdd()) {
#line 1146 "cs.ATG"
addBlock = new EventAddRegion(attributes);
AddAccessorDecl(
#line 1147 "cs.ATG"
out stmt);
#line 1147 "cs.ATG"
attributes = new List<AttributeSection>(); addBlock.Block = (BlockStatement)stmt;
while (la.kind == 18) {
AttributeSection(
#line 1148 "cs.ATG"
out section);
#line 1148 "cs.ATG"
attributes.Add(section);
}
RemoveAccessorDecl(
#line 1149 "cs.ATG"
out stmt);
#line 1149 "cs.ATG"
removeBlock = new EventRemoveRegion(attributes); removeBlock.Block = (BlockStatement)stmt;
} else if (
#line 1150 "cs.ATG"
IdentIsRemove()) {
RemoveAccessorDecl(
#line 1151 "cs.ATG"
out stmt);
#line 1151 "cs.ATG"
removeBlock = new EventRemoveRegion(attributes); removeBlock.Block = (BlockStatement)stmt; attributes = new List<AttributeSection>();
while (la.kind == 18) {
AttributeSection(
#line 1152 "cs.ATG"
out section);
#line 1152 "cs.ATG"
attributes.Add(section);
}
AddAccessorDecl(
#line 1153 "cs.ATG"
out stmt);
#line 1153 "cs.ATG"
addBlock = new EventAddRegion(attributes); addBlock.Block = (BlockStatement)stmt;
} else if (la.kind == 1) {
lexer.NextToken();
#line 1154 "cs.ATG"
Error("add or remove accessor declaration expected");
} else SynErr(159);
}
void ConstructorInitializer(
#line 1232 "cs.ATG"
out ConstructorInitializer ci) {
#line 1233 "cs.ATG"
Expression expr; ci = new ConstructorInitializer();
Expect(9);
if (la.kind == 50) {
lexer.NextToken();
#line 1237 "cs.ATG"
ci.ConstructorInitializerType = ConstructorInitializerType.Base;
} else if (la.kind == 110) {
lexer.NextToken();
#line 1238 "cs.ATG"
ci.ConstructorInitializerType = ConstructorInitializerType.This;
} else SynErr(160);
Expect(20);
if (StartOf(21)) {
Argument(
#line 1241 "cs.ATG"
out expr);
#line 1241 "cs.ATG"
if (expr != null) { ci.Arguments.Add(expr); }
while (la.kind == 14) {
lexer.NextToken();
Argument(
#line 1241 "cs.ATG"
out expr);
#line 1241 "cs.ATG"
if (expr != null) { ci.Arguments.Add(expr); }
}
}
Expect(21);
}
void OverloadableOperator(
#line 1253 "cs.ATG"
out OverloadableOperatorType op) {
#line 1254 "cs.ATG"
op = OverloadableOperatorType.None;
switch (la.kind) {
case 4: {
lexer.NextToken();
#line 1256 "cs.ATG"
op = OverloadableOperatorType.Add;
break;
}
case 5: {
lexer.NextToken();
#line 1257 "cs.ATG"
op = OverloadableOperatorType.Subtract;
break;
}
case 24: {
lexer.NextToken();
#line 1259 "cs.ATG"
op = OverloadableOperatorType.Not;
break;
}
case 27: {
lexer.NextToken();
#line 1260 "cs.ATG"
op = OverloadableOperatorType.BitNot;
break;
}
case 31: {
lexer.NextToken();
#line 1262 "cs.ATG"
op = OverloadableOperatorType.Increment;
break;
}
case 32: {
lexer.NextToken();
#line 1263 "cs.ATG"
op = OverloadableOperatorType.Decrement;
break;
}
case 112: {
lexer.NextToken();
#line 1265 "cs.ATG"
op = OverloadableOperatorType.IsTrue;
break;
}
case 71: {
lexer.NextToken();
#line 1266 "cs.ATG"
op = OverloadableOperatorType.IsFalse;
break;
}
case 6: {
lexer.NextToken();
#line 1268 "cs.ATG"
op = OverloadableOperatorType.Multiply;
break;
}
case 7: {
lexer.NextToken();
#line 1269 "cs.ATG"
op = OverloadableOperatorType.Divide;
break;
}
case 8: {
lexer.NextToken();
#line 1270 "cs.ATG"
op = OverloadableOperatorType.Modulus;
break;
}
case 28: {
lexer.NextToken();
#line 1272 "cs.ATG"
op = OverloadableOperatorType.BitwiseAnd;
break;
}
case 29: {
lexer.NextToken();
#line 1273 "cs.ATG"
op = OverloadableOperatorType.BitwiseOr;
break;
}
case 30: {
lexer.NextToken();
#line 1274 "cs.ATG"
op = OverloadableOperatorType.ExclusiveOr;
break;
}
case 37: {
lexer.NextToken();
#line 1276 "cs.ATG"
op = OverloadableOperatorType.ShiftLeft;
break;
}
case 33: {
lexer.NextToken();
#line 1277 "cs.ATG"
op = OverloadableOperatorType.Equality;
break;
}
case 34: {
lexer.NextToken();
#line 1278 "cs.ATG"
op = OverloadableOperatorType.InEquality;
break;
}
case 23: {
lexer.NextToken();
#line 1279 "cs.ATG"
op = OverloadableOperatorType.LessThan;
break;
}
case 35: {
lexer.NextToken();
#line 1280 "cs.ATG"
op = OverloadableOperatorType.GreaterThanOrEqual;
break;
}
case 36: {
lexer.NextToken();
#line 1281 "cs.ATG"
op = OverloadableOperatorType.LessThanOrEqual;
break;
}
case 22: {
lexer.NextToken();
#line 1282 "cs.ATG"
op = OverloadableOperatorType.GreaterThan;
if (la.kind == 22) {
lexer.NextToken();
#line 1282 "cs.ATG"
op = OverloadableOperatorType.ShiftRight;
}
break;
}
default: SynErr(161); break;
}
}
void VariableDeclarator(
#line 1194 "cs.ATG"
List<VariableDeclaration> fieldDeclaration) {
#line 1195 "cs.ATG"
Expression expr = null;
Expect(1);
#line 1197 "cs.ATG"
VariableDeclaration f = new VariableDeclaration(t.val);
if (la.kind == 3) {
lexer.NextToken();
VariableInitializer(
#line 1198 "cs.ATG"
out expr);
#line 1198 "cs.ATG"
f.Initializer = expr;
}
#line 1198 "cs.ATG"
fieldDeclaration.Add(f);
}
void AccessorDecls(
#line 1080 "cs.ATG"
out PropertyGetRegion getBlock, out PropertySetRegion setBlock) {
#line 1082 "cs.ATG"
List<AttributeSection> attributes = new List<AttributeSection>();
AttributeSection section;
getBlock = null;
setBlock = null;
ModifierList modifiers = null;
while (la.kind == 18) {
AttributeSection(
#line 1089 "cs.ATG"
out section);
#line 1089 "cs.ATG"
attributes.Add(section);
}
if (la.kind == 83 || la.kind == 95 || la.kind == 96) {
AccessorModifiers(
#line 1090 "cs.ATG"
out modifiers);
}
if (
#line 1092 "cs.ATG"
IdentIsGet()) {
GetAccessorDecl(
#line 1093 "cs.ATG"
out getBlock, attributes);
#line 1094 "cs.ATG"
if (modifiers != null) {getBlock.Modifier = modifiers.Modifier; }
if (StartOf(22)) {
#line 1095 "cs.ATG"
attributes = new List<AttributeSection>(); modifiers = null;
while (la.kind == 18) {
AttributeSection(
#line 1096 "cs.ATG"
out section);
#line 1096 "cs.ATG"
attributes.Add(section);
}
if (la.kind == 83 || la.kind == 95 || la.kind == 96) {
AccessorModifiers(
#line 1097 "cs.ATG"
out modifiers);
}
SetAccessorDecl(
#line 1098 "cs.ATG"
out setBlock, attributes);
#line 1099 "cs.ATG"
if (modifiers != null) {setBlock.Modifier = modifiers.Modifier; }
}
} else if (
#line 1101 "cs.ATG"
IdentIsSet()) {
SetAccessorDecl(
#line 1102 "cs.ATG"
out setBlock, attributes);
#line 1103 "cs.ATG"
if (modifiers != null) {setBlock.Modifier = modifiers.Modifier; }
if (StartOf(22)) {
#line 1104 "cs.ATG"
attributes = new List<AttributeSection>(); modifiers = null;
while (la.kind == 18) {
AttributeSection(
#line 1105 "cs.ATG"
out section);
#line 1105 "cs.ATG"
attributes.Add(section);
}
if (la.kind == 83 || la.kind == 95 || la.kind == 96) {
AccessorModifiers(
#line 1106 "cs.ATG"
out modifiers);
}
GetAccessorDecl(
#line 1107 "cs.ATG"
out getBlock, attributes);
#line 1108 "cs.ATG"
if (modifiers != null) {getBlock.Modifier = modifiers.Modifier; }
}
} else if (la.kind == 1) {
lexer.NextToken();
#line 1110 "cs.ATG"
Error("get or set accessor declaration expected");
} else SynErr(162);
}
void InterfaceAccessors(
#
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -