OSDev http://osdev.su/ |
|
Как компиляторы Си хранят информацию о типах? http://osdev.su/viewtopic.php?f=5&t=996 |
Страница 1 из 1 |
Автор: | Bizun [ 22 авг 2014, 16:59 ] |
Заголовок сообщения: | Как компиляторы Си хранят информацию о типах? |
Я когда то писал простенький компилятор подмножества Си, очень близкий к SmallC. В нем у меня было все просто - тип мог быть либо char, либо int, либо указателем на эти типы/массиввом. Теперь же, мне нужно реализовать все так, как это реализовано в C89. Т.е. должны парсится такие выражения: Код: char *(*(**foo[][8])())[]; Не представляю как это реализовать. Пробовал смотреть исходники TCC, но понял, что это займет черезчур много времение, надеюсь здесь помогут быстрее. |
Автор: | SII [ 22 авг 2014, 17:04 ] |
Заголовок сообщения: | Re: Как компиляторы Си хранят информацию о типах? |
Всё так или иначе сведётся к спискам -- иначе это просто невозможно сделать. |
Автор: | Bizun [ 22 авг 2014, 17:17 ] |
Заголовок сообщения: | Re: Как компиляторы Си хранят информацию о типах? |
SII писал(а): Всё так или иначе сведётся к спискам -- иначе это просто невозможно сделать. Кажется, в TCC так и делали. Но ок, пусть список. Тогда как это будет выглядеть в списке: Код: char *(*(**foo[][8])())[]; Не представляю |
Автор: | pavia [ 22 авг 2014, 18:40 ] |
Заголовок сообщения: | Re: Как компиляторы Си хранят информацию о типах? |
Списком не хранят так как вложенность не отработать. Хранят деревом. TCC не знаю что такое. Лучше изучите http://llvm.org/releases/3.4.2/cfe-3.4.2.src.tar.gz Достаточно простой код. или gcc порт apple http://www.opensource.apple.com/source/ ... gcc/expr.c |
Автор: | SII [ 22 авг 2014, 18:59 ] |
Заголовок сообщения: | Re: Как компиляторы Си хранят информацию о типах? |
Именно что списком. Дерево абсолютно не требуется, поскольку последовательность типов линейная, а не "ветвистая". |
Автор: | Lincor [ 24 авг 2014, 13:58 ] |
Заголовок сообщения: | Re: Как компиляторы Си хранят информацию о типах? |
SII писал(а): Именно что списком. Дерево абсолютно не требуется, поскольку последовательность типов линейная, а не "ветвистая". для указателей на функции требуется. аргументы в одной ветке, тип возвращаемого значения - в другой. |
Автор: | Himik [ 24 авг 2014, 19:13 ] |
Заголовок сообщения: | Re: Как компиляторы Си хранят информацию о типах? |
Lincor писал(а): для указателей на функции требуется. аргументы в одной ветке, тип возвращаемого значения - в другой. Насколько я понимаю, у него и до этого были функции, принимающие и возвращающие разные типы. Тут проблема в усложнении самих типов, работа с которыми состоит из длинной цепочки действий, и её (цепочку действий) наверно можно представить списком. |
Автор: | rst256 [ 19 фев 2015, 03:19 ] |
Заголовок сообщения: | Re: Как компиляторы Си хранят информацию о типах? |
Bizun писал(а): SII писал(а): Всё так или иначе сведётся к спискам -- иначе это просто невозможно сделать. Кажется, в TCC так и делали. Но ок, пусть список. Тогда как это будет выглядеть в списке: Код: char *(*(**foo[][8])())[]; Не представляю Тсс так и делает, почему делал? он же никуда не делся! Тсс и сейчас живее всех живых! файл исходников tccgen.c - начни с функции parse_expr_type (строка ~ 3400 и ниже) файл исходников tcc.h - декларации структур тут. Исходники качать отсюда http://bellard.org/tcc/ Т.к. парсер тсс писался в ручную, его код зачастую проще для понимания чем творения того же antlr'a, рекомендую. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |