Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт апр 25, 2024 05:10

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - разбор сишных структур и перечислений
Автор Сообщение
  Заголовок сообщения:   Ответить с цитатой
_Harry писал(а):
На СПФ что то подобное уже делали.

на сколько понимаю, то, о чем вы говорите - это виндошные константы: \devel\~yz\wincons.html
вобщем да, можно и так сделать.
Сообщение Добавлено: Ср мар 18, 2009 22:31
  Заголовок сообщения:   Ответить с цитатой
mOleg писал(а):
вы правы. получается, что надо весь Си писать (точнее транслятор Си2Форт), что очень лень.
другой выход - делать только часть поддержки, то есть оставлять ручную работу но, облегчать ее, собственно попытка чего и сделана.


Ну да лучше всю экзотику оставить как есть...
Думаю имеет смысл сделать утилитку которая будет пытаться разобрать файл.
И то что получилось сохранять как есть в выходном файле, а чего ей не понятно спросить у пользователя что с этим делать. Как то так.
На СПФ что то подобное уже делали.
Сообщение Добавлено: Ср мар 18, 2009 10:41
  Заголовок сообщения:   Ответить с цитатой
garbler писал(а):
_Harry писал(а):
Вообще то : #define это макрос заменяющий один текст другим.

я даже скажу больше, #define обрабатывает поток лексем (как они видны компилятору),
поэтому внутри аргументов могут быть запятые

Не забываем также об возможности определения "символических переменных"
Сообщение Добавлено: Вт мар 17, 2009 22:42
  Заголовок сообщения:   Ответить с цитатой
garbler писал(а):
в Си ещё битовые поля есть (и они даже используются частенько):

угу, еще и эта радость 8(
Сообщение Добавлено: Вт мар 17, 2009 21:00
  Заголовок сообщения:   Ответить с цитатой
mOleg писал(а):
пока не сделал объединения - оно надо?
и нельзя писать
typedef struct aaaa bbbb;
с указателями тоже пока не заморачивался.
выравнивание игнорируется так же (не разбирался каким должно быть)


в Си ещё битовые поля есть (и они даже используются частенько):
Код:
typedef struct _LDT_ENTRY {
    WORD    LimitLow;
    WORD    BaseLow;
    union {
        struct {
            BYTE    BaseMid;
            BYTE    Flags1;     // Declare as bytes to avoid alignment
            BYTE    Flags2;     // Problems.
            BYTE    BaseHi;
        } Bytes;
        struct {
            DWORD   BaseMid : 8;
            DWORD   Type : 5;
            DWORD   Dpl : 2;
            DWORD   Pres : 1;
            DWORD   LimitHi : 4;
            DWORD   Sys : 1;
            DWORD   Reserved_0 : 1;
            DWORD   Default_Big : 1;
            DWORD   Granularity : 1;
            DWORD   BaseHi : 8;
        } Bits;
    } HighWord;
} LDT_ENTRY, *PLDT_ENTRY;
Сообщение Добавлено: Вт мар 17, 2009 20:55
  Заголовок сообщения:   Ответить с цитатой
_Harry писал(а):
Еще маленькое соображение.

Все слова которые возникнут в результате обработки си-шных файлов надо использовать только во время компиляции. То есть они должны быть во временном словаре, а то их будет очень много лишних.

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

_Harry писал(а):
Еще замечание
Цитата:: #define ( / name number --> ) ...
Вообще то : #define это макрос заменяющий один текст другим.
То есть на си будет правильно :
Код:#define lalala  x=(a + b )/c -4559 Если конечно компилятор знает x a b c.
Хотя чаще всего так определяются константы.

вы правы. получается, что надо весь Си писать (точнее транслятор Си2Форт), что очень лень.
другой выход - делать только часть поддержки, то есть оставлять ручную работу но, облегчать ее, собственно попытка чего и сделана.
Но, пока совсем не ясно как быть с выравниванием (там много особых случаев может быть, которые могут не быть описаны, ну к примеру, байтовые поля не выравниваются, если их 4, или они сами выравнивают значение после себя.)

_Harry писал(а):
Во во и что с этим "богатством синтаксиса" делать

дык, он не богатый, а нерегулярный - то есть сложно сопоставить однозначно одну конструкцию другой без проблем.
Сообщение Добавлено: Вт мар 17, 2009 20:33
  Заголовок сообщения:   Ответить с цитатой
garbler
Во во и что с этим "богатством синтаксиса" делать
:^)
Сообщение Добавлено: Вт мар 17, 2009 17:27
  Заголовок сообщения:   Ответить с цитатой
_Harry писал(а):
Вообще то : #define это макрос заменяющий один текст другим.

я даже скажу больше, #define обрабатывает поток лексем (как они видны компилятору),
поэтому внутри аргументов могут быть запятые

вот этот код вполне корректен:

