Тема 14. Разбор текста

Содержание

  1. Термы
    1. Преобразование в терм
    2. Обратное преобразование
  2. Списки символов
    1. Преобразование в список
    2. Преобразование списка в атом
    3. Обратное преобразование
  3. Грамматики
    1. Описание грамматики
    2. Преобразование в строку
    3. Обратное преобразование

Домашнее задание 15. Разбор выражений на Prolog

  1. Доработайте правило evaluate(Expression, Variables, Result), вычисляющее арифметические выражения.
    1. Пример вычисления выражения 2*(-x)-3 для x = 5:
      evaluate(
          operation(op_subtract,
              operation(op_multiply,
                  const(2),
                  operation(op_negate, variable(x))
              ),
              const(3)
          ),
          [(x, 5)],
          -13
      )
      
    2. Поддерживаемые операции: сложение (op_add, +), вычитание (op_subtract, -), умножение (op_multiply, *), деление (op_divide, /), противоположное число (op_negate, negate).
  2. Простой вариант. Реализуйте правило prefix_str(Expression, Atom), разбирающее/выводящее выражения, записанные в префиксной форме. Например,
    prefix_str(
        operation(op_subtract,
            operation(op_multiply,
                const(2),
                operation(op_negate, variable(x))),
            const(3)
        ),
        '(- (* 2 (negate x)) 3)'
    )
    
  3. Сложный вариант. Реализуйте правило infix_str(Expression, Atom), разбирающее/выводящее выражения, записанные в полноскобочной инфиксной форме. Например,
    infix_str(
        operation(op_subtract,
            operation(op_multiply,
                const(2),
                operation(op_negate, variable(x))),
            const(3)
        ),
        '((2 * negate x) - 3)'
    )
    
  4. Правила должны быть реализованы с применением DC-грамматик.