gifts2017

Синтаксический анализатор

Опубликовал Филин (fillin) в раздел Программирование - Инструментарий

Преобразует выражение на встроенном языке 1С:Предприятие в дерево значений, выделяя и интерпретируя отдельные лексемы, располагая их в обратном порядке выполнения операций (первыми выполняются операции, находящиеся на нижних уровнях дерева)

Описание

Преобразует выражение на встроенном языке 1С:Предприятие в дерево значений, выделяя и интерпретируя отдельные лексемы, располагая их в обратном порядке выполнения операций (первыми выполняются операции, находящиеся на нижних уровнях дерева).

В колонке Выражение в корне дерева находится исходное выражение, на следующем уровне – его подвыражения и т.д.

Примечания

Хотя в процессе разбора диагностируются некоторые синтаксические ошибки, однако предполагается, что на входе мы имеем синтаксически верное выражение.  

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

 

При разработке использовались материалы: В.А.Серебряков, М.П.Галочкин, «Основы конструирования компиляторов» http://citforum.ru/programming/theory/serebryakov/

Скачать файлы

Наименование Файл Версия Размер
СинтаксическийРазбор.epf 45
.epf 14,62Kb
21.09.12
45
.epf 14,62Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Доржи Балбаров (Angeros) 21.09.12 12:32
А какие выражения доступны для разбора? для чего разрабатывался данный механизим?
2. Яков Коган (Yashazz) 21.09.12 12:52
Отличная штука! Уже знаю, где буду применять - для текстов алгоритмов, динамически выполняемых в режиме "Предприятие" командой "Выполнить".
3. Сергей Старых (tormozit) 21.09.12 12:58
Осталось подключить к снегопату и рефакторинг встроенного языка будет развиваться хорошим темпом.
Первое что нужно сделать:
1. Вынести метод (сложно)
2. Переименовать локальную переменную (просто)
3. Преобразование условия в И-ИЛИ дерево (http://infostart.ru/public/152801/) (просто)
4. Сергей Старых (tormozit) 21.09.12 13:10
Оказалось не все так радужно. Здесь чисто синтаксический разбор именно выражения (а не текста программы) без учета особенностей интерпретации (приоритета вычисления операций интерпретатором). Но все равно ступенька на пути к дереву интерпретации.
5. Филин (fillin) 21.09.12 13:38
(1) Обработка делалась в рамках решения другой задачи.
Требовалось определить фактически использованные переменные в выражении вида: ?(А=1, Б+В, ?(А=Г, Д, Е)) + Ж.
Выражения могут быть произвольными, т.е. могут включать в себя переменные, функции, свойства и методы объектов, вложенные выражения...
6. Филин (fillin) 21.09.12 13:44
(4) tormozit, см. (5)
Да, в планах было построить дерево еще и с приоритетом операций. Теоретически для этого достаточно доработать макет ПравилаРазбора.
Однако это уже за рамками основной задачи. Поэтому решили не усложнять.
7. Ярослав Радкевич (WKBAPKA) 21.09.12 17:04
насколько я разбирался с данной темой, данная разработка больше подходит на группировку лексем в токены...
8. Доржи Балбаров (Angeros) 23.09.12 09:38
(5)то что требовалось понятно. Имеется введу каков проект где все это может пригодится?! что за пользователь в состоянии писать подобные выражения для разбора.
9. Модератор раздела Артур Аюханов (artbear) 26.09.12 10:59
Да, для снегопата не хватает подобных разработок.
Саша пока также не делает :(
10. г. Казань Рустем Гумеров (Rustig) 26.09.12 22:07
(5) а зачем нужно было "определить фактически использованные переменные в выражении вида..."?
11. Александр Топольский (AlexanderKai) 02.10.12 17:52
Помнится в школе делал "вычислятель" арифметических выражений. Прикольно было.