Модераторы: Snowy, Poseidon

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Разработка компилятора языка C 
V
    Опции темы
DEADHUNT
Дата 21.9.2009, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.11.2008

Репутация: нет
Всего: нет



Цитата(TheVoid @  21.9.2009,  22:36 Найти цитируемый пост)
Короче говоря, вопрос решен, всем спасибо, все свободны. 

а не увидел p_Type(), почему возвращает void? должна тип возвращать
PM MAIL   Вверх
TheVoid
Дата 21.9.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



О, а вот это другой вопрос. Функции-нетерминалы что-то должны возвращать и принимать, да?
PM   Вверх
DEADHUNT
Дата 21.9.2009, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.11.2008

Репутация: нет
Всего: нет



Цитата(TheVoid @  21.9.2009,  22:44 Найти цитируемый пост)
О, а вот это другой вопрос. Функции-нетерминалы что-то должны возвращать и принимать, да? 

причём здесь грамматика, сам уже думай где что должно возвращаться. просто при разборе decl_specifier тебе надо знать type_specifier(а ты его не знаешь). и вообше где у тебя структура которая описывает тип?
PM MAIL   Вверх
TheVoid
Дата 21.9.2009, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



В том-то и проблема, что как-то не могу свести все воедино в плане кто чего возвращает и принимает. Наверное, это от того, что я заботился об единообразии, то есть каждая функция автономна и... все.
Собственно, тип:

Код

void p_Type(void)
{
    switch (Token())
    {
        case TOKEN_KWSIGNED : 
            Match(TOKEN_KWSIGNED);
                switch (Token())
                {
                    case TOKEN_KWCHAR : Match(TOKEN_KWCHAR); break;
                    case TOKEN_KWSHORT : Match(TOKEN_KWSHORT); break;
                    default : Match(TOKEN_KWINT); break;
                }
            break;
        case TOKEN_KWUNSIGNED : 
            Match(TOKEN_KWUNSIGNED);
                switch (Token())
                {
                    case TOKEN_KWCHAR : Match(TOKEN_KWCHAR); break;
                    case TOKEN_KWSHORT : Match(TOKEN_KWSHORT); break;
                    default : Match(TOKEN_KWINT); break;
                }
            break;
        case TOKEN_KWCHAR : Match(TOKEN_KWCHAR); break;
        case TOKEN_KWINT : Match(TOKEN_KWINT); break;
        case TOKEN_KWSHORT : Match(TOKEN_KWSHORT); break;
        default : Match(TOKEN_KWVOID);
    }
}

PM   Вверх
DEADHUNT
Дата 21.9.2009, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.11.2008

Репутация: нет
Всего: нет



Цитата(TheVoid @  21.9.2009,  22:53 Найти цитируемый пост)
Собственно, тип:

ты просто синтаксическую проверку делаешь(и то не правильно), а надо ещё информацию о типе собирать. про тип имеется:
Код
typedef struct TYPE {
    enum type_kind kind;
    ....
} TYPE;

TYPE *p_Type(void);

PM MAIL   Вверх
TheVoid
Дата 21.9.2009, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Цитата(DEADHUNT @  21.9.2009,  22:59 Найти цитируемый пост)
и то не правильно

Как правильно?

Пока что тип у меня вмещается в int, так как указателей, структур и прочего нет. Что есть:
TYPE_ERROR
TYPE_VOID
TYPE_UCHAR
TYPE_CHAR
TYPE_USHORT
TYPE_SHORT
TYPE_UINT
TYPE_INT
TYPE_FUNCTION
PM   Вверх
DEADHUNT
Дата 21.9.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.11.2008

Репутация: нет
Всего: нет



Цитата(TheVoid @  21.9.2009,  23:05 Найти цитируемый пост)
Как правильно?

просто у тебя не допускается даже такой тип как:
long unsigned, ...
функция - тоже составной(сложный) тип, так как имеет возвращаемый тип, параметры, и дополнительные атрибуты.
PM MAIL   Вверх
TheVoid
Дата 21.9.2009, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Цитата(DEADHUNT @  21.9.2009,  23:10 Найти цитируемый пост)
long unsigned

Да, это есть. Нужно было так:

Код

... p_Types(...)
{
    p_Type();
    ...
    p_Types();
}

... pType(...)
{
    switch ...
    {
        case UNSIGNED : ... ;
        case CHAR : ...;
        ...
    }
}


