
Языки программирования и методы трансляции / 4_sem / Tasks
.pdfЗадания (2 курс 4 семестр ПМ).
Используя язык Python выполнить задания на основе следующих лабораторных работ:
1.На основе лабораторной работы №2. Применить два способа.
1)Использовать рекурсивные определения.
2)Использовать циклы.
2.На основе лабораторной работы №5.
Впервом задании следует применить стандартные функции высшего порядка языка Python. Во втором задании необходимо возвратиться к заданиям из лабораторной работы №2 (не №3 как в тексте задания).
3.На основе лабораторной работы №3.
Выполняется с использованием генератора синтаксических анализаторов TPG на основе синтаксических конструкций для типов данных, определенных при выполнении соответствующих заданий на языке Haskell в предыдущем семестре.
Рекомендуется в результате трансляции базы данных получить список объектов с динамически добавляемыми атрибутами и методом __str__ для представления значений атрибутов в виде строки при печати результатов.
В качестве примера приведем соответствующие определения для первого задания:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import tpg import types
class Product:
def __init__( self, cons, **attrs ): self.cons = cons
self.attrs = attr
def __str__(self): s = ''
for k in (self.attrs).keys(): s += ' ' + str(self.attrs[k]) return self.cons + s
def printLst(Lst): print '[',
for i in range(len(Lst)): if i < len(Lst) - 1: print Lst[i],', ',
else:
print Lst[i], print ']'
class ProdTrans(tpg.Parser): r"""
separator spaces: '\s+' ; token string: '".*?"' ; token number: '\d+' int ;
START/s -> '\[' (Product/p $ s = [p] $ (',' Product/p $ s.append(p) $)* | $ s = [] $)'\]' ; Product/p -> 'Book'/c string/t string/a $ p = Product(c, tit = t, auth = a) $ |
'VC'/c string/t $ p = Product(c, tit = t) $ |
'CD'/c string/t number/n $ p = Product(c, tit = t, cnt = n) $ ;
"""
prodTrans = ProdTrans()
products = '[Book "tt. t1" "a. a1", VC "tt. t2", CD "tt. t3" 23, Book "tt. t4" "a. a4"]' #products = '[]'
#prodTr = []
prodTr = prodTrans(products) printLst(prodTr)
def bookAuthors(ps):
"""
Функция по списку товаров возвращает список авторов книг
"""
pb = [] for p in ps:
if p.cons == 'Book': pb.append(p.attrs['auth'])
return pb
print bookAuthors(prodTr)
4. На основе лабораторной работы №4.
Выполняется с использованием генератора синтаксических анализаторов TPG на основе синтаксических конструкций для типов данных, определенных при выполнении соответствующих заданий на языке Haskell в предыдущем семестре.