?? parser.cs
字號:
Expect(91);
Type(
#line 1293 "cs.ATG"
out type);
#line 1293 "cs.ATG"
TypeReference operatorType = type;
Expect(20);
Type(
#line 1294 "cs.ATG"
out type);
Expect(1);
#line 1294 "cs.ATG"
string varName = t.val;
Expect(21);
#line 1295 "cs.ATG"
Point endPos = t.Location;
if (la.kind == 16) {
Block(
#line 1296 "cs.ATG"
out stmt);
} else if (la.kind == 11) {
lexer.NextToken();
#line 1296 "cs.ATG"
stmt = null;
} else SynErr(143);
#line 1299 "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;
operatorDeclaration.StartLocation = m.GetDeclarationLocation(startPos);
operatorDeclaration.EndLocation = endPos;
compilationUnit.AddChild(operatorDeclaration);
} else if (StartOf(17)) {
TypeDecl(
#line 1315 "cs.ATG"
m, attributes);
} else if (StartOf(9)) {
Type(
#line 1317 "cs.ATG"
out type);
#line 1317 "cs.ATG"
Point startPos = t.Location;
if (la.kind == 91) {
#line 1319 "cs.ATG"
OverloadableOperatorType op;
m.Check(Modifier.Operators);
if (m.isNone) Error("at least one modifier must be set");
lexer.NextToken();
OverloadableOperator(
#line 1323 "cs.ATG"
out op);
#line 1323 "cs.ATG"
TypeReference firstType, secondType = null; string secondName = null;
Expect(20);
Type(
#line 1324 "cs.ATG"
out firstType);
Expect(1);
#line 1324 "cs.ATG"
string firstName = t.val;
if (la.kind == 14) {
lexer.NextToken();
Type(
#line 1325 "cs.ATG"
out secondType);
Expect(1);
#line 1325 "cs.ATG"
secondName = t.val;
} else if (la.kind == 21) {
} else SynErr(144);
#line 1333 "cs.ATG"
Point endPos = t.Location;
Expect(21);
if (la.kind == 16) {
Block(
#line 1334 "cs.ATG"
out stmt);
} else if (la.kind == 11) {
lexer.NextToken();
} else SynErr(145);
#line 1336 "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);
operatorDeclaration.Body = (BlockStatement)stmt;
operatorDeclaration.StartLocation = m.GetDeclarationLocation(startPos);
operatorDeclaration.EndLocation = endPos;
compilationUnit.AddChild(operatorDeclaration);
} else if (
#line 1353 "cs.ATG"
IsVarDecl()) {
#line 1353 "cs.ATG"
m.Check(Modifier.Fields);
FieldDeclaration fd = new FieldDeclaration(attributes, type, m.Modifier);
fd.StartLocation = m.GetDeclarationLocation(startPos);
VariableDeclarator(
#line 1357 "cs.ATG"
variableDeclarators);
while (la.kind == 14) {
lexer.NextToken();
VariableDeclarator(
#line 1358 "cs.ATG"
variableDeclarators);
}
Expect(11);
#line 1359 "cs.ATG"
fd.EndLocation = t.EndLocation; fd.Fields = variableDeclarators; compilationUnit.AddChild(fd);
} else if (la.kind == 110) {
#line 1362 "cs.ATG"
m.Check(Modifier.Indexers);
lexer.NextToken();
Expect(18);
FormalParameterList(
#line 1363 "cs.ATG"
p);
Expect(19);
#line 1363 "cs.ATG"
Point endLocation = t.EndLocation;
Expect(16);
#line 1364 "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 1371 "cs.ATG"
out getRegion, out setRegion);
Expect(17);
#line 1372 "cs.ATG"
indexer.BodyEnd = t.EndLocation;
indexer.GetRegion = getRegion;
indexer.SetRegion = setRegion;
compilationUnit.AddChild(indexer);
} else if (
#line 1377 "cs.ATG"
la.kind == Tokens.Identifier) {
if (
#line 1378 "cs.ATG"
IsExplicitInterfaceImplementation()) {
TypeName(
#line 1379 "cs.ATG"
out explicitInterface, false);
#line 1380 "cs.ATG"
if (la.kind != Tokens.Dot || Peek(1).kind != Tokens.This) {
qualident = TypeReference.StripLastIdentifierFromType(ref explicitInterface);
}
} else if (la.kind == 1) {
lexer.NextToken();
#line 1383 "cs.ATG"
qualident = t.val;
} else SynErr(146);
#line 1385 "cs.ATG"
Point qualIdentEndLocation = t.EndLocation;
if (la.kind == 16 || la.kind == 20 || la.kind == 23) {
if (la.kind == 20 || la.kind == 23) {
#line 1389 "cs.ATG"
m.Check(Modifier.PropertysEventsMethods);
if (la.kind == 23) {
TypeParameterList(
#line 1391 "cs.ATG"
templates);
}
Expect(20);
if (StartOf(10)) {
FormalParameterList(
#line 1392 "cs.ATG"
p);
}
Expect(21);
#line 1393 "cs.ATG"
MethodDeclaration methodDeclaration = new MethodDeclaration(qualident,
m.Modifier,
type,
p,
attributes);
if (explicitInterface != null)
methodDeclaration.InterfaceImplementations.Add(new InterfaceImplementation(explicitInterface, qualident));
methodDeclaration.StartLocation = m.GetDeclarationLocation(startPos);
methodDeclaration.EndLocation = t.EndLocation;
methodDeclaration.Templates = templates;
compilationUnit.AddChild(methodDeclaration);
while (
#line 1405 "cs.ATG"
IdentIsWhere()) {
TypeParameterConstraintsClause(
#line 1405 "cs.ATG"
templates);
}
if (la.kind == 16) {
Block(
#line 1406 "cs.ATG"
out stmt);
} else if (la.kind == 11) {
lexer.NextToken();
} else SynErr(147);
#line 1406 "cs.ATG"
methodDeclaration.Body = (BlockStatement)stmt;
} else {
lexer.NextToken();
#line 1409 "cs.ATG"
PropertyDeclaration pDecl = new PropertyDeclaration(qualident, type, m.Modifier, attributes);
if (explicitInterface != null)
pDecl.InterfaceImplementations.Add(new InterfaceImplementation(explicitInterface, qualident));
pDecl.StartLocation = m.GetDeclarationLocation(startPos);
pDecl.EndLocation = qualIdentEndLocation;
pDecl.BodyStart = t.Location;
PropertyGetRegion getRegion;
PropertySetRegion setRegion;
AccessorDecls(
#line 1418 "cs.ATG"
out getRegion, out setRegion);
Expect(17);
#line 1420 "cs.ATG"
pDecl.GetRegion = getRegion;
pDecl.SetRegion = setRegion;
pDecl.BodyEnd = t.EndLocation;
compilationUnit.AddChild(pDecl);
}
} else if (la.kind == 15) {
#line 1428 "cs.ATG"
m.Check(Modifier.Indexers);
lexer.NextToken();
Expect(110);
Expect(18);
FormalParameterList(
#line 1429 "cs.ATG"
p);
Expect(19);
#line 1430 "cs.ATG"
IndexerDeclaration indexer = new IndexerDeclaration(type, p, m.Modifier, attributes);
indexer.StartLocation = m.GetDeclarationLocation(startPos);
indexer.EndLocation = t.EndLocation;
if (explicitInterface != null)
indexer.InterfaceImplementations.Add(new InterfaceImplementation(explicitInterface, "this"));
PropertyGetRegion getRegion;
PropertySetRegion setRegion;
Expect(16);
#line 1438 "cs.ATG"
Point bodyStart = t.Location;
AccessorDecls(
#line 1439 "cs.ATG"
out getRegion, out setRegion);
Expect(17);
#line 1440 "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 1467 "cs.ATG"
TypeReference type;
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);
List<TemplateDefinition> templates = new List<TemplateDefinition>();
while (la.kind == 18) {
AttributeSection(
#line 1480 "cs.ATG"
out section);
#line 1480 "cs.ATG"
attributes.Add(section);
}
if (la.kind == 88) {
lexer.NextToken();
#line 1481 "cs.ATG"
mod = Modifier.New; startLocation = t.Location;
}
if (
#line 1484 "cs.ATG"
NotVoidPointer()) {
Expect(122);
#line 1484 "cs.ATG"
if (startLocation.X == -1) startLocation = t.Location;
Expect(1);
#line 1484 "cs.ATG"
name = t.val;
if (la.kind == 23) {
TypeParameterList(
#line 1485 "cs.ATG"
templates);
}
Expect(20);
if (StartOf(10)) {
FormalParameterList(
#line 1486 "cs.ATG"
parameters);
}
Expect(21);
while (
#line 1487 "cs.ATG"
IdentIsWhere()) {
TypeParameterConstraintsClause(
#line 1487 "cs.ATG"
templates);
}
Expect(11);
#line 1489 "cs.ATG"
MethodDeclaration md = new MethodDeclaration(name, mod, new TypeReference("void"), parameters, attributes);
md.StartLocation = startLocation;
md.EndLocation = t.EndLocation;
md.Templates = templates;
compilationUnit.AddChild(md);
} else if (StartOf(18)) {
if (StartOf(9)) {
Type(
#line 1496 "cs.ATG"
out type);
#line 1496 "cs.ATG"
if (startLocation.X == -1) startLocation = t.Location;
if (la.kind == 1) {
lexer.NextToken();
#line 1498 "cs.ATG"
name = t.val; Point qualIdentEndLocation = t.EndLocation;
if (la.kind == 20 || la.kind == 23) {
if (la.kind == 23) {
TypeParameterList(
#line 1502 "cs.ATG"
templates);
}
Expect(20);
if (StartOf(10)) {
FormalParameterList(
#line 1503 "cs.ATG"
parameters);
}
Expect(21);
while (
#line 1505 "cs.ATG"
IdentIsWhere()) {
TypeParameterConstraintsClause(
#line 1505 "cs.ATG"
templates);
}
Expect(11);
#line 1506 "cs.ATG"
MethodDeclaration md = new MethodDeclaration(name, mod, type, parameters, attributes);
md.StartLocation = startLocation;
md.EndLocation = t.EndLocation;
md.Templates = templates;
compilationUnit.AddChild(md);
} else if (la.kind == 16) {
#line 1513 "cs.ATG"
PropertyDeclaration pd = new PropertyDeclaration(name, type, mod, attributes); compilationUnit.AddChild(pd);
lexer.NextToken();
#line 1514 "cs.ATG"
Point bodyStart = t.Location;
InterfaceAccessors(
#line 1514 "cs.ATG"
out getBlock, out setBlock);
Expect(17);
#line 1514 "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(18);
FormalParameterList(
#line 1517 "cs.ATG"
parameters);
Expect(19);
#line 1517 "cs.ATG"
Point bracketEndLocation = t.EndLocation;
#line 1517 "cs.ATG"
IndexerDeclaration id = new IndexerDeclaration(type, parameters, mod, attributes); compilationUnit.AddChild(id);
Expect(16);
#line 1518 "cs.ATG"
Point bodyStart = t.Location;
InterfaceAccessors(
#line 1518 "cs.ATG"
out getBlock, out setBlock);
Expect(17);
#line 1518 "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 1521 "cs.ATG"
if (startLocation.X == -1) startLocation = t.Location;
Type(
#line 1521 "cs.ATG"
out type);
Expect(1);
#line 1521 "cs.ATG"
EventDeclaration ed = new EventDeclaration(type, t.val, mod, attributes, null);
compilationUnit.AddChild(ed);
Expect(11);
#line 1524 "cs.ATG"
ed.StartLocation = startLocation; ed.EndLocation = t.EndLocation;
}
} else SynErr(153);
}
void EnumMemberDecl(
#line 1529 "cs.ATG"
out FieldDeclaration f) {
#line 1531 "cs.ATG"
Expression expr = null;
List<AttributeSection> attributes = new List<AttributeSection>();
AttributeSection section = null;
VariableDeclaration varDecl = null;
while (la.kind == 18) {
AttributeSection(
#line 1537 "cs.ATG"
out section);
#line 1537 "cs.ATG"
attributes.Add(section);
}
Expect(1);
#line 1538 "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 1543 "cs.ATG"
out expr);
#line 1543 "cs.ATG"
varDecl.Initializer = expr;
}
}
void TypeWithRestriction(
#line 1008 "cs.ATG"
out TypeReference type, bool allowNullable, bool canBeUnbound) {
#line 1010 "cs.ATG"
string name;
int pointer = 0;
type = null;
if (la.kind == 1 || la.kind == 90 || la.kind == 107) {
ClassType(
#line 1015 "cs.ATG"
out type, canBeUnbound);
} else if (StartOf(4)) {
SimpleType(
#line 1016 "cs.ATG"
out name);
#line 1016 "cs.ATG"
type = new TypeReference(name);
} else if (la.kind == 122) {
lexer.NextToken();
Expect(6);
#line 1017 "cs.ATG"
pointer = 1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -