?? parser.cs
字號(hào):
#line 1029 "cs.ATG"
eventDecl.VariableDeclarators = variableDeclarators; eventDecl.EndLocation = t.EndLocation;
} else if (la.kind == 1) {
Qualident(
#line 1030 "cs.ATG"
out qualident);
#line 1030 "cs.ATG"
eventDecl.Name = qualident; eventDecl.EndLocation = t.EndLocation;
Expect(14);
#line 1031 "cs.ATG"
eventDecl.BodyStart = t.Location;
EventAccessorDecls(
#line 1032 "cs.ATG"
out addBlock, out removeBlock);
Expect(15);
#line 1033 "cs.ATG"
eventDecl.BodyEnd = t.EndLocation;
} else SynErr(142);
#line 1034 "cs.ATG"
compilationUnit.BlockEnd();
eventDecl.AddRegion = addBlock;
eventDecl.RemoveRegion = removeBlock;
} else if (
#line 1041 "cs.ATG"
IdentAndLPar()) {
#line 1041 "cs.ATG"
m.Check(Modifier.Constructors | Modifier.StaticConstructors);
Expect(1);
#line 1042 "cs.ATG"
string name = t.val; Point startPos = t.Location;
Expect(18);
if (StartOf(9)) {
#line 1042 "cs.ATG"
m.Check(Modifier.Constructors);
FormalParameterList(
#line 1043 "cs.ATG"
out p);
}
Expect(19);
#line 1045 "cs.ATG"
ConstructorInitializer init = null;
if (la.kind == 9) {
#line 1046 "cs.ATG"
m.Check(Modifier.Constructors);
ConstructorInitializer(
#line 1047 "cs.ATG"
out init);
}
#line 1049 "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 1054 "cs.ATG"
out stmt);
} else if (la.kind == 10) {
lexer.NextToken();
} else SynErr(143);
#line 1054 "cs.ATG"
cd.Body = (BlockStatement)stmt; compilationUnit.AddChild(cd);
} else if (la.kind == 69 || la.kind == 79) {
#line 1057 "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 1061 "cs.ATG"
isImplicit = false;
}
Expect(91);
Type(
#line 1062 "cs.ATG"
out type);
#line 1062 "cs.ATG"
TypeReference operatorType = type;
Expect(18);
Type(
#line 1063 "cs.ATG"
out type);
Expect(1);
#line 1063 "cs.ATG"
string varName = t.val;
Expect(19);
if (la.kind == 14) {
Block(
#line 1063 "cs.ATG"
out stmt);
} else if (la.kind == 10) {
lexer.NextToken();
#line 1063 "cs.ATG"
stmt = null;
} else SynErr(144);
#line 1066 "cs.ATG"
OperatorDeclarator operatorDeclarator = new OperatorDeclarator(isImplicit ? OperatorType.Implicit : OperatorType.Explicit,
operatorType,
type,
varName);
OperatorDeclaration operatorDeclaration = new OperatorDeclaration(operatorDeclarator, m.Modifier, attributes);
operatorDeclaration.Body = stmt;
compilationUnit.AddChild(operatorDeclaration);
} else if (StartOf(17)) {
TypeDecl(
#line 1076 "cs.ATG"
m, attributes);
} else if (StartOf(8)) {
Type(
#line 1077 "cs.ATG"
out type);
#line 1077 "cs.ATG"
Point startPos = t.Location;
if (la.kind == 91) {
#line 1079 "cs.ATG"
Token op;
m.Check(Modifier.Operators);
if (m.isNone) Error("at least one modifier must be set");
lexer.NextToken();
OverloadableOperator(
#line 1083 "cs.ATG"
out op);
#line 1083 "cs.ATG"
TypeReference firstType, secondType = null; string secondName = null;
Expect(18);
Type(
#line 1084 "cs.ATG"
out firstType);
Expect(1);
#line 1084 "cs.ATG"
string firstName = t.val;
if (la.kind == 12) {
lexer.NextToken();
Type(
#line 1085 "cs.ATG"
out secondType);
Expect(1);
#line 1085 "cs.ATG"
secondName = t.val;
#line 1085 "cs.ATG"
if (ParserUtil.IsUnaryOperator(op) && !ParserUtil.IsBinaryOperator(op))
Error("too many operands for unary operator");
} else if (la.kind == 19) {
#line 1088 "cs.ATG"
if (ParserUtil.IsBinaryOperator(op))
Error("too few operands for binary operator");
} else SynErr(145);
Expect(19);
if (la.kind == 14) {
Block(
#line 1092 "cs.ATG"
out stmt);
} else if (la.kind == 10) {
lexer.NextToken();
} else SynErr(146);
#line 1094 "cs.ATG"
OperatorDeclarator operatorDeclarator = new OperatorDeclarator(secondType != null ? OperatorType.Binary : OperatorType.Unary,
type,
op.kind,
firstType,
firstName,
secondType,
secondName);
OperatorDeclaration operatorDeclaration = new OperatorDeclaration(operatorDeclarator, m.Modifier, attributes);
operatorDeclaration.Body = stmt;
compilationUnit.AddChild(operatorDeclaration);
} else if (
#line 1107 "cs.ATG"
IsVarDecl()) {
#line 1107 "cs.ATG"
m.Check(Modifier.Fields);
FieldDeclaration fd = new FieldDeclaration(attributes, type, m.Modifier);
fd.StartLocation = startPos;
VariableDeclarator(
#line 1111 "cs.ATG"
variableDeclarators);
while (la.kind == 12) {
lexer.NextToken();
VariableDeclarator(
#line 1112 "cs.ATG"
variableDeclarators);
}
Expect(10);
#line 1113 "cs.ATG"
fd.EndLocation = t.EndLocation; fd.Fields = variableDeclarators; compilationUnit.AddChild(fd);
} else if (la.kind == 110) {
#line 1116 "cs.ATG"
m.Check(Modifier.Indexers);
lexer.NextToken();
Expect(16);
FormalParameterList(
#line 1117 "cs.ATG"
out p);
Expect(17);
#line 1117 "cs.ATG"
Point endLocation = t.EndLocation;
Expect(14);
#line 1118 "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 1125 "cs.ATG"
out getRegion, out setRegion);
Expect(15);
#line 1126 "cs.ATG"
indexer.BodyEnd = t.EndLocation;
indexer.GetRegion = getRegion;
indexer.SetRegion = setRegion;
compilationUnit.AddChild(indexer);
} else if (la.kind == 1) {
Qualident(
#line 1131 "cs.ATG"
out qualident);
#line 1131 "cs.ATG"
Point qualIdentEndLocation = t.EndLocation;
if (la.kind == 14 || la.kind == 18) {
if (la.kind == 18) {
#line 1134 "cs.ATG"
m.Check(Modifier.PropertysEventsMethods);
lexer.NextToken();
if (StartOf(9)) {
FormalParameterList(
#line 1135 "cs.ATG"
out p);
}
Expect(19);
#line 1135 "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 1144 "cs.ATG"
out stmt);
} else if (la.kind == 10) {
lexer.NextToken();
} else SynErr(147);
#line 1144 "cs.ATG"
methodDeclaration.Body = (BlockStatement)stmt;
} else {
lexer.NextToken();
#line 1147 "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 1154 "cs.ATG"
out getRegion, out setRegion);
Expect(15);
#line 1156 "cs.ATG"
pDecl.GetRegion = getRegion;
pDecl.SetRegion = setRegion;
pDecl.BodyEnd = t.EndLocation;
compilationUnit.AddChild(pDecl);
}
} else if (la.kind == 13) {
#line 1164 "cs.ATG"
m.Check(Modifier.Indexers);
lexer.NextToken();
Expect(110);
Expect(16);
FormalParameterList(
#line 1165 "cs.ATG"
out p);
Expect(17);
#line 1166 "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 1173 "cs.ATG"
Point bodyStart = t.Location;
AccessorDecls(
#line 1174 "cs.ATG"
out getRegion, out setRegion);
Expect(15);
#line 1175 "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 1202 "cs.ATG"
TypeReference type;
ArrayList p;
AttributeSection section;
Modifier mod = Modifier.None;
ArrayList attributes = new ArrayList();
ArrayList parameters = new ArrayList();
string name;
PropertyGetRegion getBlock;
PropertySetRegion setBlock;
Point startLocation = new Point(-1, -1);
while (la.kind == 16) {
AttributeSection(
#line 1214 "cs.ATG"
out section);
#line 1214 "cs.ATG"
attributes.Add(section);
}
if (la.kind == 88) {
lexer.NextToken();
#line 1215 "cs.ATG"
mod = Modifier.New; startLocation = t.Location;
}
if (
#line 1218 "cs.ATG"
NotVoidPointer()) {
Expect(122);
#line 1218 "cs.ATG"
if (startLocation.X == -1) startLocation = t.Location;
Expect(1);
#line 1218 "cs.ATG"
name = t.val;
Expect(18);
if (StartOf(9)) {
FormalParameterList(
#line 1219 "cs.ATG"
out parameters);
}
Expect(19);
Expect(10);
#line 1219 "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 1225 "cs.ATG"
out type);
#line 1225 "cs.ATG"
if (startLocation.X == -1) startLocation = t.Location;
if (la.kind == 1) {
lexer.NextToken();
#line 1227 "cs.ATG"
name = t.val; Point qualIdentEndLocation = t.EndLocation;
if (la.kind == 18) {
lexer.NextToken();
if (StartOf(9)) {
FormalParameterList(
#line 1230 "cs.ATG"
out parameters);
}
Expect(19);
Expect(10);
#line 1230 "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 1236 "cs.ATG"
PropertyDeclaration pd = new PropertyDeclaration(name, type, mod, attributes); compilationUnit.AddChild(pd);
lexer.NextToken();
#line 1237 "cs.ATG"
Point bodyStart = t.Location;
InterfaceAccessors(
#line 1237 "cs.ATG"
out getBlock, out setBlock);
Expect(15);
#line 1237 "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 1240 "cs.ATG"
out p);
Expect(17);
#line 1240 "cs.ATG"
Point bracketEndLocation = t.EndLocation;
#line 1240 "cs.ATG"
IndexerDeclaration id = new IndexerDeclaration(type, p, mod, attributes); compilationUnit.AddChild(id);
Expect(14);
#line 1241 "cs.ATG"
Point bodyStart = t.Location;
InterfaceAccessors(
#line 1241 "cs.ATG"
out getBlock, out setBlock);
Expect(15);
#line 1241 "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 1244 "cs.ATG"
if (startLocation.X == -1) startLocation = t.Location;
Type(
#line 1244 "cs.ATG"
out type);
Expect(1);
#line 1244 "cs.ATG"
EventDeclaration ed = new EventDeclaration(type, t.val, mod, attributes);
compilationUnit.AddChild(ed);
Expect(10);
#line 1247 "cs.ATG"
ed.StartLocation = startLocation; ed.EndLocation = t.EndLocation;
}
} else SynErr(153);
}
void EnumMemberDecl(
#line 1252 "cs.ATG"
out FieldDeclaration f) {
#line 1254 "cs.ATG"
Expression expr = null;
ArrayList attributes = new ArrayList();
AttributeSection section = null;
VariableDeclaration varDecl = null;
while (la.kind == 16) {
AttributeSection(
#line 1260 "cs.ATG"
out section);
#line 1260 "cs.ATG"
attributes.Add(section);
}
Expect(1);
#line 1261 "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 1266 "cs.ATG"
out expr);
#line 1266 "cs.ATG"
varDecl.Initializer = expr;
}
}
void SimpleType(
#line 870 "cs.ATG"
out string name) {
#line 871 "cs.ATG"
name = String.Empty;
if (StartOf(19)) {
IntegralType(
#line 873 "cs.ATG"
out name);
} else if (la.kind == 74) {
lexer.NextToken();
#line 874 "cs.ATG"
name = t.val;
} else if (la.kind == 65) {
lexer.NextToken();
#line 875 "cs.ATG"
name = t.val;
} else if (la.kind == 61) {
lexer.NextToken();
#line 876 "cs.ATG"
name = t.val;
} else if (la.kind == 51) {
lexer.NextToken();
#line 877 "cs.ATG"
name = t.val;
} else SynErr(154);
}
void NonArrayType(
#line 852 "cs.ATG"
out TypeReference type) {
#line 854 "cs.ATG"
string name = "";
int pointer = 0;
if (la.kind == 1 || la.kind == 90 || la.kind == 107) {
ClassType(
#line 858 "cs.ATG"
out name);
} else if (StartOf(14)) {
SimpleType(
#line 859 "cs.ATG"
out name);
} else if (la.kind == 122) {
lexer.NextToken();
Expect(6);
#line 860 "cs.ATG"
pointer = 1; name = "void";
} else SynErr(155);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -