首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Irony.NET中允许重复

如何在Irony.NET中允许重复
EN

Stack Overflow用户
提问于 2013-10-02 20:33:59
回答 1查看 867关注 0票数 2

我正在尝试创建一个非常基本的命令行解析器。

例如,我可以使用以下命令:

代码语言:javascript
复制
command @arg1 value1 @arg2 value2

我尝试用这样的基本语法类来实现这一点:

代码语言:javascript
复制
public class CmdGrammar : Grammar
{
    public CmdGrammar()
        : base(caseSensitive: true)
    {
        var program = new NonTerminal("program");
        var command = new IdentifierTerminal("commandName");
        var argumentName = new IdentifierTerminal("argumentName");
        var argumentValue = new IdentifierTerminal("argumentValue");

        Root = program;

        argumentName.AddPrefix("@", IdOptions.NameIncludesPrefix);

        program.Rule = command + argumentName + argumentValue;
    }
}

这允许为整个命令设置一个参数,但我不知道如何支持无限参数。

我怎样才能做到这一点?

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-02 21:17:55

这就是解决办法:

代码语言:javascript
复制
    var program = new NonTerminal("program");
    var command = new IdentifierTerminal("commandName");

    var argumentList = new NonTerminal("argumentList");
    var argument = new NonTerminal("argument");
    var argumentName = new IdentifierTerminal("argumentName");
    var argumentValue = new IdentifierTerminal("argumentValue");

    Root = program;

    program.Rule = command + argumentList;

    argumentList.Rule = MakePlusRule(argumentList, null, argument);

    argumentName.AddPrefix("@", IdOptions.NameIncludesPrefix);
    argument.Rule = argumentName + argumentValue;

    RegisterOperators(0, Associativity.Left, "@");

它是关于使用Grammar.MakePlusRule(...)方法!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19146341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档