Page 1 of 2

Пишу компилятор ЯВУ

Posted: Sat Jun 03, 2006 9:16 pm
by Andryuha
Вот синтаксис языка, используемого в моем компиляторе:


Стандартные типы данных:
void - пустой тип
char - символ
byte - байт
short - целое со знаком (1 байт)
word - слово
int - целое со знаком (2 байта)
dword - двойное слово
long - целое со знаком (4 байта)


Новым типом может быть структура:
struct имя_структуpы
описание полей
end


Описание переменных:
имя_типа имя_переменной;
имя_типа имя_переменной [5]; // массив


Описание функций:
имя_типа имя_ф-ии(имя_типа имя_параметpа[,...])
операторы
end

Допускается описание заголовков функций.


Опеpаторы (в поpядке возрастания приоритета):
:= присваивание
| или
^ исключающее или
& и
< меньше
<= меньше или равно
= равно
!= не равно
>= болше или равно
> больше
+ сложение
- вычитание
* умножение
/ деление
% остаток от деления
! отpицание
- изменение знака
@ вычисление адpеса
[] индекс массива


Упpавляющие структуры:
if условие then
операторы
[else
опеpатоpы
end]


while условие do
опеpатоpы
end


repeat
опеpатоpы
until условие;


continue // пеpеход в начало цикла
exit // выход из цикла

return выpажение; // возвpат значения
return // возвpат из ф-ии типа void


Дополнительные опеpатоpы:
inc имя_целой_пеpеменной; // увеличение на 1
dec имя_целой_пеpеменной; // уменьшение на 1


Ассемблеpные вставки:
asm
опеpации [опеpанды]
end


/* коментарий */
// тоже коментарий

Posted: Sat Jun 03, 2006 9:43 pm
by Andryuha
О компиляторе:
Компилятор пишется на паскале. Работает под Windows. Генерирует ассемблерный листинг для fasm'а. После компиляции ассемблером получается программа которая будет работать под MenuetOS/KolibriOS. В планах переписание компилятора на свой язык и перенос в МеОС.
Пока не все реализировано и то что есть еще глючит. Сам компилятор выложу недели через две.

Posted: Sat Jun 03, 2006 9:58 pm
by Andryuha
Жду Ваших замечаний, советов, вопросов...

Posted: Sat Jun 03, 2006 10:07 pm
by rabid rabbit
А ихде оператор присваивания?

Posted: Sat Jun 03, 2006 10:12 pm
by Andryuha
Уже есть :)

Posted: Sat Jun 03, 2006 10:24 pm
by vectoroc
с типами какято путаница (может быть я один чегото недопонимаю),зачем куча однотипных стандартных типов
имхо int = word
long = dword

Posted: Sat Jun 03, 2006 10:34 pm
by Andryuha
int - это 2-х байтное целое со знаком, word - без знака
long - это 4-х байтное целое со знаком, dword - без знака

Posted: Sat Jun 03, 2006 11:09 pm
by Andryuha
По желанию тех, кто был на канале #meos, типы будут теперь такими:

short - 1но байтное целое со знаком
ushort - 1но байтное целое без знака
int - 2х байтное целое со знаком
uint - 2х байтное целое без знака
long - 4х байтное целое со знаком
ulong - 4х байтное целое без знака

Posted: Sun Jun 04, 2006 3:42 am
by Quantum
2 Andryuha:
Не вижу смысла использовать сишные имена типов, но при этом не соблюдать их стандартный (т.е. сишный) размер. Тогда уже лучше назвать типы иначе: byte, ubyte, word, uword, dword, udword. Или ещё привычнее: sbyte, byte, sword, word, sdword, dword.

Posted: Sun Jun 04, 2006 12:29 pm
by vectoroc
byte по моему разумению и так обычно беззнаковый,как и dword
imho названия грамотные и куда понятней чем sword/word...
И кто сказал что это сишные имена? Сходство есть,но это ничего не значит

Posted: Sun Jun 04, 2006 12:49 pm
by O01eg
а как переменные в ассемблерных вставках использовать?

Posted: Sun Jun 04, 2006 1:12 pm
by vectoroc
Теоретически идентификатор это только ассемблерный указатель
Так как компилер генерит (или будет генерить) асм-листинг там будет видно как названа конкретная переменная
..и я думаю что во вставках их можно импользовать под теми же именами

Posted: Sun Jun 04, 2006 1:13 pm
by vectoroc
Хотя в таком случае возникает вопрос: как в разных функциях будут использоваться идентификаторы с одинаковыми именами

Posted: Sun Jun 04, 2006 6:26 pm
by O01eg
а модули, библиотеки или include есть?

Posted: Sun Jun 04, 2006 7:16 pm
by Quantum
2 Victor:
byte по моему разумению и так обычно беззнаковый
Если подразумевается термин "байт", то по определению он не является ни знаковым, ни беззнаковым. Определение можно посмотреть в любой классике. Если же Вы имеете в виду тип переменной "byte", то можно провести аналогию с сишным типом "char", который может быть знаковым или беззнаковым, в зависимости от соглашения по умолчанию, если не указан префикс signed/unsigned. Тип "Byte" есть в Паскале и Бейсике и является беззнаковым, но пишется с большой буквы - опять мимо. Если подразумевается какой-то экзотический язык, то так бы и написали.
imho названия грамотные и куда понятней чем sword/word
Критерий грамотности и понятности? Тут банального "imho" маловато будет, т.к. язык разрабатывается не для одного единственного пользователя, как я понял.
И кто сказал что это сишные имена? Сходство есть,но это ничего не значит
Хорошо, для Вас это ничего не значит. Для программистов, владеющих С, коих достаточно много, это имеет значение. Представьте, что при изучении иностранного языка вам говорят, что есть слово "яблок", но оно означает не яблок, а грушу.