?? parser.cs
字號:
#line 656 "cs.ATG"
Point startPos = t.Location;
Qualident(
#line 657 "cs.ATG"
out qualident);
if (la.kind == 3) {
lexer.NextToken();
NonArrayType(
#line 658 "cs.ATG"
out aliasedType);
}
Expect(11);
#line 660 "cs.ATG"
if (qualident != null && qualident.Length > 0) {
INode node;
if (aliasedType != null) {
node = new UsingDeclaration(qualident, aliasedType);
} else {
node = new UsingDeclaration(qualident);
}
node.StartLocation = startPos;
node.EndLocation = t.EndLocation;
compilationUnit.AddChild(node);
}
}
void GlobalAttributeSection() {
Expect(18);
#line 676 "cs.ATG"
Point startPos = t.Location;
Expect(1);
#line 677 "cs.ATG"
if (t.val != "assembly") Error("global attribute target specifier (\"assembly\") expected");
string attributeTarget = t.val;
List<ASTAttribute> attributes = new List<ASTAttribute>();
ASTAttribute attribute;
Expect(9);
Attribute(
#line 682 "cs.ATG"
out attribute);
#line 682 "cs.ATG"
attributes.Add(attribute);
while (
#line 683 "cs.ATG"
NotFinalComma()) {
Expect(14);
Attribute(
#line 683 "cs.ATG"
out attribute);
#line 683 "cs.ATG"
attributes.Add(attribute);
}
if (la.kind == 14) {
lexer.NextToken();
}
Expect(19);
#line 685 "cs.ATG"
AttributeSection section = new AttributeSection(attributeTarget, attributes);
section.StartLocation = startPos;
section.EndLocation = t.EndLocation;
compilationUnit.AddChild(section);
}
void NamespaceMemberDecl() {
#line 776 "cs.ATG"
AttributeSection section;
List<AttributeSection> attributes = new List<AttributeSection>();
Modifiers m = new Modifiers();
string qualident;
if (la.kind == 87) {
lexer.NextToken();
#line 782 "cs.ATG"
Point startPos = t.Location;
Qualident(
#line 783 "cs.ATG"
out qualident);
#line 783 "cs.ATG"
INode node = new NamespaceDeclaration(qualident);
node.StartLocation = startPos;
compilationUnit.AddChild(node);
compilationUnit.BlockStart(node);
Expect(16);
while (la.kind == 120) {
UsingDirective();
}
while (StartOf(1)) {
NamespaceMemberDecl();
}
Expect(17);
if (la.kind == 11) {
lexer.NextToken();
}
#line 792 "cs.ATG"
node.EndLocation = t.EndLocation;
compilationUnit.BlockEnd();
} else if (StartOf(2)) {
while (la.kind == 18) {
AttributeSection(
#line 796 "cs.ATG"
out section);
#line 796 "cs.ATG"
attributes.Add(section);
}
while (StartOf(3)) {
TypeModifier(
#line 797 "cs.ATG"
m);
}
TypeDecl(
#line 798 "cs.ATG"
m, attributes);
} else SynErr(126);
}
void Qualident(
#line 920 "cs.ATG"
out string qualident) {
Expect(1);
#line 922 "cs.ATG"
qualidentBuilder.Length = 0; qualidentBuilder.Append(t.val);
while (
#line 923 "cs.ATG"
DotAndIdent()) {
Expect(15);
Expect(1);
#line 923 "cs.ATG"
qualidentBuilder.Append('.');
qualidentBuilder.Append(t.val);
}
#line 926 "cs.ATG"
qualident = qualidentBuilder.ToString();
}
void NonArrayType(
#line 1035 "cs.ATG"
out TypeReference type) {
#line 1037 "cs.ATG"
string name;
int pointer = 0;
type = null;
if (la.kind == 1 || la.kind == 90 || la.kind == 107) {
ClassType(
#line 1042 "cs.ATG"
out type, false);
} else if (StartOf(4)) {
SimpleType(
#line 1043 "cs.ATG"
out name);
#line 1043 "cs.ATG"
type = new TypeReference(name);
} else if (la.kind == 122) {
lexer.NextToken();
Expect(6);
#line 1044 "cs.ATG"
pointer = 1; type = new TypeReference("void");
} else SynErr(127);
if (la.kind == 12) {
NullableQuestionMark(
#line 1047 "cs.ATG"
ref type);
}
while (
#line 1049 "cs.ATG"
IsPointer()) {
Expect(6);
#line 1050 "cs.ATG"
++pointer;
}
#line 1052 "cs.ATG"
if (type != null) { type.PointerNestingLevel = pointer; }
}
void Attribute(
#line 692 "cs.ATG"
out ASTAttribute attribute) {
#line 693 "cs.ATG"
string qualident;
string alias = null;
if (
#line 697 "cs.ATG"
la.kind == Tokens.Identifier && Peek(1).kind == Tokens.DoubleColon) {
lexer.NextToken();
#line 698 "cs.ATG"
alias = t.val;
Expect(10);
}
Qualident(
#line 701 "cs.ATG"
out qualident);
#line 702 "cs.ATG"
List<Expression> positional = new List<Expression>();
List<NamedArgumentExpression> named = new List<NamedArgumentExpression>();
string name = (alias != null && alias != "global") ? alias + "." + qualident : qualident;
if (la.kind == 20) {
AttributeArguments(
#line 706 "cs.ATG"
positional, named);
}
#line 706 "cs.ATG"
attribute = new ICSharpCode.NRefactory.Parser.AST.Attribute(name, positional, named);
}
void AttributeArguments(
#line 709 "cs.ATG"
List<Expression> positional, List<NamedArgumentExpression> named) {
#line 711 "cs.ATG"
bool nameFound = false;
string name = "";
Expression expr;
Expect(20);
if (StartOf(5)) {
if (
#line 719 "cs.ATG"
IsAssignment()) {
#line 719 "cs.ATG"
nameFound = true;
lexer.NextToken();
#line 720 "cs.ATG"
name = t.val;
Expect(3);
}
Expr(
#line 722 "cs.ATG"
out expr);
#line 722 "cs.ATG"
if (expr != null) {if(name == "") positional.Add(expr);
else { named.Add(new NamedArgumentExpression(name, expr)); name = ""; }
}
while (la.kind == 14) {
lexer.NextToken();
if (
#line 730 "cs.ATG"
IsAssignment()) {
#line 730 "cs.ATG"
nameFound = true;
Expect(1);
#line 731 "cs.ATG"
name = t.val;
Expect(3);
} else if (StartOf(5)) {
#line 733 "cs.ATG"
if (nameFound) Error("no positional argument after named argument");
} else SynErr(128);
Expr(
#line 734 "cs.ATG"
out expr);
#line 734 "cs.ATG"
if (expr != null) { if(name == "") positional.Add(expr);
else { named.Add(new NamedArgumentExpression(name, expr)); name = ""; }
}
}
}
Expect(21);
}
void Expr(
#line 2071 "cs.ATG"
out Expression expr) {
#line 2072 "cs.ATG"
expr = null; Expression expr1 = null, expr2 = null; AssignmentOperatorType op;
UnaryExpr(
#line 2074 "cs.ATG"
out expr);
if (StartOf(6)) {
AssignmentOperator(
#line 2077 "cs.ATG"
out op);
Expr(
#line 2077 "cs.ATG"
out expr1);
#line 2077 "cs.ATG"
expr = new AssignmentExpression(expr, op, expr1);
} else if (
#line 2078 "cs.ATG"
la.kind == Tokens.GreaterThan && Peek(1).kind == Tokens.GreaterEqual) {
AssignmentOperator(
#line 2079 "cs.ATG"
out op);
Expr(
#line 2079 "cs.ATG"
out expr1);
#line 2079 "cs.ATG"
expr = new AssignmentExpression(expr, op, expr1);
} else if (StartOf(7)) {
ConditionalOrExpr(
#line 2081 "cs.ATG"
ref expr);
if (la.kind == 13) {
lexer.NextToken();
Expr(
#line 2082 "cs.ATG"
out expr1);
#line 2082 "cs.ATG"
expr = new BinaryOperatorExpression(expr, BinaryOperatorType.NullCoalescing, expr1);
}
if (la.kind == 12) {
lexer.NextToken();
Expr(
#line 2083 "cs.ATG"
out expr1);
Expect(9);
Expr(
#line 2083 "cs.ATG"
out expr2);
#line 2083 "cs.ATG"
expr = new ConditionalExpression(expr, expr1, expr2);
}
} else SynErr(129);
}
void AttributeSection(
#line 743 "cs.ATG"
out AttributeSection section) {
#line 745 "cs.ATG"
string attributeTarget = "";
List<ASTAttribute> attributes = new List<ASTAttribute>();
ASTAttribute attribute;
Expect(18);
#line 751 "cs.ATG"
Point startPos = t.Location;
if (
#line 752 "cs.ATG"
IsLocalAttrTarget()) {
if (la.kind == 68) {
lexer.NextToken();
#line 753 "cs.ATG"
attributeTarget = "event";
} else if (la.kind == 100) {
lexer.NextToken();
#line 754 "cs.ATG"
attributeTarget = "return";
} else {
lexer.NextToken();
#line 755 "cs.ATG"
if (t.val != "field" || t.val != "method" ||
t.val != "module" || t.val != "param" ||
t.val != "property" || t.val != "type")
Error("attribute target specifier (event, return, field," +
"method, module, param, property, or type) expected");
attributeTarget = t.val;
}
Expect(9);
}
Attribute(
#line 765 "cs.ATG"
out attribute);
#line 765 "cs.ATG"
attributes.Add(attribute);
while (
#line 766 "cs.ATG"
NotFinalComma()) {
Expect(14);
Attribute(
#line 766 "cs.ATG"
out attribute);
#line 766 "cs.ATG"
attributes.Add(attribute);
}
if (la.kind == 14) {
lexer.NextToken();
}
Expect(19);
#line 768 "cs.ATG"
section = new AttributeSection(attributeTarget, attributes);
section.StartLocation = startPos;
section.EndLocation = t.EndLocation;
}
void TypeModifier(
#line 1122 "cs.ATG"
Modifiers m) {
switch (la.kind) {
case 88: {
lexer.NextToken();
#line 1124 "cs.ATG"
m.Add(Modifier.New, t.Location);
break;
}
case 97: {
lexer.NextToken();
#line 1125 "cs.ATG"
m.Add(Modifier.Public, t.Location);
break;
}
case 96: {
lexer.NextToken();
#line 1126 "cs.ATG"
m.Add(Modifier.Protected, t.Location);
break;
}
case 83: {
lexer.NextToken();
#line 1127 "cs.ATG"
m.Add(Modifier.Internal, t.Location);
break;
}
case 95: {
lexer.NextToken();
#line 1128 "cs.ATG"
m.Add(Modifier.Private, t.Location);
break;
}
case 118: {
lexer.NextToken();
#line 1129 "cs.ATG"
m.Add(Modifier.Unsafe, t.Location);
break;
}
case 48: {
lexer.NextToken();
#line 1130 "cs.ATG"
m.Add(Modifier.Abstract, t.Location);
break;
}
case 102: {
lexer.NextToken();
#line 1131 "cs.ATG"
m.Add(Modifier.Sealed, t.Location);
break;
}
case 106: {
lexer.NextToken();
#line 1132 "cs.ATG"
m.Add(Modifier.Static, t.Location);
break;
}
case 1: {
lexer.NextToken();
#line 1133 "cs.ATG"
if (t.val == "partial") { m.Add(Modifier.Partial, t.Location); } else { Error("Unexpected identifier"); }
break;
}
default: SynErr(130); break;
}
}
void TypeDecl(
#line 801 "cs.ATG"
Modifiers m, List<AttributeSection> attributes) {
#line 803 "cs.ATG"
TypeReference type;
List<TypeReference> names;
List<ParameterDeclarationExpression> p = new List<ParameterDeclarationExpression>();
string name;
List<TemplateDefinition> templates;
if (la.kind == 58) {
#line 809 "cs.ATG"
m.Check(Modifier.Classes);
lexer.NextToken();
#line 810 "cs.ATG"
TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
templates = newType.Templates;
compilationUnit.AddChild(newType);
compilationUnit.BlockStart(newType);
newType.StartLocation = m.GetDeclarationLocation(t.Location);
newType.Type = Types.Class;
Expect(1);
#line 818 "cs.ATG"
newType.Name = t.val;
if (la.kind == 23) {
TypeParameterList(
#line 821 "cs.ATG"
templates);
}
if (la.kind == 9) {
ClassBase(
#line 823 "cs.ATG"
out names);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -