parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Я бы вообще от парсеровских таблиц отказался... ибо они частный случай списка(хеша)

andylars 06.01.2016 19:40 / 16.01.2016 22:07

Поглядывая на другие языки...
парсеровские таблицы выглядят как атавизм сегодня.

А) усложняют одновременную поддержку разработчку Парсера
B) усложняют жизнь разработчику на Парсере (с постояйнной конвертацией туда-сюда в каждом подручном месте)

Парсеровский hash - перестал быть "кучей", с момента введения
порядка элементов. И теперь это фактически питоновский List (список), а точнее Dict (словарь).

Таблица это частный случай List/Dict элементами которого является одинаковые по структуре подсписки(словари), что и создает плоский массив - ("одинаковость" по структуре закрепляется tuple-ом (кортежем)

И самому универисальному словарю/списку добавить встроенных операций над ним. Минимально достаточное и удобное можно подсмотреть их того же GoLang (который говорит, что просто add/delete - маловато будет)
Вот для List из https://golang.org/pkg/container/list/

Для случая Парсера можно просто добавить атрибут(tupled/table) в конструктор для Dict/List.
Чтобы он работал как таблица.

Причем (не знаю как сейчас) - для таблиц ключ для каждой строки
не нужен, поэтому для гипотетического Parser.Dict
можно опционально не иметь имени ключа, и обращаться в таком случае только по номеру элемента.

Это даст сразу кучу возможностей:
- Унифицирует две частных случая в один =>
Не надо будет делать конвератции туда-сюда.
Один класс и его методы по манипуляции с этой структурой.
- Поля таблицы могут заиметь тип(!) отличный от string (По желанию)

Представим гипотетический код Parser4:
# Назовём - List, потому что короче...

$mytable[
   ^List::create[
        $.nick[
           $.class[string]
           $.default[noname]
        ]
        $.reg_date[
          $.class[date]
          $.default{^date::now[]}
        ]

        $.avatar[
          $.class[file]
        ]
    ][$.tupled(true) $.key[nameless]]
]

Получаем таблицу вида

(n)    nick    reg_date   avatar
 0     Ivan    <2015..>   <profile.jpg>
 1     Peter   <2016..>   <profile2.jpg>
$.tupled(true) просто не дает нам на ходу ломать кортеж и
вставлять значения не сооветствующих классов.

Сейчас таблицы в Парсере это фактически:
Список кортежей с nameless-ключом для строк и классом string
в полях.

  • ^string.replace[$hash], G_Z [M] 04.01.2016 05:11
    • Я бы вообще от парсеровских таблиц отказался... ибо они частный случай списка(хеша), andylars 06.01.2016 19:40 / 16.01.2016 22:07