?? parser.cs
字號:
Type(
#line 1019 "cs.ATG"
out type);
#line 1019 "cs.ATG"
eventDecl.TypeReference = type;
if (
#line 1021 "cs.ATG"
IsVarDecl()) {
VariableDeclarator(
#line 1021 "cs.ATG"
variableDeclarators);
while (la.kind == 12) {
lexer.NextToken();
VariableDeclarator(
#line 1022 "cs.ATG"
variableDeclarators);
}
Expect(10);
#line 1022 "cs.ATG"
eventDecl.VariableDeclarators = variableDeclarators; eventDecl.EndLocation = t.EndLocation;
} else if (la.kind == 1) {
Qualident(
#line 1023 "cs.ATG"
out qualident);
#line 1023 "cs.ATG"
eventDecl.Name = qualident; eventDecl.EndLocation = t.EndLocation;
Expect(14);
#line 1024 "cs.ATG"
eventDecl.BodyStart = t.Location;
EventAccessorDecls(
#line 1025 "cs.ATG"
out addBlock, out removeBlock);
Expect(15);
#line 1026 "cs.ATG"
eventDecl.BodyEnd = t.EndLocation;
} else SynErr(142);
#line 1027 "cs.ATG"
compilationUnit.BlockEnd();
eventDecl.AddRegion = addBlock;
eventDecl.RemoveRegion = removeBlock;
} else if (
#line 1034 "cs.ATG"
IdentAndLPar()) {
#line 1034 "cs.ATG"
m.Check(Modifier.Constructors | Modifier.StaticConstructors);
Expect(1);
#line 1035 "cs.ATG"
string name = t.val; Point startPos = t.Location;
Expect(18);
if (StartOf(9)) {
#line 1035 "cs.ATG"
m.Check(Modifier.Constructors);
FormalParameterList(
#line 1036 "cs.ATG"
out p);
}
Expect(19);
#line 1038 "cs.ATG"
ConstructorInitializer init = null;
if (la.kind == 9) {
#line 1039 "cs.ATG"
m.Check(Modifier.Constructors);
ConstructorInitializer(
#line 1040 "cs.ATG"
out init);
}
#line 1042 "cs.ATG"
ConstructorDeclaration cd = new ConstructorDeclaration(name, m.Modifier, p, init, attributes);
cd.StartLocation = startPos;
cd.EndLocation = t.EndLocation;
if (la.kind == 14) {
Block(
#line 1047 "cs.ATG"
out stmt);
} else if (la.kind == 10) {
lexer.NextToken();
} else SynErr(143);
#line 1047 "cs.ATG"
cd.Body = (BlockStatement)stmt; compilationUnit.AddChild(cd);
} else if (la.kind == 69 || la.kind == 79) {
#line 1050 "cs.ATG"
m.Check(Modifier.Operators);
if (m.isNone) Error("at least one modifier must be set");
bool isImplicit = true;
if (la.kind == 79) {
lexer.NextToken();
} else {
lexer.NextToken();
#line 1054 "cs.ATG"
isImplicit = false;
}
Expect(91);
Type(
#line 1055 "cs.ATG"
out type);
#line 1055 "cs.ATG"
TypeReference operatorType = type;
Expect(18);
Type(
#line 1056 "cs.ATG"
out type);
Expect(1);
#line 1056 "cs.ATG"
string varName = t.val;
Expect(19);
if (la.kind == 14) {
Block(
#line 1056 "cs.ATG"
out stmt);
} else if (la.kind == 10) {
lexer.NextToken();
#line 1056 "cs.ATG"
stmt = null;
} else SynErr(144);
#line 1059 "cs.ATG"
List<ParameterDeclarationExpression> parameters = new List<ParameterDeclarationExpression>();
parameters.Add(new ParameterDeclarationExpression(type, varName));
OperatorDeclaration operatorDeclaration = new OperatorDeclaration(m.Modifier,
attributes,
parameters,
operatorType,
isImplicit ? ConversionType.Implicit : ConversionType.Explicit
);
operatorDeclaration.Body = (BlockStatement)stmt;
compilationUnit.AddChild(operatorDeclaration);
} else if (StartOf(17)) {
TypeDecl(
#line 1072 "cs.ATG"
m, attributes);
} else if (StartOf(8)) {
Type(
#line 1073 "cs.ATG"
out type);
#line 1073 "cs.ATG"
Point startPos = t.Location;
if (la.kind == 91) {
#line 1075 "cs.ATG"
Token op;
m.Check(Modifier.Operators);
if (m.isNone) Error("at least one modifier must be set");
lexer.NextToken();
OverloadableOperator(
#line 1079 "cs.ATG"
out op);
#line 1079 "cs.ATG"
TypeReference firstType, secondType = null; string secondName = null;
Expect(18);
Type(
#line 1080 "cs.ATG"
out firstType);
Expect(1);
#line 1080 "cs.ATG"
string firstName = t.val;
if (la.kind == 12) {
lexer.NextToken();
Type(
#line 1081 "cs.ATG"
out secondType);
Expect(1);
#line 1081 "cs.ATG"
secondName = t.val;
#line 1081 "cs.ATG"
if (ParserUtil.IsUnaryOperator(op) && !ParserUtil.IsBinaryOperator(op))
Error("too many operands for unary operator");
} else if (la.kind == 19) {
#line 1084 "cs.ATG"
if (ParserUtil.IsBinaryOperator(op))
Error("too few operands for binary operator");
} else SynErr(145);
Expect(19);
if (la.kind == 14) {
Block(
#line 1088 "cs.ATG"
out stmt);
} else if (la.kind == 10) {
lexer.NextToken();
} else SynErr(146);
#line 1090 "cs.ATG"
List<ParameterDeclarationExpression> parameters = new List<ParameterDeclarationExpression>();
parameters.Add(new ParameterDeclarationExpression(firstType, firstName));
if (secondType != null) {
parameters.Add(new ParameterDeclarationExpression(secondType, secondName));
}
OperatorDeclaration operatorDeclaration = new OperatorDeclaration(m.Modifier,
attributes,
parameters,
type,
op.kind);
operatorDeclaration.Body = (BlockStatement)stmt;
compilationUnit.AddChild(operatorDeclaration);
} else if (
#line 1105 "cs.ATG"
IsVarDecl()) {
#line 1105 "cs.ATG"
m.Check(Modifier.Fields);
FieldDeclaration fd = new FieldDeclaration(attributes, type, m.Modifier);
fd.StartLocation = startPos;
VariableDeclarator(
#line 1109 "cs.ATG"
variableDeclarators);
while (la.kind == 12) {
lexer.NextToken();
VariableDeclarator(
#line 1110 "cs.ATG"
variableDeclarators);
}
Expect(10);
#line 1111 "cs.ATG"
fd.EndLocation = t.EndLocation; fd.Fields = variableDeclarators; compilationUnit.AddChild(fd);
} else if (la.kind == 110) {
#line 1114 "cs.ATG"
m.Check(Modifier.Indexers);
lexer.NextToken();
Expect(16);
FormalParameterList(
#line 1115 "cs.ATG"
out p);
Expect(17);
#line 1115 "cs.ATG"
Point endLocation = t.EndLocation;
Expect(14);
#line 1116 "cs.ATG"
IndexerDeclaration indexer = new IndexerDeclaration(type, p, m.Modifier, attributes);
indexer.StartLocation = startPos;
indexer.EndLocation = endLocation;
indexer.BodyStart = t.Location;
PropertyGetRegion getRegion;
PropertySetRegion setRegion;
AccessorDecls(
#line 1123 "cs.ATG"
out getRegion, out setRegion);
Expect(15);
#line 1124 "cs.ATG"
indexer.BodyEnd = t.EndLocation;
indexer.GetRegion = getRegion;
indexer.SetRegion = setRegion;
compilationUnit.AddChild(indexer);
} else if (la.kind == 1) {
Qualident(
#line 1129 "cs.ATG"
out qualident);
#line 1129 "cs.ATG"
Point qualIdentEndLocation = t.EndLocation;
if (la.kind == 14 || la.kind == 18) {
if (la.kind == 18) {
#line 1132 "cs.ATG"
m.Check(Modifier.PropertysEventsMethods);
lexer.NextToken();
if (StartOf(9)) {
FormalParameterList(
#line 1133 "cs.ATG"
out p);
}
Expect(19);
#line 1133 "cs.ATG"
MethodDeclaration methodDeclaration = new MethodDeclaration(qualident,
m.Modifier,
type,
p,
attributes);
methodDeclaration.StartLocation = startPos;
methodDeclaration.EndLocation = t.EndLocation;
compilationUnit.AddChild(methodDeclaration);
if (la.kind == 14) {
Block(
#line 1142 "cs.ATG"
out stmt);
} else if (la.kind == 10) {
lexer.NextToken();
} else SynErr(147);
#line 1142 "cs.ATG"
methodDeclaration.Body = (BlockStatement)stmt;
} else {
lexer.NextToken();
#line 1145 "cs.ATG"
PropertyDeclaration pDecl = new PropertyDeclaration(qualident, type, m.Modifier, attributes);
pDecl.StartLocation = startPos;
pDecl.EndLocation = qualIdentEndLocation;
pDecl.BodyStart = t.Location;
PropertyGetRegion getRegion;
PropertySetRegion setRegion;
AccessorDecls(
#line 1152 "cs.ATG"
out getRegion, out setRegion);
Expect(15);
#line 1154 "cs.ATG"
pDecl.GetRegion = getRegion;
pDecl.SetRegion = setRegion;
pDecl.BodyEnd = t.EndLocation;
compilationUnit.AddChild(pDecl);
}
} else if (la.kind == 13) {
#line 1162 "cs.ATG"
m.Check(Modifier.Indexers);
lexer.NextToken();
Expect(110);
Expect(16);
FormalParameterList(
#line 1163 "cs.ATG"
out p);
Expect(17);
#line 1164 "cs.ATG"
IndexerDeclaration indexer = new IndexerDeclaration(type, p, m.Modifier, attributes);
indexer.StartLocation = startPos;
indexer.EndLocation = t.EndLocation;
indexer.NamespaceName = qualident;
PropertyGetRegion getRegion;
PropertySetRegion setRegion;
Expect(14);
#line 1171 "cs.ATG"
Point bodyStart = t.Location;
AccessorDecls(
#line 1172 "cs.ATG"
out getRegion, out setRegion);
Expect(15);
#line 1173 "cs.ATG"
indexer.BodyStart = bodyStart;
indexer.BodyEnd = t.EndLocation;
indexer.GetRegion = getRegion;
indexer.SetRegion = setRegion;
compilationUnit.AddChild(indexer);
} else SynErr(148);
} else SynErr(149);
} else SynErr(150);
}
void InterfaceMemberDecl() {
#line 1200 "cs.ATG"
TypeReference type;
List<ParameterDeclarationExpression> p;
AttributeSection section;
Modifier mod = Modifier.None;
List<AttributeSection> attributes = new List<AttributeSection>();
List<ParameterDeclarationExpression> parameters = new List<ParameterDeclarationExpression>();
string name;
PropertyGetRegion getBlock;
PropertySetRegion setBlock;
Point startLocation = new Point(-1, -1);
while (la.kind == 16) {
AttributeSection(
#line 1212 "cs.ATG"
out section);
#line 1212 "cs.ATG"
attributes.Add(section);
}
if (la.kind == 88) {
lexer.NextToken();
#line 1213 "cs.ATG"
mod = Modifier.New; startLocation = t.Location;
}
if (
#line 1216 "cs.ATG"
NotVoidPointer()) {
Expect(122);
#line 1216 "cs.ATG"
if (startLocation.X == -1) startLocation = t.Location;
Expect(1);
#line 1216 "cs.ATG"
name = t.val;
Expect(18);
if (StartOf(9)) {
FormalParameterList(
#line 1217 "cs.ATG"
out parameters);
}
Expect(19);
Expect(10);
#line 1217 "cs.ATG"
MethodDeclaration md = new MethodDeclaration(name, mod, new TypeReference("void"), parameters, attributes);
md.StartLocation = startLocation;
md.EndLocation = t.EndLocation;
compilationUnit.AddChild(md);
} else if (StartOf(18)) {
if (StartOf(8)) {
Type(
#line 1223 "cs.ATG"
out type);
#line 1223 "cs.ATG"
if (startLocation.X == -1) startLocation = t.Location;
if (la.kind == 1) {
lexer.NextToken();
#line 1225 "cs.ATG"
name = t.val; Point qualIdentEndLocation = t.EndLocation;
if (la.kind == 18) {
lexer.NextToken();
if (StartOf(9)) {
FormalParameterList(
#line 1228 "cs.ATG"
out parameters);
}
Expect(19);
Expect(10);
#line 1228 "cs.ATG"
MethodDeclaration md = new MethodDeclaration(name, mod, type, parameters, attributes);
md.StartLocation = startLocation;
md.EndLocation = t.EndLocation;
compilationUnit.AddChild(md);
} else if (la.kind == 14) {
#line 1234 "cs.ATG"
PropertyDeclaration pd = new PropertyDeclaration(name, type, mod, attributes); compilationUnit.AddChild(pd);
lexer.NextToken();
#line 1235 "cs.ATG"
Point bodyStart = t.Location;
InterfaceAccessors(
#line 1235 "cs.ATG"
out getBlock, out setBlock);
Expect(15);
#line 1235 "cs.ATG"
pd.GetRegion = getBlock; pd.SetRegion = setBlock; pd.StartLocation = startLocation; pd.EndLocation = qualIdentEndLocation; pd.BodyStart = bodyStart; pd.BodyEnd = t.EndLocation;
} else SynErr(151);
} else if (la.kind == 110) {
lexer.NextToken();
Expect(16);
FormalParameterList(
#line 1238 "cs.ATG"
out p);
Expect(17);
#line 1238 "cs.ATG"
Point bracketEndLocation = t.EndLocation;
#line 1238 "cs.ATG"
IndexerDeclaration id = new IndexerDeclaration(type, p, mod, attributes); compilationUnit.AddChild(id);
Expect(14);
#line 1239 "cs.ATG"
Point bodyStart = t.Location;
InterfaceAccessors(
#line 1239 "cs.ATG"
out getBlock, out setBlock);
Expect(15);
#line 1239 "cs.ATG"
id.GetRegion = getBlock; id.SetRegion = setBlock; id.StartLocation = startLocation; id.EndLocation = bracketEndLocation; id.BodyStart = bodyStart; id.BodyEnd = t.EndLocation;
} else SynErr(152);
} else {
lexer.NextToken();
#line 1242 "cs.ATG"
if (startLocation.X == -1) startLocation = t.Location;
Type(
#line 1242 "cs.ATG"
out type);
Expect(1);
#line 1242 "cs.ATG"
EventDeclaration ed = new EventDeclaration(type, t.val, mod, attributes);
compilationUnit.AddChild(ed);
Expect(10);
#line 1245 "cs.ATG"
ed.StartLocation = startLocation; ed.EndLocation = t.EndLocation;
}
} else SynErr(153);
}
void EnumMemberDecl(
#line 1250 "cs.ATG"
out FieldDeclaration f) {
#line 1252 "cs.ATG"
Expression expr = null;
List<AttributeSection> attributes = new List<AttributeSection>();
AttributeSection section = null;
VariableDeclaration varDecl = null;
while (la.kind == 16) {
AttributeSection(
#line 1258 "cs.ATG"
out section);
#line 1258 "cs.ATG"
attributes.Add(section);
}
Expect(1);
#line 1259 "cs.ATG"
f = new FieldDeclaration(attributes);
varDecl = new VariableDeclaration(t.val);
f.Fields.Add(varDecl);
f.StartLocation = t.Location;
if (la.kind == 3) {
lexer.NextToken();
Expr(
#line 1264 "cs.ATG"
out expr);
#line 1264 "cs.ATG"
varDecl.Initializer = expr;
}
}
void SimpleType(
#line 863 "cs.ATG"
out string name) {
#line 864 "cs.ATG"
name = String.Empty;
if (StartOf(19)) {
IntegralType(
#line 866 "cs.ATG"
out name);
} else if (la.kind == 74) {
lexer.NextToken();
#line 867 "cs.ATG"
name = "float";
} else if (la.kind == 65) {
lexer.NextToken();
#line 868 "cs.ATG"
name = "double";
} else if (la.kind == 61) {
lexer.NextToken();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -