|
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
|
|||||||||||||||||||||
1C 8.x Парсер в 1С. Глава 1. Критикуйте22.11.2014, 21:23. Показов 12207. Ответов 59
Метки нет (Все метки)
У каждого действия которое мы делаем – есть мотивация. Мотивацией для этой статьи было желание увидеть продолжение статьи http://infostart.ru/public/239061/. Продал год, подвижек нет, вспомнил вечное «Хочешь сделать хорошо – сделай это сам». Как и предыдущий докладчик я пообещаю вам что к концу этой статьи вы сможете написать свой парсер текста запроса. Тем более ничего сложного в этом нет.
Если вы уже читали «Yacc is dead» (http://arxiv.org/abs/1010.5023) то можете не читать дальше, перейти к комментам, написать кг/ам и перейти к следующей публикации. Для всех остальных – в первой части статьи - небольшой экскурс в теорию. Что такое парсер в контексте «Matching with derivatives»? Как и на любой другой вопрос в computer since – правильный ответ – функция. Но не любая, а удовлетворяющая следующим условиям 1. Функция разбора пустой строки всегда возвращает истину 2. Функция принимает 2 аргумента – символ для проверки и строку 3. В случае если первый символ в строке для разбора совпадает с символолм для проверки, то функция возвращает остаток строки, исключив первый символ 4. Если 1 символ не совпадает с символом для проверки, то функция возвращает входящую строку Рассмотрим примитивный парсер, разбирающий строку «а»
Нет ничего проще
L -> «мама» | «папа». Простой вариант решения –
Но, как быть, если наша грамматика будет представлена в виде L-> («м»| «п») «а» («м»| «п») «а» Можно попытаться описать функцию разбора так
1
|
|||||||||||||||||||||
| 22.11.2014, 21:23 | |
|
Ответы с готовыми решениями:
59
Парсер в 1С. Глава 2. Критикуйте критикуйте мой сайт Оцените сбору, критикуйте, предлагайте |
|
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
|
|
| 01.12.2014, 17:46 [ТС] | |
|
что он из себя представляет сам знаю
как никак 6 лет за клюшками просидел. Собирать грамматику просто лень
0
|
|
|
0 / 0 / 0
Регистрация: 25.11.2014
Сообщений: 11
|
|
| 02.12.2014, 10:55 | |
|
Проверки принадлежности символа набору символов нет.
0
|
|
|
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
|
|
| 02.12.2014, 10:59 [ТС] | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 25.11.2014
Сообщений: 11
|
|
| 02.12.2014, 11:16 | |
|
{Id Ch Standard} = {Alphanumeric} + [_]
{Id Ch Extended} = {Printable} - ['['] - [']'] Id = ({Letter}{Id Ch Standard}* | '['{Id Ch Extended}+']') ('.'({Letter}{Id Ch Standard}* | '['{Id Ch Extended}+']'))? {Id Ch Standard} - получается не диапазон символов, а набор. Добавлено через 4 минуты Форматирование меняется в статье. То блоки строк разделяются пустыми строками, то нет. Лучше разделять. Сплошной текст читать можно но не комфортно. Субъективно конечно.
0
|
|
|
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
|
|
| 02.12.2014, 11:24 [ТС] | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 25.11.2014
Сообщений: 11
|
|
| 02.12.2014, 11:43 | |
|
ОперацияВыбор подходит для проверки вхождения символа в набор.
0
|
|
|
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
|
||||||||||||||||
| 02.12.2014, 11:52 [ТС] | ||||||||||||||||
|
Подходит, но будет медленно. Более правильно оформить парсер отдельно.
Так будет работать быстрее нежели
1
|
||||||||||||||||
|
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
|
|
| 03.12.2014, 13:51 [ТС] | |
|
http://infostart.ru/public/316338/ начало
Следующая часть уже в новом году. Подумал над предложением akabrr - парситься будет текст запроса для 7.7 - это и логичней, и проще
0
|
|
|
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
|
|
| 03.12.2014, 21:04 [ТС] | |
|
Зато простой язык и сразу понятно как со всем этим работать
0
|
|
|
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
|
|
| 18.12.2014, 22:49 [ТС] | |
|
начало второй части - https://github.com/wwall/report-1.git
если не используете git то link на zip - https://github.com/wwall/repor... master.zip Как и прежде - нужны отзывы, поиск неточностей и нелогичностей. Рекомендации по стилю.
1
|
|
|
0 / 0 / 0
Регистрация: 25.11.2014
Сообщений: 11
|
|
| 19.12.2014, 17:08 | |
|
Мало
. Читается легко. Спасибо. У вас талант.
0
|
|
|
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
|
||
| 19.12.2014, 21:09 [ТС] | ||
|
да теперь стараюсь проще писать. Один из отзывов на предыдущую статью был что слишком мудренно и не понятно о чем (правда та девушка была, и начинающая).
Не по теме: Доброе слово и одинэснику приятно.
0
|
||
|
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
|
|
| 23.12.2014, 19:51 [ТС] | |
|
Немного продолжения. Брать можно по ссылкам
https://www.cyberforum.ru/redi... N0ZXIuemlw либо https://www.cyberforum.ru/redi... QtMS5naXQ= Как обычно - жду критику и предложение. ЗЫ. Просьба к модерам - снесите все в 1 первом сообщении и оставьте там эти ссылки - что бы народ не путался.
0
|
|
|
0 / 0 / 0
Регистрация: 25.11.2014
Сообщений: 11
|
|
| 24.12.2014, 09:22 | |
|
Функция РезультатВЧисло(значение)
ЦелаяЧасть = МассивВСтроку(значение(значение)[0]); ДробнаяЧасть = ""; Если Не значение(значение)[1] = Неопределено Тогда ДробнаяЧасть = МассивВСтроку(значение(значение)[1][1]); Конецесли; Возврат Число(ЦелаяЧасть+"."+ДробнаяЧасть); Конецфункции Лишние пустые строки Добавлено через 5 минут Как видим -строка вполне корректно разбирвается на символы и группируется по нетерминалам. Не пробела после - . Добавлено через 57 секунд В коде это выглядит так digits = ПостроитьПарсер("+",ПостроитьПарсер("ran ge",Новый Структура("Минимум,Максимум","0","9"))); На примере теста видно как строить и вызывать парсер : То используется : то нет. Добавлено через 2 минуты Чем править текст? Я бы сразу в репозиторий залил.
0
|
|
|
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
|
|
| 24.12.2014, 09:36 [ТС] | |
|
Текст в drracket правлю. Файлы с расшриением scrbl.
Если лень его запускать - то можешь править в любоv удобном редакторе, после чего выполнять вызов make.bat - будет происходить пересборка.
0
|
|
|
0 / 0 / 0
Регистрация: 25.11.2014
Сообщений: 11
|
|
| 24.12.2014, 10:56 | |
|
В DrRacket не видно лишних пустых строк. Интересно. Некорректно обрабатывает правила?
Добавлено через 30 секунд @1C{ Функция РезультатВЧисло(значение) ЦелаяЧасть = МассивВСтроку(значение(значение)[0]); ДробнаяЧасть = ""; Если не значение(значение)[1] = Неопределено Тогда ДробнаяЧасть = МассивВСтроку(значение(значение)[1][1]); КонецЕсли; Возврат Число(ЦелаяЧасть+"."+ДробнаяЧасть); КонецФункции}
0
|
|
|
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
|
|
| 24.12.2014, 10:59 [ТС] | |
|
Не. Сразу поправил после твоего сообщения утром и перезалил.
0
|
|
|
0 / 0 / 0
Регистрация: 17.04.2019
Сообщений: 2
|
|
| 23.04.2020, 15:57 | |
|
wwall, подскажите так сделал кто нибудь готовую обработку? Готов купить
0
|
|
|
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
|
|
| 23.04.2020, 16:14 [ТС] | |
|
Не по теме: Фигасе ты некромант По делу https://github.com/1c-syntax/bsl-language-server - java https://github.com/lead-tools/bsparser - 1C ну и мое недоделаное https://gitlab.com/wwall/styleguide В телеграмме коференции https://github.com/lead-tools https://t.me/bsl_language_server
0
|
|
| 23.04.2020, 16:14 | |
|
Критикуйте код. Очень надо Стоит брать это Пк или по критикуйте конфигу Глава Microsoft Шлее, глава 40 Лафоре. Глава 11. Задача 2 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|