Coco для C# и Паскаль
От: agos Россия http://trtrmitya.wordpress.com
Дата: 13.03.04 20:44
Оценка:
У меня такая задача: сделать парсер языка (для начала Pascal'я)
Причем парсер нужен на C#. Я огляделся вокруг и увидел, что в R# для генерации парсера выбрали Coco. Я скачал его, посмотрел. Нашел ATG файлы для Pasal и ATG файл для Delphi.
Но они оказались не совместимы с Coco для C#. Может кто-нибудь сталкивался с такой проблемой..
... << RSDN@Home 1.1.3 beta 2 >>
Не переходите улицу на тот свет..
Re: Coco для C# и Паскаль
От: psg  
Дата: 14.03.04 07:20
Оценка:
Здравствуйте, agos, Вы писали:


A>У меня такая задача: сделать парсер языка (для начала Pascal'я)

A>Причем парсер нужен на C#. Я огляделся вокруг и увидел, что в R# для генерации парсера выбрали Coco. Я скачал его, посмотрел. Нашел ATG файлы для Pasal и ATG файл для Delphi.
A>Но они оказались не совместимы с Coco для C#. Может кто-нибудь сталкивался с такой проблемой..

У меня похожая проблема — парсер Object Pascal на Object Pascal Кое-что я тоже нашел — в проекте ParserBuilder (sourcefourge.net/projects/parserbuilder). В тем есть ATG для Object Pascal (в зачаточном состоянии) и ATG для Pascal — попробуйте.
Re[2]: Coco для C# и Паскаль
От: agos Россия http://trtrmitya.wordpress.com
Дата: 14.03.04 13:15
Оценка:
Здравствуйте, psg, Вы писали:

psg>У меня похожая проблема — парсер Object Pascal на Object Pascal Кое-что я тоже нашел — в проекте ParserBuilder (sourcefourge.net/projects/parserbuilder). В тем есть ATG для Object Pascal (в зачаточном состоянии) и ATG для Pascal — попробуйте.

Да, я его тоже скачал..
Но как раз оттуда ATG файлы не подходят к C#'ному Coco
Буда разбираться как к нему писать ATG файл..
... << RSDN@Home 1.1.3 beta 2 >>
Не переходите улицу на тот свет..
Re[3]: Coco для C# и Паскаль
От: psg  
Дата: 14.03.04 16:34
Оценка:
Здравствуйте, agos, Вы писали:

A>Здравствуйте, psg, Вы писали:


Можно еще вот это попробовать:

http://www.stud.mw.tu-muenchen.de/~rz1/Grammar.html
http://www.stud.mw.tu-muenchen.de/~rz1/op4.zip
Re[4]: Coco для C# и Паскаль
От: agos Россия http://trtrmitya.wordpress.com
Дата: 15.03.04 21:16
Оценка:
Здравствуйте, psg, Вы писали:

psg>Можно еще вот это попробовать:


psg>http://www.stud.mw.tu-muenchen.de/~rz1/Grammar.html

psg>http://www.stud.mw.tu-muenchen.de/~rz1/op4.zip
Посмотрел, спасибо за инфу..
Но проблема всё равно остаётся, эти файлы не совестимы с Coco для C#
Впрочем я уже настроился на то, что буду писать сам. Заодно лучше разберусь
... << RSDN@Home 1.1.3 beta 2 >>
Не переходите улицу на тот свет..
Re[5]: Coco для C# и Паскаль
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.03.04 21:55
Оценка:
Здравствуйте, agos, Вы писали:

A>Посмотрел, спасибо за инфу..

A>Но проблема всё равно остаётся, эти файлы не совестимы с Coco для C#
A>Впрочем я уже настроился на то, что буду писать сам. Заодно лучше разберусь

Кстати, могу дать улучненный нами Coco. А то исходный совсем влоб был с С-ей портирован.

Что касается несовместимости граматик... это странно, так как синтаксис Коки мало изменился по сравнению с С-ишным. На что ругается?

И кстати, а что так странно то? Парсер Пасклая на Шарпе?
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Coco для C# и Паскаль
От: agos Россия http://trtrmitya.wordpress.com
Дата: 16.03.04 05:29
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Кстати, могу дать улучненный нами Coco. А то исходный совсем влоб был с С-ей портирован.

Буду не против Скинь, пожалуйста, на nigo(at)fca.ru Спасибо!!

VD>Что касается несовместимости граматик... это странно, так как синтаксис Коки мало изменился по сравнению с С-ишным. На что ругается?

Я взял Коко для паскаля, нашел там грамматику для Паскаля же и напрямую подставил в Coco для C#
coco.exe Op4.ATG

на это он мне ругнулся
Coco/R (Mar 3, 2004)
-- line 4 col 19: undefined name
-- line 49 col 1: "END" expected

2 errors detected

а вот и сам файл (начало его)
COMPILER Op4;

CHARACTERS
    eol         = CHR(13) .
    underScore  = "_" .
    letter      = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" .
    digit       = "0123456789" .
    hexDigit    = digit + "ABCDEFabcdef" .

    noQuote1    = ANY - "'".

IGNORE
    CHR(9) .. CHR(13)

COMMENTS      FROM "(*" TO "*)"                                  (*  4- 5 *)
COMMENTS      FROM "{"  TO  "}"
COMMENTS      FROM "//" TO  eol

TOKENS
    bracketOpn =
        "[" | "(." .
    bracketCls =
        "]" | ".)" .
    ident =                                                      (*  4- 2 *)
        ( letter | underScore )  { letter | underScore | digit } .

    intConst =
        digit { digit } | "$" hexDigit { hexDigit } .
  (*
    problem 111..999 see
            number  = digit { digit }
                    | digit { digit } CONTEXT ( ".." ) .

  *)
    realConst =
        digit { digit } "." { digit }
        [ ( "E" | "e" ) [ "+" | "-" ] digit { digit } ] .

    quotedStr =                                                  (*  4- 4 *)
        "'" { noQuote1 | "''" } "'" .

    controlChr =
        "#" ( digit { digit } | '$' hexDigit { hexDigit } ) .
(*  integer is evaluated MOD 256 *)


PRODUCTIONS

Первая ошибка мне вроде как понятна, видимо Coco не понимает CHR
А со второй непонятно, наверное, ему комментарии не понравились
К сожалению, у меня пока не получается посидеть, поэксперементировать — работы много, но сейчас кусок свой закончу, плотно займусь..

VD>И кстати, а что так странно то? Парсер Пасклая на Шарпе?

В качестве диплома решили сделать некую обучающую систему проверки исходных текстов. Причем хочется что-бы это всё дело было доступно через инет, ну и недолго думая решили писать Web-сервис на C#
Ну а так, как у нас в ВУЗе основной язык обучения является Паскаль, то и решено было первый транслятор сделать именно с Паскаля.
... << RSDN@Home 1.1.3 beta 2 >>
Не переходите улицу на тот свет..
Re[2]: Coco для C# и Паскаль
От: Dimentiy Россия  
Дата: 16.03.04 09:01
Оценка:
Здравствуйте, psg, Вы писали:

psg>У меня похожая проблема — парсер Object Pascal на Object Pascal


А для какой конкретно цели? А то вроде готовые есть.
Re[3]: Coco для C# и Паскаль
От: psg  
Дата: 16.03.04 09:09
Оценка:
Здравствуйте, Dimentiy, Вы писали:

D>Здравствуйте, psg, Вы писали:


psg>>У меня похожая проблема — парсер Object Pascal на Object Pascal


D>А для какой конкретно цели? А то вроде готовые есть.


Нужно построить syntax tree для unit (project, library, package), модифицировать его, и снова сгенерировать код на ObjectPascal. Это нужно для автоматической генерации кода.

Сейчас мы используем разметку unit'а с помощью специальных комментариев, но это уже начинает напрягать, т.к. уже половина текста завалена этими специальными комментариями...

Отсюда кстати вытекает еще одно требование к этому парсеру — он должен сохранять форматирование исходного модуля. Вот именно таких я пока не нашел, хотя есть и достаточно неплохие реализации, например парсер из CodeLens (у него еще и лицензия BSD, вообще песня
Re[7]: Coco для C# и Паскаль
От: agos Россия http://trtrmitya.wordpress.com
Дата: 16.03.04 09:21
Оценка:
Здравствуйте, agos, Вы писали:

A>Первая ошибка мне вроде как понятна, видимо Coco не понимает CHR

A>А со второй непонятно, наверное, ему комментарии не понравились
A>К сожалению, у меня пока не получается посидеть, поэксперементировать — работы много, но сейчас кусок свой закончу, плотно займусь..
Немного посидел, в итоге начало даже получатся
вот только coco глюкавая
если что не так с exception'ами вылетает

Я вот только понять не могу, что за куски кода в ATG файлах??
Не переходите улицу на тот свет..
Re[7]: Coco для C# и Паскаль
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.03.04 21:23
Оценка:
Здравствуйте, agos, Вы писали:

A>Буду не против Скинь, пожалуйста, на nigo(at)fca.ru Спасибо!!


Это 1.5 мега. Выдержит твое мыло?

VD>>Что касается несовместимости граматик... это странно, так как синтаксис Коки мало изменился по сравнению с С-ишным. На что ругается?

A>Я взял Коко для паскаля, нашел там грамматику для Паскаля же и напрямую подставил в Coco для C#
A>на это он мне ругнулся
A>
A>Coco/R (Mar 3, 2004)
A>-- line 4 col 19: undefined name
A>-- line 49 col 1: "END" expected

A>2 errors detected
A>


Ты бы указал бы хоть каких строки именно указывал Кока.

A>а вот и сам файл (начало его)

A>
A>CHARACTERS
A>    eol         = CHR(13) .
A>


Естественно! Это же файл рассчитан на паскалевский синтаксис. Для Шарповского Коки нужно так:
eol = '\u000a'. /* 10 = line feed */

A> noQuote1 = ANY — "'".


Кстати, у меня были клюки с "ANY — ххх". Так что окуратнее.

A>IGNORE

A> CHR(9) .. CHR(13)

Опять же та же фингя.

A>COMMENTS      FROM "(*" TO "*)"                                  (*  4- 5 *)


Кментарий в конце строки пасклевский. Шарповый кока поддерживает только сшиный "/* ... */"

A>TOKENS
A>    bracketOpn =
A>        "[" | "(." .
A>    bracketCls =
A>        "]" | ".)" .


Вообще-странно. Такое ощущение, что это не ATG Паскля, а самого Коки. Ведь в паскале нет "(.".

A>Первая ошибка мне вроде как понятна, видимо Coco не понимает CHR


Естествнно. Еще раз повторю. Это ATG для коки с синтаксисом Паскля (модифицированного для Паскля). Тебе нужно или искать этот вариант Коки, или заменить всю эту хрень обратно на сишный стиль.

A>А со второй непонятно, наверное, ему комментарии не понравились


Именно.

A>В качестве диплома решили сделать некую обучающую систему проверки исходных текстов. Причем хочется что-бы это всё дело было доступно через инет, ну и недолго думая решили писать Web-сервис на C#

A>Ну а так, как у нас в ВУЗе основной язык обучения является Паскаль, то и решено было первый транслятор сделать именно с Паскаля.

Нда... Странно...

Ну, вообще-то конечно парсить Паскль (особенно классический) проще всего. Это чисто LL(1) язык. Для него даже расширения КокиР не нужны. Но по-моему логичнее уж было бы тогда парсить его на Дельфи.

Зачем все эит веб-сервисы вообще не ясно. Но если из парсера сделать КОМ-сервер, то не будет проблем использовать его и из Шарпа.

Если уж очень охота именно на Шарпе, то модифицируй ATG, чтобы он был совместим с Шарповским Кокой.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Coco для C# и Паскаль
От: agos Россия http://trtrmitya.wordpress.com
Дата: 16.03.04 21:47
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это 1.5 мега. Выдержит твое мыло?

Выдержит и не такое выдерживало

VD>Естествнно. Еще раз повторю. Это ATG для коки с синтаксисом Паскля (модифицированного для Паскля). Тебе нужно или искать этот вариант Коки, или заменить всю эту хрень обратно на сишный стиль.

Я уже во всем (ну не совсем ) разобрался. Парсер уже работает. пришлось граматику подкурочить.
Та грамматика, что у меня от DElphi 4, завтра буду доделывать до чистого паскаля

Правда вот этого я тоже не понял
TOKENS
bracketOpn =
"[" | "(." .
bracketCls =
"]" | ".)" .
Но я удалил (. и .) от греха подальше, этим и ограничился

VD>Ну, вообще-то конечно парсить Паскль (особенно классический) проще всего. Это чисто LL(1) язык. Для него даже расширения КокиР не нужны. Но по-моему логичнее уж было бы тогда парсить его на Дельфи.

По большому счету .Net и C# в частности были выбраны только для совмещения приятного с полезным (обучение + написание диплома)

VD> Это чисто LL(1) язык.

Мне с этим ещё не совсем понятно. Завтра почитаю литературу, думаю разберусь

VD>Зачем все эит веб-сервисы вообще не ясно. Но если из парсера сделать КОМ-сервер, то не будет проблем использовать его и из Шарпа.

А веб-сервисы нужны вообще для понта. По сути, я так думаю, хватит и веб-приложения, но решили сделать и то и другое

VD>Если уж очень охота именно на Шарпе, то модифицируй ATG, чтобы он был совместим с Шарповским Кокой.

Уже Только я всё никак не пойму, что за код в ATG для C#??
... << RSDN@Home 1.1.3 beta 2 >>
Не переходите улицу на тот свет..
Re[9]: Coco для C# и Паскаль
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.03.04 23:43
Оценка: 6 (1)
Здравствуйте, agos, Вы писали:

A>Выдержит и не такое выдерживало


Кинул.

A>Я уже во всем (ну не совсем ) разобрался. Парсер уже работает. пришлось граматику подкурочить.

A>Та грамматика, что у меня от DElphi 4, завтра буду доделывать до чистого паскаля

Это называется кастрировать. В Паскле мой самый любимый прел — это то что тип массива зависит от количества элементов и строка из 4 символов совершенно отличный тип от строки из 5 символов.

A>Правда вот этого я тоже не понял

A>TOKENS
A> bracketOpn =
A> "[" | "(." .
A> bracketCls =
A> "]" | ".)" .
A>Но я удалил (. и .) от греха подальше, этим и ограничился

Смотри где это используется. Вообще-то скорее всего ' | "(."' нужно выбрасить.

A>По большому счету .Net и C# в частности были выбраны только для совмещения приятного с полезным (обучение + написание диплома)


Ну, тады ой...

A>Мне с этим ещё не совсем понятно. Завтра почитаю литературу, думаю разберусь


LL(1) — значит что язык можно разбирать методом рекусивного спуска заглядывая только на один токен вперед. В том же Шарпе есть места где невозможно без заглядывания на более чем 1 символ определить, что за конструкция разбирается в этот момент.

Вообще-то прежде чем начинать заниматься такими местами лучше сначала разабраться с теорией. К тому же если вам дают такие задиния, то теорию уже должны были толкать. В общем смотри ссылки в статья о R# и тут http://www.smtp.ru/~drmad/.

VD>>Зачем все эит веб-сервисы вообще не ясно. Но если из парсера сделать КОМ-сервер, то не будет проблем использовать его и из Шарпа.

A>А веб-сервисы нужны вообще для понта. По сути, я так думаю, хватит и веб-приложения, но решили сделать и то и другое

A>Уже Только я всё никак не пойму, что за код в ATG для C#??


В смысле? В КокеР для Шарпа действительно есть некоторые модификации для Шарпа. Например они контролируют, чтобы ты не использовал для модификаторов ключевые слова из Шарпа. Но в остальном там практически исходная С-ишная версия. У них же почти все основы совпадают.

Это как раз Паскалевскую версию изменяли.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Coco для C# и Паскаль
От: agos Россия http://trtrmitya.wordpress.com
Дата: 17.03.04 04:49
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Кинул.

Получил САПАСИБА!!

VD>Смотри где это используется. Вообще-то скорее всего ' | "(."' нужно выбрасить.

Судя по тому, что всё откомпилировалось, (. и .) нигде не использовалось

A>>По большому счету .Net и C# в частности были выбраны только для совмещения приятного с полезным (обучение + написание диплома)

VD>Ну, тады ой...


A>>Мне с этим ещё не совсем понятно. Завтра почитаю литературу, думаю разберусь


VD>LL(1) — значит что язык можно разбирать методом рекусивного спуска заглядывая только на один токен вперед. В том же Шарпе есть места где невозможно без заглядывания на более чем 1 символ определить, что за конструкция разбирается в этот момент.

Здорово — мне одна эта фраза сказала больше, чем несколько страниц в двух книгах

VD>Вообще-то прежде чем начинать заниматься такими местами лучше сначала разабраться с теорией. К тому же если вам дают такие задиния, то теорию уже должны были толкать. В общем смотри ссылки в статья о R# и тут http://www.smtp.ru/~drmad/.

Такую темы мы сами выбрали, кафедра просто утвердила. А по теории нам давали формальные грамматики, но до этого мы там не дошли.
А в теории компиляторов мы дошли только до БНФ. Вот так нас учат
В итоге сейчас изучаю эти разделы сам, хоть не с нуля и то хорошо.

A>>Уже Только я всё никак не пойму, что за код в ATG для C#??

VD>В смысле? В КокеР для Шарпа действительно есть некоторые модификации для Шарпа. Например они контролируют, чтобы ты не использовал для модификаторов ключевые слова из Шарпа. Но в остальном там практически исходная С-ишная версия. У них же почти все основы совпадают.
Не, я имею в виду, что в моём ATG файле нет ни строчки кода, есть только BNF (EBNF?), а ели заглянуть в CSharp.ATG то там можно найти вот это:
/*---------------------------- auxiliary methods ------------------------*/

static void Error (string s) {
    if (errDist >= minErrDist) Errors.Error(la.line, la.col, s);
    errDist = 0;
}

static bool IsTypeCast () {
    if (la.kind != _lpar) return false;
    if (IsSimpleTypeCast()) return true;
    if (assemblyName != null) return CheckTypeCast();
    return GuessTypeCast();
}

// "(" type ("[" {","} "]" | "*") ")"
static bool IsSimpleTypeCast () {
    // assert: la.kind == _lpar
    Scanner.ResetPeek();
    Token pt1 = Scanner.Peek();
    Token pt = Scanner.Peek();
    return (typeKW[pt1.kind] || pt1.kind == _void) && IsPointerOrDims(ref pt) && pt.kind == _rpar;
}

// "(" Qualident ("[" {","} "]" | "*") ")"
static bool CheckTypeCast () {
    // assert: la.kind == _lpar
    string id;
    Scanner.ResetPeek();
    Token pt = Scanner.Peek();
    return IsQualident(ref pt, out id) && IsPointerOrDims(ref pt) && 
           pt.kind == _rpar && IsType(id);
}

Я так понимаю, что этот код один в один идет в генерённые файлы??? Т.е. это просто "тюнинг" получаемого сканера?
... << RSDN@Home 1.1.3 beta 2 >>
Не переходите улицу на тот свет..
Re[11]: Coco для C# и Паскаль
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.03.04 12:42
Оценка:
Здравствуйте, agos, Вы писали:

A>Судя по тому, что всё откомпилировалось, (. и .) нигде не использовалось


Оно и понятно. Вопрос в том, что будет если в Паскалевском исходнике вместо '[' указать '(.'.

A>Здорово — мне одна эта фраза сказала больше, чем несколько страниц в двух книгах


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

A>Такую темы мы сами выбрали, кафедра просто утвердила. А по теории нам давали формальные грамматики, но до этого мы там не дошли.

A>А в теории компиляторов мы дошли только до БНФ. Вот так нас учат
A>В итоге сейчас изучаю эти разделы сам, хоть не с нуля и то хорошо.

А если не сикрет на кого учишся и где?

A>Не, я имею в виду, что в моём ATG файле нет ни строчки кода, есть только BNF (EBNF?),


Именно EBNF.

A> а ели заглянуть в CSharp.ATG то там можно найти вот это:

A>
A>/*---------------------------- auxiliary methods ------------------------*/

A>static void Error (string s) {
A>    if (errDist >= minErrDist) Errors.Error(la.line, la.col, s);
A>    errDist = 0;
A>}
A>

A>Я так понимаю, что этот код один в один идет в генерённые файлы???

Да. Но используется именно в логике парсера.

A> Т.е. это просто "тюнинг" получаемого сканера?


Нет. Это как раз борьба с не LL(1)-стью Шарпа. Половина этих функций используется для разрешения LL(1)-конфликтов. Вторая для семантических проверок. Например, проверок уместности модификаторов в конкретных конструкциях. Интересно что те же модификаторы в принципе можно четко описать в граматике, но при этом граматика резко распухает и усложняется. Не большая функция проверки позволяет сократить код парсера и сделать его более универсальным.

А так исходных cs.ATG тоже можно считать формально пустым. Правда то что я тебе прислал — это уже почти готовый парсер в AST (абстрактное синтаксическое дерево), и там кода хватает.

Кстати, как я понимаю вы хотите использовать парсер для очень похожих целей. Так что R# может оказаться для вас хорошим примером.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Coco для C# и Паскаль
От: agos Россия http://trtrmitya.wordpress.com
Дата: 17.03.04 20:50
Оценка:
Здравствуйте, VladD2, Вы писали:

A>>Судя по тому, что всё откомпилировалось, (. и .) нигде не использовалось

VD>Оно и понятно. Вопрос в том, что будет если в Паскалевском исходнике вместо '[' указать '(.'.
Честно говоря не пробывал, но думаю, что выдаст ошибку.

A>>Здорово — мне одна эта фраза сказала больше, чем несколько страниц в двух книгах

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

VD>А если не сикрет на кого учишся и где?

В МГАПИ на программиста вроде как. Только из всей нашей группы только пару ребят могут что-то реальное написать
Я тут, кстати, проглядывал дипломы прошлого года и просто изумлялся. Такие лажовые работы я в своей группе в курсовых не часто встречал. И ничего все нормально сдали. Не понимаю я нашего образования..
Вот ещё интересно есть ли у кого-нибудь опыт сдавания дипломных проектов на кафедре где и слыхом не слыхивали о .NET.
В МГУ (я как раз на этой недели там курсы прохожу) MS подарила (давно уже правда) целый компьютерный класс и там у них, на базе этой аудитории, целое .Net комъюнити. А нашей шараге до всех новых технологий по барабану

A>>Не, я имею в виду, что в моём ATG файле нет ни строчки кода, есть только BNF (EBNF?),

VD>Именно EBNF.
Интересно а грамматики используются при описаниях языков? Кто-нибудь реально расписывает четверку G=<N,T,P,S>?
В книге, которую читаю, есть небольшой пример грамматики Паскаля (объявление массива), так там сразу БНФ строят.

VD>А так исходных cs.ATG тоже можно считать формально пустым. Правда то что я тебе прислал — это уже почти готовый парсер в AST (абстрактное синтаксическое дерево), и там кода хватает.

Я заметил
VD>Кстати, как я понимаю вы хотите использовать парсер для очень похожих целей. Так что R# может оказаться для вас хорошим примером.
В целом да, мы делаем примерно тоже, только с более простым языком и не задумываемся над передачей дерева разбора компилятору.. Так что тебе ещё раз огромное спасибо за помощь!!
Кстати, мне придется немного переделать твою Коку, т.к. она отказалась воспринимать IGNORE "CASE"
Сегодня с утра Coco.ATG переделал, завтра выдастся свободная минутка, тогда поизменяю Tabc.cs. Вроде больше ничего менять не нужно (или я не прав?).
... << RSDN@Home 1.1.3 beta 2 >>
Не переходите улицу на тот свет..
Re[13]: Coco для C# и Паскаль
От: Pawell08  
Дата: 14.05.08 13:02
Оценка:
Здравствуйте, agos, Вы писали:

A>Здравствуйте, VladD2, Вы писали:


A>>>Судя по тому, что всё откомпилировалось, (. и .) нигде не использовалось

VD>>Оно и понятно. Вопрос в том, что будет если в Паскалевском исходнике вместо '[' указать '(.'.
A>Честно говоря не пробывал, но думаю, что выдаст ошибку.

A>>>Здорово — мне одна эта фраза сказала больше, чем несколько страниц в двух книгах

VD>>Вообще-то во всех книжках про это дело довольно подробно говорится. Только черезчур заумно. Порой простейщие вещи объясняются на базе трехэтажных абстраций и головоломных формул. Но тут уж ничего не поделаешь. В основном народ занимавшийся формализацией этой области бил математиками...
A>Ну да. По крайней мере когда я читаю всю эту литерату, то часто задумываюсь, а как же это применить на компьютере..

VD>>А если не сикрет на кого учишся и где?

A>В МГАПИ на программиста вроде как. Только из всей нашей группы только пару ребят могут что-то реальное написать
A>Я тут, кстати, проглядывал дипломы прошлого года и просто изумлялся. Такие лажовые работы я в своей группе в курсовых не часто встречал. И ничего все нормально сдали. Не понимаю я нашего образования..
A>Вот ещё интересно есть ли у кого-нибудь опыт сдавания дипломных проектов на кафедре где и слыхом не слыхивали о .NET.
A>В МГУ (я как раз на этой недели там курсы прохожу) MS подарила (давно уже правда) целый компьютерный класс и там у них, на базе этой аудитории, целое .Net комъюнити. А нашей шараге до всех новых технологий по барабану

A>>>Не, я имею в виду, что в моём ATG файле нет ни строчки кода, есть только BNF (EBNF?),

VD>>Именно EBNF.
A>Интересно а грамматики используются при описаниях языков? Кто-нибудь реально расписывает четверку G=<N,T,P,S>?
A>В книге, которую читаю, есть небольшой пример грамматики Паскаля (объявление массива), так там сразу БНФ строят.

VD>>А так исходных cs.ATG тоже можно считать формально пустым. Правда то что я тебе прислал — это уже почти готовый парсер в AST (абстрактное синтаксическое дерево), и там кода хватает.

A>Я заметил
VD>>Кстати, как я понимаю вы хотите использовать парсер для очень похожих целей. Так что R# может оказаться для вас хорошим примером.
A>В целом да, мы делаем примерно тоже, только с более простым языком и не задумываемся над передачей дерева разбора компилятору.. Так что тебе ещё раз огромное спасибо за помощь!!
A>Кстати, мне придется немного переделать твою Коку, т.к. она отказалась воспринимать IGNORE "CASE"
A>Сегодня с утра Coco.ATG переделал, завтра выдастся свободная минутка, тогда поизменяю Tabc.cs. Вроде больше ничего менять не нужно (или я не прав?).

Привет, грамматика Delphi для COCO случайно не сохранилась?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.