当前位置: 首页>>代码示例>>C#>>正文


C# NonTerminal.ReduceIf方法代码示例

本文整理汇总了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");
        }
开发者ID:MarcusTheBold,项目名称:Irony,代码行数:43,代码来源:ConflictResolutionTestGrammar4.cs

示例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);
        }
开发者ID:mayurshkl,项目名称:NCicode,代码行数:101,代码来源:CicodeGrammar.cs


注:本文中的Irony.Parsing.NonTerminal.ReduceIf方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。