Я пытаюсь разбить пакет Packages.gz с использованием верхушки Ruby, и у меня возникли проблемы с выбором ключевых слов и значений однозначно. Вот моя Treetop грамматика:Использование привязки рубинового дерева для разбора debian Packages.gz
grammar Debian
rule collection
entry+
end
rule entry
(tag space value)
end
rule package_details
tag value &[^$]
end
rule tag
[A-Za-z0-9\-]+ ":"
end
rule value
(!tag value_line+ "\n")+
end
rule value_line
([A-Za-z0-9 <>@()=\.\-|/,_"':])+
end
rule space
[ \t]+
end
end
И вот мой пример ввода:
Package: acct
Priority: optional
Section: admin
Installed-Size: 352
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Mathieu Trudel <[email protected]>
Architecture: i386
Version: 6.5.4-2ubuntu1
Depends: dpkg (>= 1.15.4) | install-info, libc6 (>= 2.4)
Filename: pool/main/a/acct/acct_6.5.4-2ubuntu1_i386.deb
Size: 111226
MD5sum: 10cba1458ace8c31169c0e9e915c9a0f
SHA1: 6c2dcdc480144a9922329cd4fa22c7d1cb83fcbb
SHA256: bf8d8bb8eef3939786a1cefc39f94079f43464b71099f4a59b61b24cafdbc010
Description: The GNU Accounting utilities for process and login accounting
GNU Accounting Utilities is a set of utilities which reports and summarizes
data about user connect times and process execution statistics.
.
"Login accounting" provides summaries of system resource usage based on connect
time, and "process accounting" provides summaries based on the commands
executed on the system.
.
The 'last' command is provided by the sysvinit package and not included here.
Homepage: http://www.gnu.org/software/acct/
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu
Supported: 18m
Это работает почти 100%, но тогда он не при рассмотрении URL. Проблема заключается в том, что URL-адрес содержит «:», который, как мне кажется, не способен ломаться. Когда я редактирую запись «Домашняя страница образца» и заменяю «_» на «:», она идет прямо.
Это моя первая грамматика ПЭГ, но я могу сказать, что мне нужно сделать ее менее двусмысленной/более кратким. Оглядываясь на расширенную документацию, я хотел бы определить тег как
Но я не совсем понимаю, что он делает. Тег не должен (не иметь новой строки ИЛИ чего-либо), что я подразумеваю (либо новой строки, либо ничего). Тонкости уходят от меня ...
Переключение в этот формат поможет мне? Кто-нибудь знает, почему это не соответствует?