本文整理汇总了C#中Irony.Parsing.NonTerminal.ReduceIf方法的典型用法代码示例。如果您正苦于以下问题:C# NonTerminal.ReduceIf方法的具体用法?C# NonTerminal.ReduceIf怎么用?C# NonTerminal.ReduceIf使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Irony.Parsing.NonTerminal
的用法示例。
在下文中一共展示了NonTerminal.ReduceIf方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ConflictResolutionTestGrammar4
public ConflictResolutionTestGrammar4()
: base(true)
{
var name = new IdentifierTerminal("id");
var stmt = new NonTerminal("Statement");
var stmtList = new NonTerminal("StatementList");
var fieldModifier = new NonTerminal("fieldModifier");
var propModifier = new NonTerminal("propModifier");
var methodModifier = new NonTerminal("methodModifier");
var fieldModifierList = new NonTerminal("fieldModifierList");
var propModifierList = new NonTerminal("propModifierList");
var methodModifierList = new NonTerminal("methodModifierList");
var fieldDef = new NonTerminal("fieldDef");
var propDef = new NonTerminal("propDef");
var methodDef = new NonTerminal("methodDef");
//Rules
this.Root = stmtList;
stmtList.Rule = MakePlusRule(stmtList, stmt);
stmt.Rule = fieldDef | propDef | methodDef;
fieldDef.Rule = fieldModifierList + name + name + ";";
propDef.Rule = propModifierList + name + name + "{" + "}";
methodDef.Rule = methodModifierList + name + name + "(" + ")" + "{" + "}";
fieldModifierList.Rule = MakeStarRule(fieldModifierList, fieldModifier);
propModifierList.Rule = MakeStarRule(propModifierList, propModifier);
methodModifierList.Rule = MakeStarRule(methodModifierList, methodModifier);
// That's the key of the problem: 3 modifiers have common members
// so parser automaton has hard time deciding which modifiers list to produce -
// is it a field, prop or method we are beginning to parse?
fieldModifier.Rule = ToTerm("public") | "private" | "readonly" | "volatile";
propModifier.Rule = ToTerm("public") | "private" | "readonly" | "override";
methodModifier.Rule = ToTerm("public") | "private" | "override";
// conflict resolution
fieldModifier.ReduceIf(thisSymbol: ";", comesBefore: new string[] { "(", "{"});
propModifier.ReduceIf(thisSymbol: "{", comesBefore: new string[] { ";", "(" });
fieldModifierList.ReduceIf(thisSymbol: ";", comesBefore: new string[] { "(", "{" });
propModifierList.ReduceIf(thisSymbol: "{", comesBefore: new string[] { ";", "(" });
MarkReservedWords("public", "private", "readonly", "volatile", "override");
}
示例2: CicodeGrammar
//.........这里部分代码省略.........
arrayDeclaration.Rule
= variableScope + variableType + identifier + arrayIndexDeclarations
| variableScope + variableType + identifier + arrayIndexDeclarations + assignmentOperator + arrayInitializers;
arrayIndexDeclarations.Rule
= arrayIndexDeclarations + arrayIndexDeclaration
| arrayIndexDeclaration
;
arrayIndexers.Rule
= arrayIndexers + arrayIndexer
| arrayIndexer
;
arrayIdentifier.Rule = identifier + arrayIndexers;
arrayIndexer.Rule = "[" + expression + "]";
arrayIndexDeclaration.Rule = "[" + numberLiteral + "]";
variable.Rule
= identifier
| identifier + arrayIndexers
;
variableType.Rule
= ToTerm("INT")
| ToTerm("STRING")
| ToTerm("REAL")
| ToTerm("OBJECT")
| ToTerm("QUALITY")
| ToTerm("TIMESTAMP")
;
variableScope.Rule
= Empty
| ToTerm("GLOBAL")
| ToTerm("MODULE")
;
parameterInitializer.Rule = Empty | assignmentOperator + constantExpression;
parameter.Rule = variableType + identifier + parameterInitializer;
parameters.Rule
= parameters + "," + parameter
| parameter;
parenParameters.Rule
= ToTerm("(") + ")"
| "(" + parameters + ")";
statements.Rule = MakeStarRule(statements, statement);
statement.Rule
= semiStatement
| ifStatement
| selectStatement
| whileDoStatement
| forStatement
;
functionCallStatement.Rule = functionCall + semi;
returnStatement.Rule = ToTerm("RETURN") + optionalExpression + semi;
semiStatement.Rule
= assignmentStatement
| returnStatement
| functionCallStatement
;
block.Rule
= blockContent + "END";
blockContent.Rule
= blockDeclarations + statements
;
blockDeclarations.Rule = MakeStarRule(blockDeclarations, blockDeclaration);
blockDeclaration.Rule
= localVariableDeclaration;
functionScope.Rule
= ToTerm("PUBLIC") | "PRIVATE" | Empty;
// These reduce hints are needed to help determine the difference between
// a function declaration and a variable declaration.
functionScope.ReduceIf("FUNCTION");
variableScope.ReduceIf(semi);
functionReturnType.Rule = variableType | Empty;
declaration.Rule
= functionDeclaration
| variableDeclaration
;
functionDeclaration.Rule = functionScope + functionReturnType + "FUNCTION" + identifier + parenParameters + block;
MarkTransient(semiStatement, blockDeclaration);
}