Irony .NET을 사용하여 합리적으로 복잡한 주사위 롤링 지침을 처리 할 수있는 간단한 DSL을 만들려고합니다. 기본 계산기 기능은 구현하기에 충분히 간단했습니다 (더하기, 빼기 등). 그러나 마침내 롤 표현을 추가 할 시점에 도달했을 때 문제가 발생했습니다. 이상적으로, 다음과 같은 형식의 롤 표현식을 사용합니다. ndm 여기서 n은 롤 할 다이의 수이고, m은 각 다이의면 수입니다.Irony .NET - 연산자로 사용하는 문자
여기 내 문제는 내가 d의 옆에 표현을 원한다는 것입니다. 제가 이것을하면 아이러니가 d가 유효하지 않은 문자라고 불평합니다. 주변 공간이 일 (1 일 6 일), 영숫자가 아닌 문자로 교체 (1 % 6). 현재 나는 소스의 각 d를 "d"로 바꾸는 것으로 간단하게 작업하지만, 변수를 얻을 때 분명히 작동하지 않을 것입니다. (변수를 설정하기 위해 '$'로 시작합니다).
질문 : 공간 (1d6)없이 작업을 수행하려면 어떻게해야합니까? 문법이 크게 변경되지 않는 것이 좋습니다. (참고 : 그것은 여전히 공백으로 작동하는지 완벽하게 괜찮아, 난 그냥이 필요하지 않습니다.)
expression = new NonTerminal("expression");
add = new NonTerminal("add");
subtract = new NonTerminal("subtract");
multiply = new NonTerminal("multiply");
divide = new NonTerminal("divide");
roll = new NonTerminal("roll");
expression.Rule = number | add | subtract | multiply | divide | roll;
add.Rule = expression + "+" + expression;
subtract.Rule = expression + "-" + expression;
multiply.Rule = expression + "*" + expression;
divide.Rule = expression + "/" + expression;
roll.Rule = expression + "d" + expression;
RegisterOperators(1, "+", "-");
RegisterOperators(2, "*", "/");
RegisterOperators(3, "d");
MarkPunctuation("+", "-", "*", "/", "d");
MarkTransient(expression);
this.Root = expression;