Форум программистов, компьютерный форум, киберфорум
Наши страницы

Конструирование транслятора для модельного языка. Литература по LEX/YACC - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ функцыя структур http://www.cyberforum.ru/cpp-beginners/thread515615.html
В програмі використати функції користувача У масиві що складаеться з 20 цілих елементів обчислити 1 номер мінімального елементу массиву 2 суму елементів масиву розташованого між першім і другим...
C++ Чтение нескольких строк Подскажите пожалуйста как сделать следующее: дан файл в котором 2 строки. Первую из этих строк записать в str1, вторую в str2. Строки разделены enter-ом, то есть одна под другой. http://www.cyberforum.ru/cpp-beginners/thread515603.html
C++ Можно ли представить структуру как элемент массива, т е массив состоящий из однотипных структур
Можно ли представить структуру как элемент массива, т е массив состоящий из однотипных структур
C++ Ugadai chislo programma
Computer zagadivaet chislo, i vi doljni dogadat chislo. Esli dogadali +50 ballov else -10 ballov. Pervonachalnoe ball 100. i eshe kogda igrok ne hochet igrat nado zakonchit programmu, kak eto...
C++ Дана матрица размера M × N 2 задача http://www.cyberforum.ru/cpp-beginners/thread515580.html
Дана матрица размера M × N. После последнего столбца, содержащего только отрицательные элементы, вставить столбец из нулей. Если требуемых столбцов нет, то вывести матрицу без изменений.
C++ Дана матрица размера M × N Дана матрица размера M × N. Найти максимальный среди элементов тех столбцов, которые упорядочены либо по возрастанию, либо по убыванию. Если упорядоченные столбцы в матрице отсутствуют, то вывести 0. подробнее

Показать сообщение отдельно
aw_rabbit
147 / 104 / 6
Регистрация: 08.02.2012
Сообщений: 202
12.03.2012, 22:04
Нашла у себя пример перевода в постфиксную запись. Генератор сосо, язык с++. На википедии в качестве примера какая то фигня выложена, а на самом сайте ну очень большой пример реализации C#. Так что может будет полезен.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <string>
#include <sstream>
#include <iostream>
#include <fstream>
#include <vector>
 
COMPILER expr 
 
 
int toInt(const std::wstring& strbuf)
{
    std::wstringstream converter;
    int value = 0;
 
    converter << strbuf;
    converter >> value;
    return value;
}
 
std::wstring toString ( int Number )
{
  std::wostringstream ss;
  ss << Number;
  return ss.str();
}
 
 
IGNORECASE
CHARACTERS
letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".
digit = "0123456789".
cr  = '\r'.
lf  = '\n'.
tab = '\t'.
 
TOKENS
ident  = letter {letter | digit | "_"}.
number = digit {digit}.
 
COMMENTS FROM "/*" TO "*/" NESTED
COMMENTS FROM "//" TO cr lf
 
IGNORE cr + lf + tab
 
PRODUCTIONS
 
  expr (.std::wstring str;.) = (.std::wstring s,s1,s2,s3,s4; .) 
                  ident (.s1=t->val;.)":=" NumExpr<s2> ";" (. str+=s1; str+=s2; str+=L":=\n";.)
                  {ident(.s3=t->val; s4=L"";.)":=" NumExpr<s4> ";" (. s+=s3;  s+=s4; s+=L":=\n"; .)}
                  (.
                    str+=s;
                    std::wofstream outfile ("out.txt", std::ios_base::out);
                    outfile << str << std::endl;          
                    outfile.close();
                  .)
                  .
  
  NumExpr<std::wstring &str> = (.std::wstring s1,s2, op; .)
                        Term<s1> (.str+=s1;.)
                        { ("+" (.op=L"+";.)|"-" (.op=L"-";.)) NumExpr<s2>
                        (.
                            //str+=s1; 
                            str+=s2; str+=op;
                        .)
                        }.
  
  Term<std::wstring &str> =(.std::wstring s1,s2, op;.) 
                Multiplier<s1> (.str+=s1;.)
                { ("*" (.op=L"*";.)|"/"(.op=L"/";.)) Term<s2> 
                (.
                    //str+=s1; 
                    str+=s2; str+=op; 
                .)
                }.
  
  Multiplier<std::wstring &str> = 
                          ident (.str=t->val; .) 
                          | number (.str=t->val;.)
                          | (.std::wstring s; .) "(" NumExpr<s> ")" (.str=s;.).
  
  
END expr.
Добавлено через 2 минуты
вход
a:=b;
a:=a-5;
a:=9-5+2;
a:=2+3*4;
a:=(5-4)*(3+2);

выход
ab:=
aa5-:=
a952+-:=
a234*+:=
a54-32+*:=

make
all: translator


translator: Coco scanner.o parser.o main.o
g++ -o tr.exe scanner.o parser.o main.o

main.o: main.cpp
g++ -c main.cpp

scanner.o: Scanner.cpp Scanner.h
g++ -c Scanner.cpp -o scanner.o

parser.o: Parser.cpp Parser.h
g++ -c Parser.cpp -o parser.o

Coco: expr.atg
coco expr.atg

clean:
del Scanner.cpp Scanner.h Parser.cpp Parser.h
del Scanner.cpp.old Scanner.h.old Parser.cpp.old Parser.h.old
del scanner.o parser.o main.o
del translator

main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <wchar.h>
#include "Parser.h"
#include "Scanner.h"
 
#include <string>
 
 
using namespace std;
 
main(int argc, char *argv[])
{
    if (argc == 2)
    {
        
        wchar_t *file  = coco_string_create(argv[1]);
 
        Scanner *scanner = new Scanner(file);
        Parser *parser   = new Parser(scanner);
        parser->Parse();
 
        delete parser;
        delete scanner;
        delete file;
 
        return 0;
    }
    
    else
    {
        cout << "Use: translator filename" << endl;
        return 1;
    }
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru