Информация об изменениях

Сообщение Re[2]: контекстно-свободная самоописывающаяся грамматика от 09.03.2017 21:53

Изменено 10.03.2017 4:25 Arsen.Shnurkov

Re[2]: контекстно-свободная самоописывающаяся грамматика
К> нарушение приоритета.

исправил (в исходном сообщении).

К>Нет красивого способа задавать "не менее N повторений"


кажется, поправил.

К>
К>(*4*) исключение = выражение , гм , "-" , гм , выражение ;
К>

К>Плохая семантика, negative lookahead в общем случае.

Чем она плохая? регэкспы же:
http://www.regular-expressions.info/lookaround.html

К> На ровном месте получаем из контекстно-свободной грамматики контекстно-зависимую.


Это специально. я хочу примерно как тут — http://stackoverflow.com/questions/406230/regular-expression-to-match-a-line-that-doesnt-contain-a-word

Мне нужна возможность записывать штуки типа

некий фрагмент = произвольный текст - многосимвольный маркер окончания фрагмента ;


К>Хотя подразумевалась чисто регулярная фишка — классы символов.


в этой грамматике действительно окончание комментария вида "*)" может быть записано классами символов, да.
А вообще, чем длинее маркер, тем тяжелее писать формулу.

К>Пример:

К>
К>привет      = "п" , "р" , "и" , "в" , "е" , "т" ;
К>мир         = "м" , "и" , "р" ;
К>любое слово =  буква { буква } ;
К>


запятая пропущена перед фигурной скобкой.

К>
К>любые слова = любое слово , { обм , любое слово } ;

К>привет но не мир = ( привет , обм , любые слова ) - ( любые слова , обм , мир ) ;
К>


И ? АА-А-А-А-а-а-а-а! Делать-то что, что делать?

Ещё есть засада в том, что буква с ударением — это не один символ, а двусимвольная строка из основного символа и модификатора.
Re[2]: контекстно-свободная самоописывающаяся грамматика
К> нарушение приоритета.

исправил (в исходном сообщении).

К>Нет красивого способа задавать "не менее N повторений"


кажется, поправил.

К>
К>(*4*) исключение = выражение , гм , "-" , гм , выражение ;
К>

К>Плохая семантика, negative lookahead в общем случае.

Чем она плохая? регэкспы же:
http://www.regular-expressions.info/lookaround.html

К> На ровном месте получаем из контекстно-свободной грамматики контекстно-зависимую.


Это специально. я хочу примерно как тут — http://stackoverflow.com/questions/406230/regular-expression-to-match-a-line-that-doesnt-contain-a-word

Мне нужна возможность записывать штуки типа

некий фрагмент = произвольный текст - многосимвольный маркер окончания фрагмента ;


яббы даже ссказал:
строковая константа = начало строковой константы, тело строковой константы , конец строковой константы ;
начало строковой константы = двойная кавычка ;
тело строковой константы = ( символ в строке, { символ в строке } ) - конец строковой константы ;
  (* тело строковой константы не должно содержать "конец строковой константы" *)
символ в строке = .  ;
конец строковой константы = двойная кавычка ;

комментарий = [ тп ] , начало комментария, { символ в комментарии } , конец комментария ;
начало комментария = "#" ;
символ в комментарии = . - ( перевод строки | возврат каретки ) ;
  (* бекслеши в комментариях не обрабатываются *)
конец комментария = ; (* пустые правила элиминируются при анализе грамматики *)

(* далее определения пробелов определены таким образом, 
чтобы перенос строки (бекслеш перед концом строки) превращался в пробел *)

ябм = тп | новая строка | бэкслеш , новая строка ;
бэкслеш = "\" ;


К>Хотя подразумевалась чисто регулярная фишка — классы символов.


в этой грамматике действительно окончание комментария вида "*)" может быть записано классами символов, да.
А вообще, чем длинее маркер, тем тяжелее писать формулу.

К>Пример:

К>
К>привет      = "п" , "р" , "и" , "в" , "е" , "т" ;
К>мир         = "м" , "и" , "р" ;
К>любое слово =  буква { буква } ;
К>


запятая пропущена перед фигурной скобкой.

К>
К>любые слова = любое слово , { обм , любое слово } ;

К>привет но не мир = ( привет , обм , любые слова ) - ( любые слова , обм , мир ) ;
К>


И ? АА-А-А-А-а-а-а-а! Делать-то что, что делать?

Ещё есть засада в том, что буква с ударением — это не один символ, а двусимвольная строка из основного символа и модификатора.