ТАК Я работаю над переписыванием грамматик в другие формы той же грамматики и использую функцию grammar2rascal (g), однако она выдает (на мой взгляд) странный результат при попытке переписать ограничения следования / предшествования. Мне было интересно, может ли кто-нибудь объяснить мне, что это значит и почему негодяй так работает. Я предполагаю, что негодяй внутренне переписывает некоторые вещи и поэтому придумывает это, однако я все еще хотел бы понять его значение и использование.
Итак, вот так:
lexical Id = "a" !<< [a-z]+ !>> "b";
становится:
lex("Id"){prod(lex("Id"),[conditional(iter(\char-class([range(97,122)])),{\not-follow(lit("b")),\not-precede(lit("a"))})],{})}
, который выглядит хорошо, но записывается как:
lexical Id = [a-z]+ !>> "b" !<< [a-z]+ !>> "b";
Это полностью удаляет не предшествующую "a" часть правила. Так я что-то упустил или это какая-то ошибка?