hirthwork
13.11.2012 22:22 mcabber
пстач, допустим есть код на рагеле, который парсит упрощённые хосты с userinfo и портами:
port = (":" . digit*) $add_port_char %print_port %lerr(clear_port);
userinfo = (alnum | ":")+;
name = alnum+;
host = ((userinfo "@")? . name) $add_host_char %print_host;
main := host . port?;
очевидно, что при разборе строки myhost:80 будет неясно к чему относится двоеточие. к началу порта или же к середине userinfo
как результат — символ будет положен в буфер и для того и для другого, что печально.
внимание, вопрос: по каким ключевым словам курить документацию по рагелю, чтобы зделоть красиво и чотко?
З.Ы. Зачем нужно %lerr(clear_port)? Затем, чтобы очистить то что накопится в буфере для порта при разборе первой половины строки «my:12info@host:42»
Прошу прощения за тупой вопрос, но не получится ли отслеживать количество этих двоеточий? Если одно, то, скорее всего, мы хотим указать порт. Или бывает иначе?
1. нет, потому что слева от собаки может быть любое количество двоеточий; 2. нет, потому что нужна поточная обработка