Программа транслятор из С/Паскаля/Бейсика в асм
Необходимо написать программу транслятор из С/Паскаля/Бейсика в ассемблер.
Указывайте ваши предложения по цене и сроку. Также опыт работы.
В аттаче дока, которая может помочь.
______________________________________
Общие правила выполнения курсовой работы
1.Курсовая работа должна состоять из рабочей программы (программы-компилятора) и отчета.
2.Программа должна содержать исходные тексты, а также исполняемый бинарный файл (или группу файлов).
3.Программа должна быть выполнена на языке программирования C++.
4.Программа должна производить трансляцию фрагмента исходного текста на входном языке программирования в эквивалентный ей текст программы на языке ассемблера.
5.Тестовый фрагмент для трансляции выбирается в соответствии с индивидуальным вариантом.
6.Результирующая программа на языке ассемблера должна быть ориентирована на архитектуру x86. Нежелательно использование в результирующем коде узко-специфичных процессорных директив и регистров.
7.В программе должны присутствовать лексический и синтаксический анализаторы. Семантический анализатор и генератор кода могут не выделяться в отдельные компоненты.
8.Методы трансляции выбираются самостоятельно. В отчете необходимо определить грамматику входного языка и обосновать выбор соответствующего метода перевода.
9.Интерфейс к программе-компилятору может быть консольным и должен, как минимум, обеспечивать возможность передачи имени файла с текстом входной программы.
10.В процессе работы программы (анализа и синтеза) должны генерироваться сообщения об успехе соответствующей фазы или возникших ошибках.
11.Для обработки ошибок внутри программы предпочтительно использовать механизм исключений.
12.В программе необходимо в качестве базовых структур данных (массивы, списки, очереди, стеки) использовать контейнерные классы библиотеки STL. В некоторых случаях допускается использование своих контейнерных классов, когда такое решение будет обосновано.
13.Код программы должен быть ориентирован на обработку компилятором Visual C++ версии не ниже 6.0 или GCC версии не ниже 3.3.4. Применение других компиляторов нежелательно.
14.Использование готовых библиотек для синтаксического, лексического разбора и любых других автоматизированных инструментов для создания компиляторов запрещено.
15.Отчет должен содержать описание решаемой задачи, используемых алгоритмов, код программы и диаграмму классов.
16.Отчет должен быть выполнен в соответствии с требованиями, предъявляемыми к оформлению курсовых работ, и ГОСТ.
Пример входных файлов:
int sum(int a, int b);
/* … */
int i, n = 50;
float p;
for(i =0, j = n; i
{
if(i != j)
{
p = (sum(i, j) + 10.5)/16+22;
p--;
}
}
/* … */
int sum(int a, int b)
{
return a + b;
}
///////////////////////////////
void sum(int &a, int &b);
/* … */
int i, n = 50;
float p, res = 0;
for(i =0, j = n; i
{
sum(res, j);
p = (res + 0.5)/16+12;
for(; p
{
res += p/11.3+1;
}
}
/* … */
void sum(int a, int b)
{
a += b;
}
///////////////////////////////////////
____________float sum(float *a, int n);
#define N 50
/* … */
int i;
float p[N], res = 0;
for(i =0; i
{
p[N] = 0.1 * i;
}
res = sum(p, N)
/* … */
float sum(float *a, int n)
{
float r = 0.0;
int i = 0;
for(; i
{
r += *(a++ + i);
}
return r;
}
//////////////////////////////////
program Hanoi;
var t1, t2, t3 : char;
n:integer;
procedure Hanoi(t1, t2, t3: char; k: integer);
begin
if k
then
begin
Hanoi(t1, t3, t2, k-1);
writeln(t1:10, t2:10);
Hanoi(t3, t2, t1, k-1);
end
else writeln(t1:10, t2:10);
end;
begin
t1:=’A’;
t2:=’B’;
t3:=’C’;
Hanoi(t1, t2, t3, 10);
end.
///////////////////////////////////////////////////
const n=10;
type
number = 1..n
matrix = array [ number, number] of real;
num = set of number;
function sum(var A: matrix; S1, S2: num):real;
var
summa:real;
i, j:number;
begin
summa:=0;
for i:=1 to n do
if i in S1 then
for j:=1 to n do
if j in S2 then
summa:=summa+A[i,j];
Sum:=summa;
end;
//////////////////////////////////////////////////
1: INPUT “Press enter N & M”; N, M
K=N
GOSUB FACT
X1=P
K=M
GOSUB FACT
X2=P
K=(N-M)
GOSUB FACT
Z=X1/(X2*P)
PRINT “Expression ”; Z
INPUT ”Continue?”;a$
IF UCASE(a$)=”Y” THEN 1 ELSE PRINT “Bye”
END
FACT:
P=1
FOR i=1 TO K
P=P*i;
NEXT i
RETURN
///////////////////////////////////////////
INPUT “Press enter A & B”; A, B
S=0
I=A
FOR I TO B
GOSUB EXPR
S=P+I;
I=I+1
NEXT I
?”Summ”; S
END
EXPR:
P=0
FOR K=1 TO I
P=P+ S+1/(1+K))
NEXT K
RETURN
_______________