Только я не сообразил, как потом делать проверку...

В случае с функцией, возвращаемый тип, атрибуты и параметры должны были войти в отведенный на нее элемент Таблицы Имен. Неужели все эта инцформация должна хранится в структуре, описивающей Тип?
PM   Вверх
DEADHUNT
Дата 21.9.2009, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.11.2008

Репутация: нет
Всего: нет



Цитата(TheVoid @  21.9.2009,  23:16 Найти цитируемый пост)
Да, это есть. Нужно было так:

можно и так
Код
for ( ; ; )
{
    switch (...)
    {
    ...
    }
}

Цитата(TheVoid @  21.9.2009,  23:16 Найти цитируемый пост)
Неужели все эта инцформация должна хранится в структуре, описивающей Тип? 

а как же
void (*foo)();
foo = test; // какой тип у test?
PM MAIL   Вверх
TheVoid
Дата 21.9.2009, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Цитата(DEADHUNT @  21.9.2009,  23:20 Найти цитируемый пост)
можно и так

И все-таки, как в таком случае проверить корректность типа? Простым if (t1 == ... && t1 == ... & t2 == ...) ведь не обойдешься.

Тип TYPE_POINTER? ))
PM   Вверх
DEADHUNT
Дата 22.9.2009, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.11.2008

Репутация: нет
Всего: нет



Цитата(TheVoid @  21.9.2009,  23:41 Найти цитируемый пост)
И все-таки, как в таком случае проверить корректность типа? Простым if (t1 == ... && t1 == ... & t2 == ...) ведь не обойдешься.

можно битовую маску использовать.
Цитата(TheVoid @  21.9.2009,  23:41 Найти цитируемый пост)
Тип TYPE_POINTER? )) 

мало знать про тип что он только указатель.
PM MAIL   Вверх
DEADHUNT
Дата 12.10.2009, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.11.2008

Репутация: нет
Всего: нет



TheVoid почему свой блог удалил?

Это сообщение отредактировал(а) DEADHUNT - 12.10.2009, 11:39
PM MAIL   Вверх
TheVoid
Дата 14.10.2009, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Свернулся. В какой-то момент понял, что откусил больше, чем могу съесть...
Поизучаю исходники, укреплю теор. базу, как-нибудь потом возьмусь с новыми силами... Или свой язык придумаю (а почему бы и нет?), все-таки есть пару вещей, которых мне не хватает в Си, иморт функций из Длл, например (как в Делфи). Подумаем, очнемся от наплыва объемной информации, и в бой )
PM   Вверх
DEADHUNT
Дата 15.10.2009, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.11.2008

Репутация: нет
Всего: нет



Цитата(TheVoid @  14.10.2009,  23:43 Найти цитируемый пост)
которых мне не хватает в Си, иморт функций из Длл, например (как в Делфи). Подумаем, очнемся от наплыва объемной информации, и в бой ) 

во первых это есть, а во вторых не везде же M$ Windows с DLL
PM MAIL   Вверх
bilbobagginz
Дата 15.10.2009, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



Цитата(DEADHUNT @  15.10.2009,  18:19 Найти цитируемый пост)
во первых это есть, а во вторых не везде же M$ Windows с DLL 

да уж, и с лексом и яком познакомиться не помешало бы.



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Совместные проекты/поиск партнёров"
Snowy
Poseidon

Внимание:
В этом форуме обсуждаются вопросы только по совместным проектам, когда Вы хотите найти партнёров или стать участником проекта.
Запрещается размещение заказов на написание программ, поиск работников (для этого есть раздел "Работа") и реклама своих сетевых ресурсов.

Этот раздел только для проектов в которых Вы будете выступать в качестве исполнителя!

Темы и сообщения, не удовлетворяющие данным правилам, будут удаляться на основании пункта 3 Правил форума!

  • Человек, создающий тему, становится руководителем проекта. Все вопросы о разработке решаются с его согласия.
  • Публикация предложения к сотрудничеству считается защищённым авторскими правами и не может разрабатываться без согласия с руководителем проекта.
  • Конечный продукт должен содержать указание на всех участников и Vingrad.

  • Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, Poseidon

     
    1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
    0 Пользователей:
    « Предыдущая тема | Совместные проекты/поиск партнёров | Следующая тема »


     




    [ Время генерации скрипта: 0.0847 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


    Реклама на сайте     Информационное спонсорство

     
    По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
    Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.