|
|
|
### Реализовать грамматики и интерпретаторы следующих языков
|
|
|
|
|
|
|
|
1. Реализовать грамматику для систем линейных уравнений вида
|
|
|
|
|
|
|
|
`2.5 * x + 3 * y = 7.1; - x - 3.4 * y = 3.2`
|
|
|
|
|
|
|
|
Реализовать интерпретатор, выводящий ответ
|
|
|
|
|
|
|
|
2. Реализовать грамматику для многочленов, заданных в виде
|
|
|
|
|
|
|
|
`2*x^2+3.1*x-2.4;-3*x^3+4*x;x+1`
|
|
|
|
|
|
|
|
Написать интерпретатор, вычисляющий их сумму
|
|
|
|
|
|
|
|
3. Разработать грамматику логических выражений, содержащую T (True), F (False), знаки отношения и операции and, or. Написать интерпретатор, вычисляющий данное логическое выражение
|
|
|
|
|
|
|
|
4. Разработать грамматику, позволяющую вычислять определители матриц. Определитель записывать в виде: |\[1,2.5,3\],\[4,5.6,6\],\[7.3,8.66,9\]| Написать интерпретатор, вычисляющий записанный определитель
|
|
|
|
|
|
|
|
5. Усовершенствовать грамматику выражений, добавив в нее возможность использовать стандартные функции произвольного количества аргументов. Должны поддерживаться функции sqrt, abs, power, min(произвольное количество), max(произвольное количество) Написать интерпретатор, вычисляющий данное выражение с функциями.
|
|
|
|
|
|
|
|
6. Реализовать грамматику для множеств Паскаля в виде \[1,2..5,10\] с операциями + и \* Написать интерпретатор, вычисляющий выражение с множествами вида \[1,2..5,10\] + \[3..7\] или \[1,2..5,10\] \* \[3..7\]
|
|
|
|
|
|
|
|
7. Реализовать символьное дифференцирование для выражений, включающих умножение, деление, сложение, вычитание, скобки, функции sin, cos, ln
|
|
|
|
|
|
|
|
8. Реализовать язык программирования, включающий присваивание, вывод, целые константы, переменные, цикл for, составной оператор
|
|
|
|
|
|
|
|
9. Разработать грамматику, позволяющую вычислять сумму двух матриц, задаваемых в виде:
|
|
|
|
|
|
|
|
`((1,2,3),(4,5,6))+((7,8,9),(1,3,5)) `
|
|
|
|
|
|
|
|
В случае неправильных размеров матриц должно выдаваться сообщение об ошибке.
|
|
|
|
|
|
|
|
10. Разработать грамматику языка, определяющего три плоскости
|
|
|
|
|
|
|
|
`2x+13y-4z+1=0;3x-y=0;4x+3z-1=0;`
|
|
|
|
|
|
|
|
и написать интерпретатор, определяющий точку их пересечения или выдающий точку их пересечения или информацию о неоднозначном (отсутствующем) решении
|
|
|
|
|
|
|
|
11. Разработать грамматику языка, определяющего список точек в пространстве
|
|
|
|
|
|
|
|
`(2,3,-1), (4,-5,6), (1,1,3)`
|
|
|
|
|
|
|
|
Написать интерпретатор, определяющий расстояния от каждой точки до начала координат.
|
|
|
|
|
|
|
|
12. Разработать грамматику языка, определяющего уравнение прямой и список точек:
|
|
|
|
|
|
|
|
`x-2y+3=0; (2,1),(3,4),(5,-1)`
|
|
|
|
|
|
|
|
Реализовать интерпретатор, находящий расстояния от каждой из заданных точек до указанной прямой.
|
|
|
|
|
|
|
|
13. Разработать грамматику языка, определяющего список троек точек на плоскости
|
|
|
|
|
|
|
|
` {(2,1),(3,4),(5,-1)},{(4,6),(2,6),(7,-3)},{(-2,2),(2,5),(1,-1)}`
|
|
|
|
|
|
|
|
Реализовать интерпретатор, вычисляющий площади треугольников, построенных на этих точках
|
|
|
|
|
|
|
|
14. Разработать грамматику языка, задающего однородное дифференциальное уравнение 2 порядка вида <code>
|
|
|
|
|
|
|
|
`y’’+12y’-23y=0`
|
|
|
|
|
|
|
|
</code> Реализовать интерпретатор, выдающий общее решение этого ДУ
|
|
|
|
|
|
|
|
15. Разработать грамматику языка, определяющего функции:
|
|
|
|
|
|
|
|
`let f(x)=x+y; let g(x,y)=f(x-y)+x;`
|
|
|
|
|
|
|
|
Проверить корректность определений на предмет вызова функции после ее определения, недублирования имен и соответствия количества формальных и фактических параметров
|
|
|
|
|
|
|
|
16. Разработать грамматику языка, определяющего переменные
|
|
|
|
|
|
|
|
`int x,y;`
|
|
|
|
`x = 1;`
|
|
|
|
`z=2;`
|
|
|
|
`int z;`
|
|
|
|
|
|
|
|
Проверить корректность такой программы: переменные должны быть описаны до использования и только один раз |