📄 parser.cs
字号:
variableDeclarators);
}
Expect(10);
#line 1030 "cs.ATG"
eventDecl.VariableDeclarators = variableDeclarators; eventDecl.EndLocation = t.EndLocation;
} else if (la.kind == 1) {
Qualident(
#line 1031 "cs.ATG"
out qualident);
#line 1031 "cs.ATG"
eventDecl.Name = qualident; eventDecl.EndLocation = t.EndLocation;
Expect(14);
#line 1032 "cs.ATG"
eventDecl.BodyStart = t.Location;
EventAccessorDecls(
#line 1033 "cs.ATG"
out addBlock, out removeBlock);
Expect(15);
#line 1034 "cs.ATG"
eventDecl.BodyEnd = t.EndLocation;
} else SynErr(142);
#line 1035 "cs.ATG"
compilationUnit.BlockEnd();
eventDecl.AddRegion = addBlock;
eventDecl.RemoveRegion = removeBlock;
} else if (
#line 1042 "cs.ATG"
IdentAndLPar()) {
#line 1042 "cs.ATG"
m.Check(Modifier.Constructors | Modifier.StaticConstructors);
Expect(1);
#line 1043 "cs.ATG"
string name = t.val; Point startPos = t.Location;
Expect(18);
if (StartOf(9)) {
#line 1043 "cs.ATG"
m.Check(Modifier.Constructors);
FormalParameterList(
#line 1044 "cs.ATG"
out p);
}
Expect(19);
#line 1046 "cs.ATG"
ConstructorInitializer init = null;
if (la.kind == 9) {
#line 1047 "cs.ATG"
m.Check(Modifier.Constructors);
ConstructorInitializer(
#line 1048 "cs.ATG"
out init);
}
#line 1050 "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 1055 "cs.ATG"
out stmt);
} else if (la.kind == 10) {
lexer.NextToken();
} else SynErr(143);
#line 1055 "cs.ATG"
cd.Body = (BlockStatement)stmt; compilationUnit.AddChild(cd);
} else if (la.kind == 69 || la.kind == 79) {
#line 1058 "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 1062 "cs.ATG"
isImplicit = false;
}
Expect(91);
Type(
#line 1063 "cs.ATG"
out type);
#line 1063 "cs.ATG"
TypeReference operatorType = type;
Expect(18);
Type(
#line 1064 "cs.ATG"
out type);
Expect(1);
#line 1064 "cs.ATG"
string varName = t.val;
Expect(19);
if (la.kind == 14) {
Block(
#line 1064 "cs.ATG"
out stmt);
} else if (la.kind == 10) {
lexer.NextToken();
#line 1064 "cs.ATG"
stmt = null;
} else SynErr(144);
#line 1067 "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 1077 "cs.ATG"
m, attributes);
} else if (StartOf(8)) {
Type(
#line 1078 "cs.ATG"
out type);
#line 1078 "cs.ATG"
Point startPos = t.Location;
if (la.kind == 91) {
#line 1080 "cs.ATG"
Token op;
m.Check(Modifier.Operators);
if (m.isNone) Error("at least one modifier must be set");
lexer.NextToken();
OverloadableOperator(
#line 1084 "cs.ATG"
out op);
#line 1084 "cs.ATG"
TypeReference firstType, secondType = null; string secondName = null;
Expect(18);
Type(
#line 1085 "cs.ATG"
out firstType);
Expect(1);
#line 1085 "cs.ATG"
string firstName = t.val;
if (la.kind == 12) {
lexer.NextToken();
Type(
#line 1086 "cs.ATG"
out secondType);
Expect(1);
#line 1086 "cs.ATG"
secondName = t.val;
#line 1086 "cs.ATG"
if (ParserUtil.IsUnaryOperator(op) && !ParserUtil.IsBinaryOperator(op))
Error("too many operands for unary operator");
} else if (la.kind == 19) {
#line 1089 "cs.ATG"
if (ParserUtil.IsBinaryOperator(op))
Error("too few operands for binary operator");
} else SynErr(145);
Expect(19);
if (la.kind == 14) {
Block(
#line 1093 "cs.ATG"
out stmt);
} else if (la.kind == 10) {
lexer.NextToken();
} else SynErr(146);
#line 1095 "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 1108 "cs.ATG"
IsVarDecl()) {
#line 1108 "cs.ATG"
m.Check(Modifier.Fields);
FieldDeclaration fd = new FieldDeclaration(attributes, type, m.Modifier);
fd.StartLocation = startPos;
VariableDeclarator(
#line 1112 "cs.ATG"
variableDeclarators);
while (la.kind == 12) {
lexer.NextToken();
VariableDeclarator(
#line 1113 "cs.ATG"
variableDeclarators);
}
Expect(10);
#line 1114 "cs.ATG"
fd.EndLocation = t.EndLocation; fd.Fields = variableDeclarators; compilationUnit.AddChild(fd);
} else if (la.kind == 110) {
#line 1117 "cs.ATG"
m.Check(Modifier.Indexers);
lexer.NextToken();
Expect(16);
FormalParameterList(
#line 1118 "cs.ATG"
out p);
Expect(17);
#line 1118 "cs.ATG"
Point endLocation = t.EndLocation;
Expect(14);
#line 1119 "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 1126 "cs.ATG"
out getRegion, out setRegion);
Expect(15);
#line 1127 "cs.ATG"
indexer.BodyEnd = t.EndLocation;
indexer.GetRegion = getRegion;
indexer.SetRegion = setRegion;
compilationUnit.AddChild(indexer);
} else if (la.kind == 1) {
Qualident(
#line 1132 "cs.ATG"
out qualident);
#line 1132 "cs.ATG"
Point qualIdentEndLocation = t.EndLocation;
if (la.kind == 14 || la.kind == 18) {
if (la.kind == 18) {
#line 1135 "cs.ATG"
m.Check(Modifier.PropertysEventsMethods);
lexer.NextToken();
if (StartOf(9)) {
FormalParameterList(
#line 1136 "cs.ATG"
out p);
}
Expect(19);
#line 1136 "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 1145 "cs.ATG"
out stmt);
} else if (la.kind == 10) {
lexer.NextToken();
} else SynErr(147);
#line 1145 "cs.ATG"
methodDeclaration.Body = (BlockStatement)stmt;
} else {
lexer.NextToken();
#line 1148 "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 1155 "cs.ATG"
out getRegion, out setRegion);
Expect(15);
#line 1157 "cs.ATG"
pDecl.GetRegion = getRegion;
pDecl.SetRegion = setRegion;
pDecl.BodyEnd = t.EndLocation;
compilationUnit.AddChild(pDecl);
}
} else if (la.kind == 13) {
#line 1165 "cs.ATG"
m.Check(Modifier.Indexers);
lexer.NextToken();
Expect(110);
Expect(16);
FormalParameterList(
#line 1166 "cs.ATG"
out p);
Expect(17);
#line 1167 "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 1174 "cs.ATG"
Point bodyStart = t.Location;
AccessorDecls(
#line 1175 "cs.ATG"
out getRegion, out setRegion);
Expect(15);
#line 1176 "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 1203 "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 1215 "cs.ATG"
out section);
#line 1215 "cs.ATG"
attributes.Add(section);
}
if (la.kind == 88) {
lexer.NextToken();
#line 1216 "cs.ATG"
mod = Modifier.New; startLocation = t.Location;
}
if (
#line 1219 "cs.ATG"
NotVoidPointer()) {
Expect(122);
#line 1219 "cs.ATG"
if (startLocation.X == -1) startLocation = t.Location;
Expect(1);
#line 1219 "cs.ATG"
name = t.val;
Expect(18);
if (StartOf(9)) {
FormalParameterList(
#line 1220 "cs.ATG"
out parameters);
}
Expect(19);
Expect(10);
#line 1220 "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 1226 "cs.ATG"
out type);
#line 1226 "cs.ATG"
if (startLocation.X == -1) startLocation = t.Location;
if (la.kind == 1) {
lexer.NextToken();
#line 1228 "cs.ATG"
name = t.val; Point qualIdentEndLocation = t.EndLocation;
if (la.kind == 18) {
lexer.NextToken();
if (StartOf(9)) {
FormalParameterList(
#line 1231 "cs.ATG"
out parameters);
}
Expect(19);
Expect(10);
#line 1231 "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 1237 "cs.ATG"
PropertyDeclaration pd = new PropertyDeclaration(name, type, mod, attributes); compilationUnit.AddChild(pd);
lexer.NextToken();
#line 1238 "cs.ATG"
Point bodyStart = t.Location;
InterfaceAccessors(
#line 1238 "cs.ATG"
out getBlock, out setBlock);
Expect(15);
#line 1238 "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 1241 "cs.ATG"
out p);
Expect(17);
#line 1241 "cs.ATG"
Point bracketEndLocation = t.EndLocation;
#line 1241 "cs.ATG"
IndexerDeclaration id = new IndexerDeclaration(type, p, mod, attributes); compilationUnit.AddChild(id);
Expect(14);
#line 1242 "cs.ATG"
Point bodyStart = t.Location;
InterfaceAccessors(
#line 1242 "cs.ATG"
out getBlock, out setBlock);
Expect(15);
#line 1242 "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 1245 "cs.ATG"
if (startLocation.X == -1) startLocation = t.Location;
Type(
#line 1245 "cs.ATG"
out type);
Expect(1);
#line 1245 "cs.ATG"
EventDeclaration ed = new EventDeclaration(type, t.val, mod, attributes);
compilationUnit.AddChild(ed);
Expect(10);
#line 1248 "cs.ATG"
ed.StartLocation = startLocation; ed.EndLocation = t.EndLocation;
}
} else SynErr(153);
}
void EnumMemberDecl(
#line 1253 "cs.ATG"
out FieldDeclaration f) {
#line 1255 "cs.ATG"
Expression expr = null;
ArrayList attributes = new ArrayList();
AttributeSection section = null;
VariableDeclaration varDecl = null;
while (la.kind == 16) {
AttributeSection(
#line 1261 "cs.ATG"
out section);
#line 1261 "cs.ATG"
attributes.Add(section);
}
Expect(1);
#line 1262 "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 1267 "cs.ATG"
out expr);
#line 1267 "cs.ATG"
varDecl.Initializer = expr;
}
}
void SimpleType(
#line 871 "cs.ATG"
out string name) {
#line 872 "cs.ATG"
name = String.Empty;
if (StartOf(19)) {
IntegralType(
#line 874 "cs.ATG"
out name);
} else if (la.kind == 74) {
lexer.NextToken();
#line 875 "cs.ATG"
name = t.val;
} else if (la.kind == 65) {
lexer.NextToken();
#line 876 "cs.ATG"
name = t.val;
} else if (la.kind == 61) {
lexer.NextToken();
#line 877 "cs.ATG"
name = t.val;
} else if (la.kind == 51) {
lexer.NextToken();
#line 878 "cs.ATG"
name = t.val;
} else SynErr(154);
}
void NonArrayType(
#line 853 "cs.ATG"
out TypeReference type) {
#line 855 "cs.ATG"
string name = "";
int pointer = 0;
if (la.kind == 1 || la.kind == 90 || la.kind == 107) {
ClassType(
#line 859 "cs.ATG"
out name);
} else if (StartOf(14)) {
SimpleType(
#line 860 "cs.ATG"
out name);
} else if (la.kind == 122) {
lexer.NextToken();
Expect(6);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -