2013-10-02 4 views
2

매우 기본적인 명령 줄 구문 분석기를 만들려고합니다. , 이것은 전체 명령에 대한 단일 인수를 허용Irony.NET에서 반복을 허용하는 방법

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; 
    } 
} 

: 나는 그런 기본적인 문법 클래스와이를 구현하기 위해 노력했습니다

command @arg1 value1 @arg2 value2 

:

예를 들어,이 명령을 가질 수있다 그러나 나는 무한한 주장을지지하는 방법을 알 수 없다.

어떻게하면됩니까?

미리 감사드립니다. 그것은 Grammar.MakePlusRule(...) 방법을 사용하여 관하여

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, "@"); 

:

답변

1

이 솔루션입니다!