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

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

Описание

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

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

Примечания

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

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

 

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

10 Comments

  1. Angeros

    А какие выражения доступны для разбора? для чего разрабатывался данный механизим?

    Reply
  2. Yashazz

    Отличная штука! Уже знаю, где буду применять — для текстов алгоритмов, динамически выполняемых в режиме «Предприятие» командой «Выполнить».

    Reply
  3. tormozit

    Осталось подключить к снегопату и рефакторинг встроенного языка будет развиваться хорошим темпом.

    Первое что нужно сделать:

    1. Вынести метод (сложно)

    2. Переименовать локальную переменную (просто)

    3. Преобразование условия в И-ИЛИ дерево (http://infostart.ru/public/152801/) (просто)

    Reply
  4. tormozit

    Оказалось не все так радужно. Здесь чисто синтаксический разбор именно выражения (а не текста программы) без учета особенностей интерпретации (приоритета вычисления операций интерпретатором). Но все равно ступенька на пути к дереву интерпретации.

    Reply
  5. fillin

    (1) Обработка делалась в рамках решения другой задачи.

    Требовалось определить фактически использованные переменные в выражении вида: ?(А=1, Б+В, ?(А=Г, Д, Е)) + Ж.

    Выражения могут быть произвольными, т.е. могут включать в себя переменные, функции, свойства и методы объектов, вложенные выражения…

    Reply
  6. fillin

    (4) tormozit, см. (5)

    Да, в планах было построить дерево еще и с приоритетом операций. Теоретически для этого достаточно доработать макет ПравилаРазбора.

    Однако это уже за рамками основной задачи. Поэтому решили не усложнять.

    Reply
  7. WKBAPKA

    насколько я разбирался с данной темой, данная разработка больше подходит на группировку лексем в токены…

    Reply
  8. Angeros

    (5)то что требовалось понятно. Имеется введу каков проект где все это может пригодится?! что за пользователь в состоянии писать подобные выражения для разбора.

    Reply
  9. Rustig

    (5) а зачем нужно было «определить фактически использованные переменные в выражении вида…»?

    Reply
  10. AlexanderKai

    Помнится в школе делал «вычислятель» арифметических выражений. Прикольно было.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *