0 / 0 / 0
Регистрация: 12.02.2014
Сообщений: 10
1

Создание своего компилятора

13.06.2014, 09:43. Показов 2200. Ответов 3
Метки нет (Все метки)

Всем привет.
Я программист средней руки. Сегодня я решил написать свой ЯП на VB6.
Естественно возник вопрос, как написать компилятор. Я конечно знаю, что это очень сложно (тем более на VB6), но всё же хочется.
Начал копать в интернете, но ничего толкового я не нашёл.
Если я правильно понял, то мой компилятор должен будет исходник программы просто записать на языке ассемблера.
Правильно ли я понял? Если нет, то подскажите пожалуйста, в какую сторону мне смотреть?
Заранее спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2014, 09:43
Ответы с готовыми решениями:

Создание своего ЯП и компилятора к нему
вопрос в названии темы ПС: Мысли по поводу надо переводить твой язык в какой-нибудь паскаль и...

Стоит ли заниматься созданием своего компилятора?
Задача. Создать компилятор высокоуровнего языка, в котором форма готового кода на языке ассемблер и...

Создание своего Event для своего класса
как создать событие для своего класса? У C# нужно создать свое делегат, потом создать экземпляр...

Создание компилятора
Есть программа на Turbo prolog 5.2 ...

3
2 / 2 / 4
Регистрация: 16.07.2013
Сообщений: 30
16.06.2014, 09:35 2
Делай от легкого к сложному.

Сначала надо составить цель и правила для своего языка, а потом реализовать его. К примеру я создаю тоже свой язык программирования:
Состоит из 5 команд, ввод, вывод, присвоения, условия, и цикл уайл.
1) get out [data] . -
2) get in [data] -
3) <- -
4) if ( [data] ) -> [inner block] end
5) while () is true -> [inner block] end

У меня конец инструкции обозначается с помощью точки (.) и точки запятой (.
Все вложенные блоки должны заканчиваться на разных операторах.
К примеру:
C++
1
2
3
4
5
6
7
8
9
10
11
12
     оператор .
     оператор .
     if ( условия ) ->
        оператор ;
        оператор ;
        while ( условия ) ->
          оператор .
          оператор .
        end ;
     end.   
    оператор .
    оператор .
Когда обрабатывается инструкции, то приоритет операторов такой:

0) Скобки,
1) ключевые слова операторов: if, while
2) Операторы арифметики (*, /, +, -)
3) Операторы присвоения
4) Буленовские операторы ( and, or, is true, is false, ! )

Когда парсер берет исходный код, он исключает все Строки и комментарии (они могут содержат операторы окончании инструкций: точку, точку с запятой), потом начинает разделять код на инструкции
по ->, точки (.) и точки запятой ;

Потом, каждую инструкцию начинает обрабатывать по приоритету как по списку на верху.
Во время парсинга инструкции, в глобальный массив вставляется имена переменных и констант:
К примеру в коде есть такая часть:
C++
1
2
3
     firstNumber <- 15. 
     secondNumber <- 15. 
     sum <- firstNumber + secondNumber.

тогда в глобальном массиве будет:
C++
1
2
3
4
5
6
7
8
9
10
11
  global = array( 
        [0] : array(
                  'name' : 'firstNumber',
                  'value' : 15),
        [1] : array (
                  'name' : 'firstNumber',
                  'value' : 15),
        [2] : array (
                  'name' : 'sum',
                  'value' : 'firstNumber'+'secondNumber')
 );
После парсинга инструкции, если в коде есть обращении к переменным, компилятор ищет его в глобальном массиве, если переменный не найден, то выводит ошибку, или переводит в код языка С.

Когда реализую свою версию переводящий на С, потом создам версию переводящий в язык ассемблера. Потом и свой ассемблер тоже, что бы переводит напрямую в машинный язык.
0
3174 / 1933 / 313
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
16.06.2014, 12:21 3
Цитата Сообщение от MegProg Посмотреть сообщение
как написать компилятор
Почитайте, для начала: Креншоу, Дж. "Давайте, создадим компилятор!" и Черкашин, М. "Компилятор пишется так ...". И на Куличики загляните.
3
Администратор
Эксперт .NET
9303 / 4592 / 755
Регистрация: 17.04.2012
Сообщений: 9,447
Записей в блоге: 14
20.06.2014, 19:41 4
...ну а потом - классика по ломанию мозгов - Красный дракон (Compilers: Principles, Techniques & Tools, Aho, Lam, Sethi, Ullman).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2014, 19:41
Помогаю со студенческими работами здесь

Создание кнопки компилятора
Доброго всем дня суток! Как можно создать на с++ в билдере, самому кнопку компиляции, что бы она...

Структура *.exe файла. Создание компилятора
Всем привет! Подходящего раздела я не нашел, поэтому пишу в самый подходящий из тех, что есть....

Создание модуля (Внутренняя ошибка компилятора)
вот код UNIT read; interface var STR:STRING; mass:array of char; procedure...

Ошибка компилятора fatal error C1091: ограничение компилятора: длина строки превышает 65535 байт
Компилируя программу вот такой командой: cl /O2 /Oi /GL /EHsc /MD /Gy main.cpp И компилятор...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru