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

Поиск:

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


Новичок



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

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



Руководствуюсь, в основном, K&R, хотя на полке пылится Шилдт со своим "Полным описанием С" (С99). Да нет, конечно, мне не претят новые веяния, обновленные стандарты и прочее, только хочу сейчас сосредоточиться на базовых вещах, я ведь учусь в первую очередь.

Это сообщение отредактировал(а) TheVoid - 20.9.2009, 11:42
PM   Вверх
DEADHUNT
Дата 20.9.2009, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(TheVoid @  19.9.2009,  23:58 Найти цитируемый пост)
Руководствуюсь, в основном, K&R, хотя на полке пылится Шилдт со своим "Полным описанием С" (С99). Да нет, конечно, мне не претят новые веяния, обновленные стандарты и прочее, только хочу сейчас сосредоточиться на базовых вещах, я ведь учусь в первую очередь.

я имел ввиду в электронном виде, C99 вообще-то здесь находится http://www.open-std.org/JTC1/SC22/WG14/

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


Новичок



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

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



DEADHUNT, пожалуйста, расскажите о семантических правилах - что это и куда привинчивается, желательно с абстрактным примером.

Книга-книгой, но а вдруг я что-то понял неправильно.

Это сообщение отредактировал(а) TheVoid - 20.9.2009, 11:44
PM   Вверх
DEADHUNT
Дата 20.9.2009, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(TheVoid @  20.9.2009,  11:43 Найти цитируемый пост)
Книга-книгой, но а вдруг я что-то понял неправильно.

приведи пример, в документации к yacc всё описано(много разных тонкостей).
Код
type_spec_seq : type_spec_seq type_spec { семантические правила }
                             | type_spec { семантические правила }
                             ;

simple_type_spec : "void" { $$ = void_type; }
                                  | "char" { $$ = char_type; }
                                  ...
                                  ;

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


Новичок



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

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



Yacc-ом я не пользуюсь, все вручную.

Цитата(DEADHUNT @  20.9.2009,  12:48 Найти цитируемый пост)
приведи пример

По грамматике строится нисходящий синтаксический анализатор, народе

Код

<Var Decl>    ::=    <Type> <Var> <Var List>  ';'             
<Var>    ::=    ID             
<Var List>    ::=    ',' <Var> <Var List>
         | 


Код

void SVarDecl(void)
{
    SType();
    SVar();
    SVarList();
    Match(';');
}


Хм... в общем-то я и не представляю, что делать дальше smile

Это сообщение отредактировал(а) TheVoid - 20.9.2009, 12:59
PM   Вверх
DEADHUNT
Дата 20.9.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(TheVoid @  20.9.2009,  12:58 Найти цитируемый пост)
Yacc-ом я не пользуюсь, все вручную.

тогда ты наверное год будешь LR списки высчитывать(чтобы таблицы Action, Goto затем построить), потом где нибудь ошибёшься, ну и дальнейшее расширение станет не возможным(надо будет поновой таблицу строить, оптимизировать, ...), ну и самое главное не выйдет у тебя анализатор.

вроде с умом начинал препроцессор делать, а теперь....

Добавлено через 1 минуту и 48 секунд
Цитата(TheVoid @  20.9.2009,  12:58 Найти цитируемый пост)
Yacc-ом я не пользуюсь, все вручную.

значит рекурсивный спуск(без использования LL/LR/... анализаторов), зачем только тогда грамматику составлять?
PM MAIL   Вверх
TheVoid
Дата 20.9.2009, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(DEADHUNT @  20.9.2009,  14:08 Найти цитируемый пост)
зачем только тогда грамматику составлять?

Возможно, я чего-то не понял, но... В смысле - зачем?
Для рекурсивного нисходящего парсера нужны правила, по которым будут строится "парсящие процедуры", по терминологии Википедии. Я смотрю на правила и по ним пишу соответствующие функции. 
PM   Вверх
DEADHUNT
Дата 20.9.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(TheVoid @  20.9.2009,  14:17 Найти цитируемый пост)
Для рекурсивного нисходящего парсера нужны правила, по которым будут строится "парсящие процедуры", по терминологии Википедии

типо того, только зачем их составлять если всё это описано в стандарте(в разделе grammar summary находятся полная грамматика)?
PM MAIL   Вверх
TheVoid
Дата 20.9.2009, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(DEADHUNT @  20.9.2009,  14:36 Найти цитируемый пост)
находятся полная грамматика

Грамматика подмножества != Полная грамматика
PM   Вверх
DEADHUNT
Дата 20.9.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(TheVoid @  20.9.2009,  14:43 Найти цитируемый пост)
Грамматика подмножества != Полная грамматика

выбрасывай из полной грамматики что тебе надо.

Это сообщение отредактировал(а) DEADHUNT - 20.9.2009, 15:00
PM MAIL   Вверх
TheVoid
Дата 21.9.2009, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Итак, по упрощенной грамматике написал синтаксический анализатор. Текущее состояния сего чуда инженерной мысли - допуск /отказ входного файла. Причем, анализ поверхностный: имена переменных не вносятся в таблицу символов, соответственно, не проверяется, были ли они объявлены ранее или нет.
Меня интересует следующие: как прикрутить семантический анализ?

Вот, кое-что из исходного кода, посмотрите и скажите, насколько он плох:

Код

// Получение типа текущего токена
static int Token(void)
{
    return ScanGetToken()->tokType;
}

// Проверка соответствия
static void Match(int t)
{
    if (ScanGetToken()->tokType == t) ScanNextToken();
    else Error(ERR__SYN__UNMATCH_TOKEN);
}

// Lookahead
static int Lookahead(void)
{
    ScanNextToken();
    int look = ScanGetToken()->tokType;
    ScanUnGetToken();
    return look;
}

// Грамматика SimplexC

extern void p_Decls(void);
extern void p_Decl(void);
extern void p_FunctionDefinition(void);
extern void p_VariableDefinition(void);
...

// Синтаксический разбор
void p_Decls(void)
{
    while (Token() != TOKEN_EOF)
    {
        p_Decl();
    }
}

void p_Decl(void)
{
    // Получение типа
    p_Type();
    // Определение
    if (Lookahead() == TOKEN_LBR) p_FunctionDefinition();
    else p_VariableDefinition();
}

void p_VariableDefinition(void)
{
    p_Variables();
    Match(TOKEN_SEMI);
}

void p_Variables(void)
{
    p_Variable();
    while (Token() == TOKEN_COMMA)
    {
        Match(TOKEN_COMMA);
        p_Variable();
    }
}

void p_Variable(void)
{
    Match(TOKEN_ID);
}

void p_FunctionDefinition(void)
{
    Match(TOKEN_ID);
    Match(TOKEN_LBR);
    p_Params();
    Match(TOKEN_RBR);
    p_Block();
}

...



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


Шустрый
*


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

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



Код

static int Match(int t)
{
    if (ScanGetToken()->tokType == t) 
    {
        ScanNextToken();
        return 1;
     }
    else 
    {
        Error(ERR__SYN__UNMATCH_TOKEN);
        return 0;
    }
}

у тебя даже нигде не идёт распознание типов(type specifier), так-что тебе и проверять нечего.
PM MAIL   Вверх
TheVoid
Дата 21.9.2009, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Чего-чего? Это к синтаксическому анализу вообще относится или к чему?
PM   Вверх
DEADHUNT
Дата 21.9.2009, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(TheVoid @  21.9.2009,  22:15 Найти цитируемый пост)
Чего-чего? Это к синтаксическому анализу вообще относится или к чему? 

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


Новичок



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

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



Понятно.
Короче говоря, вопрос решен, всем спасибо, все свободны.
PM   Вверх
Страницы: (7) Все « Первая ... 3 4 [5] 6 7 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Совместные проекты/поиск партнёров"
Snowy
Poseidon

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

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

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

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

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

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


     




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


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

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