позволяет сказать, что у меня есть следующий EBNF:EBNF Максимальная Токен
ProductNo ::= Digitgroup "-" Lettergroup;
Digitgroup ::= Digit Digit? Digit? Digit?;
Digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
Lettergroup ::= Letter Letter? Letter? Letter? Letter?;
Letter ::= "A" | "B" | "C" | "D" | "E" | "F" | "G"
| "H" | "I" | "J" | "K" | "L" | "M" | "N"
| "O" | "P" | "Q" | "R" | "S" | "T" | "U"
| "V" | "W" | "X" | "Y" | "Z";
Теперь я хочу, чтобы установить максимум токенов для ProductNo = 5
Пример:
Input : 1-A (EBNF valid and Token < 5)
Input : 023-A (EBNF valid and Token < 5)
Input : 0231-ABI (currently EBNF valid but Token = 8 > 5 so this should not be valid)
Input : 022-ABCDE(currently EBNF valid but Token = 9 > 5 so this should not be valid)
, как вы можете см. в этом примере ввода, комбинация цифр и букв может варьироваться до тех пор, пока ее соответствие EBNF (мин. 1 цифра не более 4 цифр), (мин. 1 Letter max 5 Letter), но сумма токенов должна быть < = 5, включая го e "-".
Вопрос: Есть ли способ, кроме как писать все действующие комбинации Letter и Digit?
Мое текущее решение:
ProductNo ::= Token Token Token Token? Token?;
Token ::= Digit | Letter | "-";
Digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
Letter ::= "A" | "B" | "C" | "D" | "E" | "F" | "G"
| "H" | "I" | "J" | "K" | "L" | "M" | "N"
| "O" | "P" | "Q" | "R" | "S" | "T" | "U"
| "V" | "W" | "X" | "Y" | "Z";
Проблема: Состав ProductNo (Digitgroup, "-", Lettergroup) не воспроизводится. Поэтому мне нужно объединить два EBNF в один, но я действительно не могу понять, как это сделать.
Вы можете проверить ограничение вне грамматики: то есть, разобрать вещи, а затем проверить, если он имеет приемлемую длину. – gsg
спасибо, но мне нужно найти решение в EBNF –