Я пытаюсь сделать контекстно-свободную грамматику для представления простых регулярных выражений. Символы, которые мне нужны, это [0-9] [a-z] [A-Z], а операторы - «|», «()» и «.». «?» Для конкатенации, и для последовательностей для теперь я только хочу «*» позже я добавлю «+», и т.д. Я попробовал эту грамматику в JavaCC:Context-free-grammar для представления регулярных выражений
void RE(): {}
{
FINAL(0) ("." FINAL(0) | "|" FINAL(0))*
}
void FINAL(int sign): { Token t; }
{
t = <SYMBOL> {
if (sign == 1)
jjtThis.val = t.image + "*";
else
jjtThis.val = t.image;
}
| FINAL(1) "*"
| "(" RE() ")"
}
Проблема в FINAL функции линии | FINAL(1) "*"
, который дает мне ошибку Left recursion detected: "FINAL... --> FINAL...
. Помещение «*» слева от FINAL (1) разрешает проблему, но это не то, что я хочу.
Я уже пытался прочитать статью из Википедии, чтобы удалить левую рекурсию, но я действительно не знаю, как сделайте это, может кто-то поможет? : S
Вы пытаетесь сделать грамматику для регулярных выражений или соответствуют тому же языку, что и заданное регулярное выражение? то, что вы просите, не совсем понятно. Попробуйте предоставить некоторые примеры слов на языке, а не на языке – bengoesboom
Я пытаюсь сделать грамматику для регулярных выражений, но очень простой. Некоторые примеры слов, которые я хочу принять: '(a * | b) .c, c | a, a.c *, 1 | 2, 1.3 и т. Д. Слова, которые я не хочу принимать, - это любой, который не соблюдает правильный формат, например: 'a ** b, a || b, a..b, a ((b) и т. Д. – pedroh
Возможный дубликат [Context- (http://stackoverflow.com/questions/977884/context-free-grammar-describing-regular-expressions) – Kevin