Невероятные серии цифр или букв как один лист?

Так что я возился с instaparse, и это было здорово, однако я старался избегать использования регулярных выражений в качестве опоры, и это привело к более многословному. Ради сохранения читабельности давайте просто скажем #'[A-z]' на самом деле в 'A'|'B'|etc формат.

(def myprsr (instaparse.core/parser 
  "word = (ltr | num)+; 
   <ltr> = #'[A-z]';
   <num> = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';"))
(myprs"foo123") ;; -> [:word "f" "o" "o" "1" "2" "3"]

Есть ли способ, не прибегая к #'[A-z]+' а также #'[0-9]+ чтобы получить листья как [:word "foo123"] или же [:number "123"] (если бы я создал правило для нескольких уровней), чтобы избежать необходимости объединять их как часть обработки после анализа?

1 ответ

Решение

В настоящее время нет способа (кроме регулярных выражений) автоматически объединять эти строки во время анализа. Я бы порекомендовал сделать это объединение в insta/transform карта.

Также нет ничего плохого в использовании регулярных выражений в таком простом случае. Мы знаем, что нет возможного анализа, который мы пропускаем, жадно разбирая все буквы или все числа. Поэтому регулярные выражения приемлемы (и более производительны).

Другие вопросы по тегам