Автор |
Сообщение |
|
|
Заголовок сообщения: |
|
|
|
_Harry писал(а): На СПФ что то подобное уже делали.
на сколько понимаю, то, о чем вы говорите - это виндошные константы: \devel\~yz\wincons.html
вобщем да, можно и так сделать.
[quote="_Harry"]На СПФ что то подобное уже делали.[/quote]
на сколько понимаю, то, о чем вы говорите - это виндошные константы: \devel\~yz\wincons.html
вобщем да, можно и так сделать.
|
|
|
|
Добавлено: Ср мар 18, 2009 22:31 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
mOleg писал(а): вы правы. получается, что надо весь Си писать (точнее транслятор Си2Форт), что очень лень. другой выход - делать только часть поддержки, то есть оставлять ручную работу но, облегчать ее, собственно попытка чего и сделана.
Ну да лучше всю экзотику оставить как есть...
Думаю имеет смысл сделать утилитку которая будет пытаться разобрать файл.
И то что получилось сохранять как есть в выходном файле, а чего ей не понятно спросить у пользователя что с этим делать. Как то так.
На СПФ что то подобное уже делали.
[quote="mOleg"]вы правы. получается, что надо весь Си писать (точнее транслятор Си2Форт), что очень лень. другой выход - делать только часть поддержки, то есть оставлять ручную работу но, облегчать ее, собственно попытка чего и сделана. [/quote]
Ну да лучше всю экзотику оставить как есть...
Думаю имеет смысл сделать утилитку которая будет пытаться разобрать файл.
И то что получилось сохранять как есть в выходном файле, а чего ей не понятно спросить у пользователя что с этим делать. Как то так.
На СПФ что то подобное уже делали.
|
|
|
|
Добавлено: Ср мар 18, 2009 10:41 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
garbler писал(а): _Harry писал(а): Вообще то : #define это макрос заменяющий один текст другим. я даже скажу больше, #define обрабатывает поток лексем (как они видны компилятору), поэтому внутри аргументов могут быть запятые
Не забываем также об возможности определения "символических переменных"
[quote="garbler"][quote="_Harry"]Вообще то : #define это макрос заменяющий один текст другим.[/quote] я даже скажу больше, #define обрабатывает поток лексем (как они видны компилятору), поэтому внутри аргументов могут быть запятые [/quote]
Не забываем также об возможности определения "символических переменных"
|
|
|
|
Добавлено: Вт мар 17, 2009 22:42 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
garbler писал(а): в Си ещё битовые поля есть (и они даже используются частенько):
угу, еще и эта радость 8(
[quote="garbler"]в Си ещё битовые поля есть (и они даже используются частенько):[/quote]
угу, еще и эта радость 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;
[quote="mOleg"]пока не сделал объединения - оно надо? и нельзя писать typedef struct aaaa bbbb; с указателями тоже пока не заморачивался. выравнивание игнорируется так же (не разбирался каким должно быть) [/quote]
в Си ещё битовые поля есть (и они даже используются частенько):
[code]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;[/code]
|
|
|
|
Добавлено: Вт мар 17, 2009 20:55 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
_Harry писал(а): Еще маленькое соображение.
Все слова которые возникнут в результате обработки си-шных файлов надо использовать только во время компиляции. То есть они должны быть во временном словаре, а то их будет очень много лишних. ну, вобщем да, с другой стороны на это можно не обращать внимания. я же пока застрял на объединениях - не сложно, а скорее нудно потому что. _Harry писал(а): Еще замечание Цитата:: #define ( / name number --> ) ... Вообще то : #define это макрос заменяющий один текст другим. То есть на си будет правильно : Код:#define lalala x=(a + b )/c -4559 Если конечно компилятор знает x a b c. Хотя чаще всего так определяются константы. вы правы. получается, что надо весь Си писать (точнее транслятор Си2Форт), что очень лень. другой выход - делать только часть поддержки, то есть оставлять ручную работу но, облегчать ее, собственно попытка чего и сделана. Но, пока совсем не ясно как быть с выравниванием (там много особых случаев может быть, которые могут не быть описаны, ну к примеру, байтовые поля не выравниваются, если их 4, или они сами выравнивают значение после себя.) _Harry писал(а): Во во и что с этим "богатством синтаксиса" делать
дык, он не богатый, а нерегулярный - то есть сложно сопоставить однозначно одну конструкцию другой без проблем.
[quote="_Harry"]Еще маленькое соображение.
Все слова которые возникнут в результате обработки си-шных файлов надо использовать только во время компиляции. То есть они должны быть во временном словаре, а то их будет очень много лишних.[/quote] ну, вобщем да, с другой стороны на это можно не обращать внимания. я же пока застрял на объединениях - не сложно, а скорее нудно потому что.
[quote="_Harry"]Еще замечание Цитата:: #define ( / name number --> ) ... Вообще то : #define это макрос заменяющий один текст другим. То есть на си будет правильно : Код:#define lalala x=(a + b )/c -4559 Если конечно компилятор знает x a b c. Хотя чаще всего так определяются константы.[/quote] вы правы. получается, что надо весь Си писать (точнее транслятор Си2Форт), что очень лень. другой выход - делать только часть поддержки, то есть оставлять ручную работу но, облегчать ее, собственно попытка чего и сделана. Но, пока совсем не ясно как быть с выравниванием (там много особых случаев может быть, которые могут не быть описаны, ну к примеру, байтовые поля не выравниваются, если их 4, или они сами выравнивают значение после себя.)
[quote="_Harry"]Во во и что с этим "богатством синтаксиса" делать[/quote]
дык, он не богатый, а нерегулярный - то есть сложно сопоставить однозначно одну конструкцию другой без проблем.
|
|
|
|
Добавлено: Вт мар 17, 2009 20:33 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
garbler
Во во и что с этим "богатством синтаксиса" делать
[b]garbler[/b]
Во во и что с этим "богатством синтаксиса" делать
:^)
|
|
|
|
Добавлено: Вт мар 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);
[quote="_Harry"]Вообще то : #define это макрос заменяющий один текст другим.[/quote]
я даже скажу больше, #define обрабатывает поток лексем (как они видны компилятору),
поэтому внутри аргументов могут быть запятые
вот этот код вполне корректен:
[code]#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);) }[/code]
с точки зрения препроцессора тут 3 аргумента:
[list]1) func(1,2,3) 2) {1.2;(4,5)} 3) func(",,,\n"); func(1,2,(2,3,4),3);[/list]
|
|
|
|
Добавлено: Вт мар 17, 2009 16:28 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Цитата: да, пардон, там следующее: Ага ок. Еще маленькое соображение. Все слова которые возникнут в результате обработки си-шных файлов надо использовать только во время компиляции. То есть они должны быть во временном словаре, а то их будет очень много лишних. С #define все понятно, а вот как быть с полями структур? Еще замечание Цитата: : #define ( / name number --> ) ...
Вообще то : #define это макрос заменяющий один текст другим.
То есть на си будет правильно :
Код: #define lalala x=(a + b )/c -4559 Если конечно компилятор знает x a b c.
Хотя чаще всего так определяются константы.
[quote]да, пардон, там следующее:[/quote] Ага ок. Еще маленькое соображение. Все слова которые возникнут в результате обработки си-шных файлов надо использовать только во время компиляции. То есть они должны быть во временном словаре, а то их будет очень много лишних. С #define все понятно, а вот как быть с полями структур?
Еще замечание [quote]: #define ( / name number --> ) ...[/quote]
Вообще то : #define это макрос заменяющий один текст другим.
То есть на си будет правильно :
[code]#define lalala x=(a + b )/c -4559[/code] Если конечно компилятор знает 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>
[quote="_Harry"]В последней выложеной сборке этого нет. Что там?[/quote]
да, пардон, там следующее:
<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
В последней выложеной сборке этого нет. Что там?
[quote]string/ c-parser.fts[/quote]
В последней выложеной сборке этого нет. Что там?
|
|
|
|
Добавлено: Пн мар 16, 2009 12:15 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Да, Вы правы.
Да, Вы правы.
|
|
|
|
Добавлено: Вс мар 15, 2009 23:21 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Wlad писал(а): Как-то неуютно на каждую структуры - свой словарь... Или это во мне сишник беснуется?
а как иначе. Все упирается в пространства имен. В сях на каждую структуру свое пространство...
по крайней мере в доке по ваткомовскому Си.
[quote="Wlad"]Как-то неуютно на каждую структуры - свой словарь... Или это во мне сишник беснуется?[/quote]
а как иначе. Все упирается в пространства имен. В сях на каждую структуру свое пространство...
по крайней мере в доке по ваткомовскому Си.
|
|
|
|
Добавлено: Вс мар 15, 2009 21:11 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Как-то неуютно на каждую структуры - свой словарь...
Или это во мне сишник беснуется?
Как-то неуютно на каждую структуры - свой словарь... :shock:
Или это во мне сишник беснуется? :dmad;
|
|
|
|
Добавлено: Вс мар 15, 2009 21:00 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
да, для каждой структуры создается собственный словарь в корневом словаре с именем WS , то есть предполагается использовать типа так:
WS _BY_HANDLE_FILE_INFORMATION nFileSizeHigh
от переменной state использование не зависит.
вот.
да, для каждой структуры создается собственный словарь в корневом словаре с именем WS , то есть предполагается использовать типа так:
WS _BY_HANDLE_FILE_INFORMATION nFileSizeHigh
от переменной state использование не зависит.
вот.
|
|
|
|
Добавлено: Вс мар 15, 2009 00:19 |
|
|
|
|