Код:
#define x(a,b,c) a; b; c

main()
{
x(func(1,2,3),{1.2;(4,5)},func(",,,\n"); func(1,2,(2,3,4),3);)
}


с точки зрения препроцессора тут 3 аргумента:
    1) func(1,2,3)
    2) {1.2;(4,5)}
    3) func(",,,\n"); func(1,2,(2,3,4),3);
Сообщение Добавлено: Вт мар 17, 2009 16:28
  Заголовок сообщения:   Ответить с цитатой
Цитата:
да, пардон, там следующее:

Ага ок.
Еще маленькое соображение.
Все слова которые возникнут в результате обработки си-шных файлов надо использовать только во время компиляции. То есть они должны быть во временном словаре, а то их будет очень много лишних.
С #define все понятно, а вот как быть с полями структур?

Еще замечание
Цитата:
: #define ( / name number --> ) ...

Вообще то : #define это макрос заменяющий один текст другим.
То есть на си будет правильно :
Код:
#define lalala  x=(a + b )/c -4559
Если конечно компилятор знает x a b c.
Хотя чаще всего так определяются константы.
Сообщение Добавлено: Вт мар 17, 2009 11:02
  Заголовок сообщения:   Ответить с цитатой
_Harry писал(а):
В последней выложеной сборке этого нет. Что там?

да, пардон, там следующее:
<pre>
\ 27.02.2009 ~mOleg
\ Сopyright [C] 2009 mOleg mininoleg@yahoo.com
\ парсер Си-шных лексем

ALSO FORTH DEFINITIONS
util/ ufl.fts
util/ numbers.fts
string/ xWord.fts
string/ add.fts
RECENT

\ список разделителей токенов в Си
s" !"#%&'()*+,-./:;<=>?[\\]^{|}~ " Delimiter: c-delimiters

\ взять из входного потока очередной токен
: c-token ( --> asc # )
SkipDelimiters
c-delimiters xWord *IF ;THEN
DROP EndOfChunk IF 0 ;THEN
DUP C# SkipChar ;

\ взять из входного потока очередной токен
: C-TOKEN ( --> asc # )
BEGIN c-token DUP WHILENOT
DROP REFILL *WHILE
DDROP
REPEAT
THEN ;

\ определить систему счисления в которой записано число
: ?c-base ( asc # --> asc # base )
OVER C@ [CHAR] 0 =
IFNOT 0x0A
ELSE SKIP1
OVER C@ [CHAR] x [CHAR] X OneOf
IF SKIP1 0x10
ELSE 0x08
THEN
THEN ;

\ удалить буквы U L LL UL в конце строки
: ?suffix ( asc # --> asc # )
DDUP + <C C@ [CHAR] F > + \ любой символ больше 'F' удаляется
DDUP + <C C@ [CHAR] F > + ;

\ распознать число согласно Си-шным правилам: 1234 01234 0x1234
: c-val ( asc # --> n )
?suffix ?SIGN >L ?c-base S>VAL \ --> ud flag
IFNOT ERROR" Число записано неверно!" THEN
ABORT" Слишком большое число!"
L> IF NEGATE THEN ;

\ пропустить все лексемы вплодь до первой встречи символа ';' включая последний
: SkipTo; ( / ???; --> ) BEGIN C-TOKEN s" ;" S?= WHILENOT DDROP REPEAT ;
</pre>
Сообщение Добавлено: Пн мар 16, 2009 21:13
  Заголовок сообщения:   Ответить с цитатой
Цитата:
string/ c-parser.fts

В последней выложеной сборке этого нет. Что там?
Сообщение Добавлено: Пн мар 16, 2009 12:15
  Заголовок сообщения:   Ответить с цитатой
Да, Вы правы.
Сообщение Добавлено: Вс мар 15, 2009 23:21
  Заголовок сообщения:   Ответить с цитатой
Wlad писал(а):
Как-то неуютно на каждую структуры - свой словарь...
Или это во мне сишник беснуется?

а как иначе. Все упирается в пространства имен. В сях на каждую структуру свое пространство...
по крайней мере в доке по ваткомовскому Си.
Сообщение Добавлено: Вс мар 15, 2009 21:11
  Заголовок сообщения:   Ответить с цитатой
Как-то неуютно на каждую структуры - свой словарь... :shock:
Или это во мне сишник беснуется? :dmad;
Сообщение Добавлено: Вс мар 15, 2009 21:00
  Заголовок сообщения:   Ответить с цитатой
да, для каждой структуры создается собственный словарь в корневом словаре с именем WS , то есть предполагается использовать типа так:

WS _BY_HANDLE_FILE_INFORMATION nFileSizeHigh

от переменной state использование не зависит.
вот.
Сообщение Добавлено: Вс мар 15, 2009 00:19

Часовой пояс: UTC + 3 часа [ Летнее время ]


cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB