Re[33]: Граматика С++
От: mefrill Россия  
Дата: 10.08.04 13:14
Оценка:
Здравствуйте, WeCom, Вы писали:

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


WC>>>В моем понимании, теория трансляции это раздел computer science, изучающий построение трансляторов (компиляторов в частности), в том числе включающая в себя теорию синтаксического анализа, перевода и компиляции (а может и совпадающая с этой теорией).


M>>Ну это неверное понимание.

WC>Хорошо, пусть будет так. Радует только одно — большое число ВУЗов ошибается вместе со мной (не верите? — просто внимательно изучите программы курсов "теория трансляции" или "теория формальных языков и трансляций" которых в инете полным полно).
WC>Далее постараюсь не смущать Вас и буду пользоваться "теория синтаксического анализа, перевода и компиляции".

Значит, ошибаются вместе с Вами, хотя я этого не встречал. По ссылке, который Вы меня посылали, кстати теория трансляции означает именно то, о чем говорил я.

M>>Называть вещи так как Вам хочется — это Ваше право. Но в дисскусии необходимо использовать утвердившуюся терминологию, хотя бы из уважения к собеседникам.

WC>Тут Вы правы. Но мне единственное, не понятно, неужели сложно внимательно поискать в сети, что ПРИНЯТО называть теорией транслиции.


WC>>>Нет, Вы в контексте форума теорию применяете не к тому языку.


M>>Не могли бы НОРМАЛЬНО объяснить, КАКУЮ теорию я некорректно применяю к КАКОМУ языку.

WC>КАКУЮ — теорию формальных языков (грамматик).
WC>КАКОМУ — языку состоящему из всех wellformed программ (единиц трансляции) на языке программирования С++

Ну хорошо.

1) Что изучает теория формальных языков? Ответ: формальные языки.

2) Что такое формальный язык? Ответ: в теории формальных языков формальный язык определяется как множество строк, состоящих из конечного алфавита.

3) Рассмотрим язык си++ как формальный язык. Т.е. определим формальный язык си++. Согласно 2) это некоторое множество строк (программ), построенных из алфавита, определенного в стандарте как базовое множество символов.

Где я не прав?

M>>Я думаю, что я применяю понятия теории формальных языков, а следовательно, и саму теорию к языку си++, который понимается мною как формальный язык.

WC>Ну что тут поделаешь? Называть вещи (С++) так как Вам хочется (формальным языком) — это Ваше право. Но в дисскусии необходимо использовать утвердившуюся (нормативно утвержденную) терминологию, хотя бы из уважения к священной книге.

Снова Вы пытаетесь, не отвечая по существу на вопрос, каким-то образом оскорбить меня. Как я уже говорил ранее, я это расцениваю просто как попытку скрыть отсутствие аргументов. Как я понял, в предложении выше Вы пытаетесь представить меня как некого ортодокса — инквизитора, который не приемлет свободу мысли и пытается подавить Вас книжными знаниями. Чтож, отвечать Ва на это я не буду дабы не отвлекаться от главного.

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

M>>Ведь было бы некорректно применять теорию формальных языков к неформальному языку?

WC>Так о чем и разговор...
Re[27]: Граматика С++
От: WeCom Беларусь  
Дата: 10.08.04 13:18
Оценка:
Здравствуйте, mefrill, Вы писали:

WC>>А я настаиваю, что в контексте темы формальный язык, относительно которого ведется спор, должен определяться, как синтаксически верное подмножество wellformed программ языка программирования С++. А то что Вы сказали — это просто определение языка в теории, а поэтому бессодержательно представление здесь каких-то еще аргументов.


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

Я оперирую понятием именно в соответствии с этим определением. Единственное, у меня описка. Вместо подмножество, должно быть надмножество.

M>Понимаете, Вашу грамматику невозможно ДОПОЛНИТЬ, ибо в ней явно определен идентификатор как нетерминал.

Понимаете ли, я специально "разрешал" Вам при необходимости исправить уже приведенные правила, но в процессе редактирования стер это "разрешение" (честное слово). Дополните, пожалуйста грамматику с учетом "разрешения".

M>Таким образом, полагаю, что вопрос выяснен?.

Вы еще не убедились, что все Ваши выкладки кроме академического интереса другого не имеют?
Re[28]: Граматика С++
От: mefrill Россия  
Дата: 10.08.04 13:30
Оценка:
Здравствуйте, WeCom, Вы писали:

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


WC>>>А я настаиваю, что в контексте темы формальный язык, относительно которого ведется спор, должен определяться, как синтаксически верное подмножество wellformed программ языка программирования С++. А то что Вы сказали — это просто определение языка в теории, а поэтому бессодержательно представление здесь каких-то еще аргументов.


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

WC>Я оперирую понятием именно в соответствии с этим определением. Единственное, у меня описка. Вместо подмножество, должно быть надмножество.

M>>Понимаете, Вашу грамматику невозможно ДОПОЛНИТЬ, ибо в ней явно определен идентификатор как нетерминал.

WC>Понимаете ли, я специально "разрешал" Вам при необходимости исправить уже приведенные правила, но в процессе редактирования стер это "разрешение" (честное слово). Дополните, пожалуйста грамматику с учетом "разрешения".

Ну я же привел ссылку??? Там грамматика есть, проще не получится. Я же говорю, что теорию формальных языков — довольно сложная вещь, с наскока не взять. Поэтому и получается, что мы с Вами говорим на разных языках.

M>>Таким образом, полагаю, что вопрос выяснен?.

WC>Вы еще не убедились, что все Ваши выкладки кроме академического интереса другого не имеют?

ну и к чему такое пренебрежительное отношение к слову "академический"? Да, мне скучно сидеть и набивать код для компилятора, это рутинная задача, не имеющая творческого начала. Поэтому я занимаюсь более широкими вопросами и это, как раз (как мне представляется) и позволяет мне судить о тех вещах, которые мы обсуждаем. Совершенно не понимаю сарказма. Относительно методов синтаксического анализа, так есть методы для КЗ-языков. И неплохие довольно. Кстати, все учебники, в том числе и знаменитого Дракона, именно люди из академических кругов пишут. Те, которые занимаются "академическими" вещами.
Re[5]: Граматика С++
От: WolfHound  
Дата: 10.08.04 13:45
Оценка:
Здравствуйте, mefrill, Вы писали:

M>Мне кажется, что там говорилось немного о другом, а именно, о выразительной мощи языка, а не о мощи определяющей его грамматики. А это, мне кажется, разные вещи. Вот например, скриптовые языки, в принципе, можно определить КС-грамматикой, выразительная мощность его та же, что и машины Тьюринга. Конечно, с некоторыми ограничениями, связанными с объемом памяти реальной машины. Иначе, реализация любого языка программирования эквивалентен линейно ограниченному автомату.

Ты по второй ссылке ходил? Там пример того как компилятор С++ можно превратить в интерпретатор функционального языка.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: Граматика С++
От: mefrill Россия  
Дата: 10.08.04 13:57
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


M>>Мне кажется, что там говорилось немного о другом, а именно, о выразительной мощи языка, а не о мощи определяющей его грамматики. А это, мне кажется, разные вещи. Вот например, скриптовые языки, в принципе, можно определить КС-грамматикой, выразительная мощность его та же, что и машины Тьюринга. Конечно, с некоторыми ограничениями, связанными с объемом памяти реальной машины. Иначе, реализация любого языка программирования эквивалентен линейно ограниченному автомату.

WH>Ты по второй ссылке ходил? Там пример того как компилятор С++ можно превратить в интерпретатор функционального языка.

Нет, ну это понятно. Там же есть рекурсивные функции (шаблоны) и возможности эту рекурсию останавливать (явные специализации). Так что полностью с этим согласен. Вопрос то был в другом, в синтаксических свойствах языка, а не в семантической его интерпретации.
Re[34]: Граматика С++
От: WeCom Беларусь  
Дата: 10.08.04 15:01
Оценка:
Здравствуйте, mefrill, Вы писали:

M>>>Не могли бы НОРМАЛЬНО объяснить, КАКУЮ теорию я некорректно применяю к КАКОМУ языку.

WC>>КАКУЮ — теорию формальных языков (грамматик).
WC>>КАКОМУ — языку состоящему из всех wellformed программ (единиц трансляции) на языке программирования С++

M>Ну хорошо.


M>1) Что изучает теория формальных языков? Ответ: формальные языки.

Точно.

M>2) Что такое формальный язык? Ответ: в теории формальных языков формальный язык определяется как множество строк, состоящих из конечного алфавита.

Вроде, как множество конечных строк, но непринципивально.

M>3) Рассмотрим язык си++ как формальный язык. Т.е. определим формальный язык си++. Согласно 2) это некоторое множество строк (программ), построенных из алфавита, определенного в стандарте как базовое множество символов.

Имеете право. О чем я Вам и твержу. Вы взяли язык программирования С++. Определили формальный язык как множество wellformed строк С++ и для этого языка провели исследование. Здесь Вы правы.
А неправы Вы вот в чем:
-Чисто формально язык С++ — это не формальный язык по определению (но это замечание несущественно);
Аргумент1. Стандарт С++ не определяет и не подразумевает грамматику для языка, который Вы рассматривали;
Аргумент2. Грамматика С++ — это грамматика для синтаксического разбора == грамматика для языка представляющего из себя множество синтаксически-верных строк С++.

M>Снова Вы пытаетесь, не отвечая по существу на вопрос, каким-то образом оскорбить меня. Как я уже говорил ранее, я это расцениваю просто как попытку скрыть отсутствие аргументов.

Аргументы выше, но проблема в том, что для Вас стандарт С++ — не авторитет. И это входит в некоторое противоречие с данным разделом форума.

M>Как я понял, в предложении выше Вы пытаетесь представить меня как некого ортодокса — инквизитора, который не приемлет свободу мысли и пытается подавить Вас книжными знаниями.

Нет Я вас в шутку называл сектантом. Жаль, что Вы на это обижаетесь.

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

Вы правы в рамках Вашей области с учетом Вашего определения формального языка С++. Я об этом говорил сразу. Вы тогда еще не поняли, что значит "различия только в церквях".

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

Извините. Я же не устаю повторять, что со своей колокольни Вы правы. Практически точно так же, как (почти) прав аноним, у которого язык С++ подпадающий под формальную теорию — это множество синтаксически верных строк.

А насчет сложности, зря Вы так: Если теория кажется Вам сложной, значит Вы ее просто не поняли.
Re[29]: Граматика С++
От: WeCom Беларусь  
Дата: 10.08.04 15:21
Оценка:
Здравствуйте, mefrill, Вы писали:

M>>>Понимаете, Вашу грамматику невозможно ДОПОЛНИТЬ, ибо в ней явно определен идентификатор как нетерминал.

WC>>Понимаете ли, я специально "разрешал" Вам при необходимости исправить уже приведенные правила, но в процессе редактирования стер это "разрешение" (честное слово). Дополните, пожалуйста грамматику с учетом "разрешения".

M>Ну я же привел ссылку??? Там грамматика есть, проще не получится. Я же говорю, что теорию формальных языков — довольно сложная вещь, с наскока не взять. Поэтому и получается, что мы с Вами говорим на разных языках.


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

M>ну и к чему такое пренебрежительное отношение к слову "академический"?

Вроде ж и не пренебрегал ничем ... наверное просто снова разное понимание одних и тех же слов ...

M>Да, мне скучно сидеть и набивать код для компилятора, это рутинная задача, не имеющая творческого начала.

А я представьте с утра до ночи только и занят что по листингу С++ программы в комп шестнадцатиричные инструкции запихиваю ...
Re[7]: Граматика С++
От: WolfHound  
Дата: 10.08.04 16:04
Оценка:
Здравствуйте, mefrill, Вы писали:

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

В зависимости от параметра шаблона мы получаем разные синтаксические конструкции
struct get_type
{
    typedef int val;
};
struct get_var
{
    static int val;
};
int get_var::val=0;
template<size_t N>
struct some
{
    typedef typename some<N-2>::type type;
};
template<>
struct some<1>
{
    typedef get_type type;
};
template<>
struct some<0>
{
    typedef get_var type;
};
int main()
{
    int i;
    {
        some<5>::type::val*i;
    }
    {
        some<6>::type::val*i;
    }
}
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[23]: Граматика С++
От: Шахтер Интернет  
Дата: 10.08.04 17:35
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>Здравствуйте, Шахтер, Вы писали:


SJA>>>Так собственно вопрос в том, синтаксическая это ошибка или семантическая ?


Ш>>А это зависит от того, что вы понимаете под синтаксисом и семантикой.


SJA>Прикольно.... Я думал есть некоторое формальное определение ситаксиса и семантики...


К сожалению, нет. В стандарте слово syntax употребляется применительно к конкретным языковым конструкциям. Например,

[Note: certain contexts in C++ cause the evaluation of a full expression that results from a syntactic construct
other than expression (5.18). For example, in 8.5 one syntax for initializer is ( expressionlist )
but the resulting construct is a function call upon a constructor function with expressionlist
as an argument list; such a function call is a fullexpression.
For example, in 8.5, another syntax for initializer is
= initializerclause
but again the resulting construct might be a function call upon a constructor function with one assignmentexpression
as an argument; again, the function call is a fullexpression.]

Т.е. слово syntax используется не в каком-то формальном смысле, а в смысле "способ записи".

Вот ещё пример. Правило видимости объявлений функций.

If no declaration of the called function is visible from the scope of the call the program is ill-formed.

Это правило синтаксическое или семантическое? Стандарт ничего не говорит об этом.

SJA>Так может мне пояснят, как эту границу провести ?


Лучше всего, на мой взгляд, проводить границу таким образом. Синтаксис -- набор правил, определяющих, что же такое С++ программа (well-formed в терминах стандарта). А семантика определяет, что синтаксически правильная С++ программа делает, если её скомпилировать и запустить. В стандарте для этой цели есть термин наблюдаемое поведение (observable behavior) и абстрактная машина.

1.9 Program execution
1 The semantic descriptions in this International Standard define a parameterized nondeterministic abstract
machine.


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

SJA>А то я могу сказать, что С++ задаётся регулярной (если я правильно употребляю слово) граматикой вида

SJA>program ::= .* [в смысле сколько угодно каких угодно символов]

SJA>А всё остальное — семантика...
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[24]: Граматика С++
От: WeCom Беларусь  
Дата: 10.08.04 19:10
Оценка:
Здравствуйте, Шахтер, Вы писали:

SJA>>Прикольно.... Я думал есть некоторое формальное определение ситаксиса и семантики...

Ш>К сожалению, нет. В стандарте слово syntax употребляется применительно к конкретным языковым конструкциям. Например,

Ш>Т.е. слово syntax используется не в каком-то формальном смысле, а в смысле "способ записи".


Загляните в стандарт языка C (который за 1999 год), там синтаксис и семантик разделены явно. Формальные определения синтаксиса и семантики практически 100% есть. Стандарт С имеет нормативную ссылку на дргой документ ISO, который опеделяет vocabulary. В сети пока его текст найти не удалось, если кому из вас повезет — дайте знать пожалуйста.

Ш>Лучше всего, на мой взгляд, проводить границу таким образом. Синтаксис -- набор правил, определяющих, что же такое С++ программа (well-formed в терминах стандарта).

Надо сказать, что стандарт оперирует неявно определяемым понятием syntactically correct и яно утверждает, что оно не равно wellformed. Все таки хорошо бы найти документ с определениями...
Re[35]: Граматика С++
От: Аноним  
Дата: 10.08.04 19:22
Оценка:
M>>Теория эта сложна и изучают ее годами и не на курсах по теории трансляции и не по книжкам, приведенным анонимом. К сожалению, мы говорим на разных языках и вместо конструктивной дисскусии я все время вижу попытки каким-то образом оскорбить или уязвить собеседника. Пожалуйста, отвечайте по существу или я просто прекращаю дискуссию.
WC>Извините. Я же не устаю повторять, что со своей колокольни Вы правы. Практически точно так же, как (почти) прав аноним, у которого язык С++ подпадающий под формальную теорию — это множество синтаксически верных строк.
Аноним прав, но не почти. Аноним говорил только о грамматике С++, которая выводит множество синтаксически верных строк, часть из которых, тем не менее, может и не иметь смысла в языке программирования С++. Он не смешивал формальный язык, выводимый грамматикой С++, с самим языком программирования С++. Пример: аноним всегда говорил, что компилятор С++ есть намного большое, чем простой распознаватель грамматики С++.
Re[34]: Граматика С++
От: Аноним  
Дата: 10.08.04 19:38
Оценка:
M>Снова Вы пытаетесь, не отвечая по существу на вопрос, каким-то образом оскорбить меня. Как я уже говорил ранее, я это расцениваю просто как попытку скрыть отсутствие аргументов. Как я понял, в предложении выше Вы пытаетесь представить меня как некого ортодокса — инквизитора, который не приемлет свободу мысли и пытается подавить Вас книжными знаниями. Чтож, отвечать Ва на это я не буду дабы не отвлекаться от главного.
Да нет. WeCom очень даже нормально говорил с Вами, и он Вам обьяснил, что неверно в Ваших рассуждениях. Все аргументы он привел, но вот понять Вы их не смогли. Более того, мы так и не услышали аргументов в поддержку "утверждения, что грамматика С++ КЗ," за исключением как сложна теория формальных языков и трансляции.

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

Ничего в ней сложного нет, и второй книги даже достаточно, чтобы понять, что есть что. А музыку мы понимаем; вопрос только в том, кто из нас глух.

M>Пожалуйста, отвечайте по существу или я просто прекращаю дискуссию.

Вам и были даны ответы и вопросы (заставляющие задуматься) по существу, и видно, что WeCom очень хорошо понимает теорию.
Re[36]: Граматика С++
От: WeCom Беларусь  
Дата: 10.08.04 19:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Аноним прав, но не почти. Аноним говорил только о грамматике С++, которая выводит множество синтаксически верных строк, часть из которых, тем не менее, может и не иметь смысла в языке программирования С++. Он не смешивал формальный язык, выводимый грамматикой С++, с самим языком программирования С++. Пример: аноним всегда говорил, что компилятор С++ есть намного большое, чем простой распознаватель грамматики С++.


И тем не менее аноним не учитывает того факта, что грамматика C++ имеет, как минимум одну неприятную особенность, а именно, грамматики не достаточно для того чтобы отличить expressions от declarations.
Плюс еще WolfHound указал на то, что один шаблон с разными параметрами может порождать разные синтаксические конструкции, что также затрудняет (если не сказать больше) классический синтаксический анализ.
Re[37]: Граматика С++
От: Аноним  
Дата: 10.08.04 20:09
Оценка:
WC>И тем не менее аноним не учитывает того факта, что грамматика C++ имеет, как минимум одну неприятную особенность, а именно, грамматики не достаточно для того чтобы отличить expressions от declarations.
А Вы не пытайтесь разобрать уже имеющуюся строку. Идите в обратном направлении ведь грамматика это прежде всего аппарат для генерации строк языка. Начните с нужного Вам нетерминала, применяйте разные продукции и попробуйте вывести синтаксическое дерево. Если дерево есть, то строка синтаксически верна, и не имеет значение какие продукции использовались при выводе (даже если использовались те, что не несут смысловую нагрузку).

Приведите пример с expressions и declarations...

WC>Плюс еще WolfHound указал на то, что один шаблон с разными параметрами может порождать разные синтаксические конструкции, что также затрудняет (если не сказать больше) классический синтаксический анализ.

Вы имеете в виду пример с int'eger'ами и template'ами? Если да, то Вам не все ли равно, какая из продукций использовалась при выводе? Чистый распознаватель построит "первое попавшееся дерево" и скажет, что строка верна. Компилятору же нужна таблица символов для "выявления нужной продукции."
Re[8]: Граматика С++
От: mefrill Россия  
Дата: 11.08.04 07:02
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


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

WH>В зависимости от параметра шаблона мы получаем разные синтаксические конструкции
WH>
WH>struct get_type
WH>{
WH>    typedef int val;
WH>};
WH>struct get_var
WH>{
WH>    static int val;
WH>};
WH>int get_var::val=0;
WH>template<size_t N>
WH>struct some
WH>{
WH>    typedef typename some<N-2>::type type;
WH>};
WH>template<>
WH>struct some<1>
WH>{
WH>    typedef get_type type;
WH>};
WH>template<>
WH>struct some<0>
WH>{
WH>    typedef get_var type;
WH>};
WH>int main()
WH>{
WH>    int i;
WH>    {
WH>        some<5>::type::val*i;
WH>    }
WH>    {
WH>        some<6>::type::val*i;
WH>    }
WH>}
WH>


Да, это просто один из способов определения подмножества языка си++. Но это не порождающая граматика как характеристика структуры языка. было бы очень интересно проследить, соотносятся ли характеристика языка в смысле формальной теории с возможнотью определения синтаксических конструкций с помощью других специфических инструментов, таких как шаблоны. И вообще, каким образом семантика (выразительная мощность этой семантики, выраженная в иерархии автоматов: конечные автоматы, автоматы с магазинами, линейно-ограниченные автоматы и, наконец, машины Тьюринга) языков программирования (т.е. языков, позволяющих задавать описания алгоритмов) соотносится с выразительной мощностью языков (что выражено их характеристикой посредство иерархии Хомского).
Re[38]: Граматика С++
От: Sergey J. A. Беларусь  
Дата: 11.08.04 07:23
Оценка:
Здравствуйте, <Аноним>, Вы писали:

WC>>Плюс еще WolfHound указал на то, что один шаблон с разными параметрами может порождать разные синтаксические конструкции, что также затрудняет (если не сказать больше) классический синтаксический анализ.

А>Вы имеете в виду пример с int'eger'ами и template'ами? Если да, то Вам не все ли равно, какая из продукций использовалась при выводе? Чистый распознаватель построит "первое попавшееся дерево" и скажет, что строка верна. Компилятору же нужна таблица символов для "выявления нужной продукции."

Да, но ведь "чистый распознаватель" может сказать, что строка не верна, выбрав не то дерево. Вот простенький например:
A < 0 < (0);


Если A — шаблон, то конструкция синтаксически не верна — вторая угловая скобка неверно повёрнута. Допустим распознаватель выбрал дерево, где A — это шаблон. Конструкция не верна. Но есть ещё одно дерево, если A — int. Конструкция верна.
Значит "чистый распознователь" ничего не может сказать о синтаксической корректности конструкции ?
Или я где то ошибаюсь ?

Вообще, когда я говорил о "контекстной зависимости грамматики С++" я имел в виду именно это обстоятельство. То есть невозможность понять что есть A в данном случае — template-id, или variable-id, и какую синтаксическую конструкцию необходимо строить дальше. Вот желательно с этой позиции немного мне растолковать. Я так понял, что грамматика с такой неопределённостью всё равно КС ?
Я — свихнувшееся сознание Джо.
Re[35]: Граматика С++
От: mefrill Россия  
Дата: 11.08.04 07:56
Оценка:
Здравствуйте, WeCom, Вы писали:

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


M>>>>Не могли бы НОРМАЛЬНО объяснить, КАКУЮ теорию я некорректно применяю к КАКОМУ языку.

WC>>>КАКУЮ — теорию формальных языков (грамматик).
WC>>>КАКОМУ — языку состоящему из всех wellformed программ (единиц трансляции) на языке программирования С++

M>>Ну хорошо.


M>>1) Что изучает теория формальных языков? Ответ: формальные языки.

WC>Точно.

M>>2) Что такое формальный язык? Ответ: в теории формальных языков формальный язык определяется как множество строк, состоящих из конечного алфавита.

WC>Вроде, как множество конечных строк, но непринципивально.

M>>3) Рассмотрим язык си++ как формальный язык. Т.е. определим формальный язык си++. Согласно 2) это некоторое множество строк (программ), построенных из алфавита, определенного в стандарте как базовое множество символов.

WC>Имеете право. О чем я Вам и твержу. Вы взяли язык программирования С++. Определили формальный язык как множество wellformed строк С++ и для этого языка провели исследование. Здесь Вы правы.
WC>А неправы Вы вот в чем:
WC>-Чисто формально язык С++ — это не формальный язык по определению (но это замечание несущественно);
WC>Аргумент1. Стандарт С++ не определяет и не подразумевает грамматику для языка, который Вы рассматривали;
WC>Аргумент2. Грамматика С++ — это грамматика для синтаксического разбора == грамматика для языка представляющего из себя множество синтаксически-верных строк С++.

Таким образом, множество синтаксически верных строк Си++ это не язык Си++? Правильно ли я понял? Если так, то спорить бесполезно, вопрос лишь в терминологии. Поэтому, давайте прекратим все эти терминологические прения, называйте язык си++ как Вам хочется, в неформальной беседе это позволительно, хотя часто ведет к непониманию.

M>>Снова Вы пытаетесь, не отвечая по существу на вопрос, каким-то образом оскорбить меня. Как я уже говорил ранее, я это расцениваю просто как попытку скрыть отсутствие аргументов.

WC>Аргументы выше, но проблема в том, что для Вас стандарт С++ — не авторитет. И это входит в некоторое противоречие с данным разделом форума.

Мне это напоминает спор богословов, так рапространенный в Средние века. Ссылки на Библия (т.е. Стандарт) и тому подобное .

M>>Как я понял, в предложении выше Вы пытаетесь представить меня как некого ортодокса — инквизитора, который не приемлет свободу мысли и пытается подавить Вас книжными знаниями.

WC>Нет Я вас в шутку называл сектантом. Жаль, что Вы на это обижаетесь.

Я не обидился, я просто указал на то, что Вы пытаетесь привнести в дискуссию понятия, не относящиеся к теме. Потом, на сектанта то чего обижаться? Я то как раз ортодокс большой Церкви, где и Ахо и Ульман и Кнут и иже с ними, так сказать, житие наше.

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

WC>Вы правы в рамках Вашей области с учетом Вашего определения формального языка С++. Я об этом говорил сразу. Вы тогда еще не поняли, что значит "различия только в церквях".

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

WC>Извините. Я же не устаю повторять, что со своей колокольни Вы правы. Практически точно так же, как (почти) прав аноним, у которого язык С++ подпадающий под формальную теорию — это множество синтаксически верных строк.
WC>-
WC>А насчет сложности, зря Вы так: Если теория кажется Вам сложной, значит Вы ее просто не поняли.

Да нет, мне она сейчас уже не кажется сложной. Просто я оцениваю время, потраченное мною на изучение этой теории. И, если это не аргумент, то Вы могли бы оценить сложность теории, попытавшись понять ту грамматику, которую я уже представлял выше. А это довольно простой пример на самом деле. и, конечно, к программированию это уже не относится совершенно.

Я вообще предлагаю завершить весь этот разговор, так как это не приведет ни к чему. Тем более, что правы все 6-). Если хотите, то напишите ответ на это сообщение, я же отвечать уже не вижу необходимости.
Re[30]: Граматика С++
От: mefrill Россия  
Дата: 11.08.04 08:00
Оценка:
Здравствуйте, WeCom, Вы писали:

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


M>>>>Понимаете, Вашу грамматику невозможно ДОПОЛНИТЬ, ибо в ней явно определен идентификатор как нетерминал.

WC>>>Понимаете ли, я специально "разрешал" Вам при необходимости исправить уже приведенные правила, но в процессе редактирования стер это "разрешение" (честное слово). Дополните, пожалуйста грамматику с учетом "разрешения".

M>>Ну я же привел ссылку??? Там грамматика есть, проще не получится. Я же говорю, что теорию формальных языков — довольно сложная вещь, с наскока не взять. Поэтому и получается, что мы с Вами говорим на разных языках.


WC>Пока у Вас самостоятельно ни проще ни сложнее не получилось.

WC>Я понимаю, что имея под рукой книгу можно навыдергивать цытат и сказать "вот я прав", "теория сложна", "надо учить годами" и т.д., но извините, я не могу верить тому, что Вы цитируете корректно. Поэтому я хочу убедиться, что Вы сами чувствуете себя в этой области, как рыба в воде, поэтому я прошу Вас построить самостоятельно граматику или признать, что Вам просто кажется, что Вы правильно понимаете теорию и, что лично Вы доказать свои утверждения не способны.
WC>Извините еще раз, просто не один раз уже случалось, что на форумах человек авторитетно ссылаясь на литературу доказывал что-то и все выглядело верно и подкопаться было не к чему, но стоило только залезть в ту же литературу и баа ... да тут же совсем другое в виду имеется ...
WC>Если это действительно сделать сложно, то
WC>1.Наверное практической ценности Ваш вывод все же не имеет;
WC>2.Я попробую найти литературу и убедиться, что Вы полностью правы (в рамках принятых Вами определений)

Вот, полностью поддерживаю, если хотите, могу Вам ссылки на такую литературу дать и также номера страниц, откуда я цитаты выдергивал.

M>>ну и к чему такое пренебрежительное отношение к слову "академический"?

WC>Вроде ж и не пренебрегал ничем ... наверное просто снова разное понимание одних и тех же слов ...

M>>Да, мне скучно сидеть и набивать код для компилятора, это рутинная задача, не имеющая творческого начала.

WC>А я представьте с утра до ночи только и занят что по листингу С++ программы в комп шестнадцатиричные инструкции запихиваю ...

Сочувствую
Re[36]: Граматика С++
От: WeCom Беларусь  
Дата: 11.08.04 09:25
Оценка:
Здравствуйте, mefrill, Вы писали:

С Вашего позволения отвечу.

M>Таким образом, множество синтаксически верных строк Си++ это не язык Си++? Правильно ли я понял?

Да, множество синтаксически верных строк — это не весь язык С++. Стандарт С++ об этом говорит неявно, стандарт С об аналогичном — совершенно явно. Синтаксис языка С++ определяет надмножество wellformed элементов трансляции языка С++. Дополнительно к этому, в классической теории (заглянул в найденый но только отрывок ахоульмана) принято грамматикой описывать не далее, чем синтаксис.

Вы ранее wellformed программы надывали просто корректными с точки зрения программами и отождествляли это понятие с синтаксически верными программами.

M>Если так, то спорить бесполезно, вопрос лишь в терминологии.

Да это так. И если бы Вы не хотели доказать, что Ваша терминология правильная, то и спора не было. Закончилось бы все на моем уточнении выводов по теме.

M>Поэтому, давайте прекратим все эти терминологические прения, называйте язык си++ как Вам хочется, в неформальной беседе это позволительно, хотя часто ведет к непониманию.

Здесь, на этом форуме, принято, что по всем вопросам касающимся С++, стандарт имеет первоочередное значение.

WC>>Аргументы выше, но проблема в том, что для Вас стандарт С++ — не авторитет. И это входит в некоторое противоречие с данным разделом форума.

M>Мне это напоминает спор богословов, так рапространенный в Средние века. Ссылки на Библия (т.е. Стандарт) и тому подобное .

Ура! Мой оппонент наконец то начинает понимать суть вещей.
У него своя церковь и свое первостепенноважное писание (Ахо и Ульман и Кнут), а у меня (тут с анонимом оказались на одной стороне) свое (Стандарт). Причем, мы ни в коей мере не отвергаем писания моего оппонента, но наше писание содержит указания к какому месту нужно прикладывать лик Ахоульмана с пятнадцатой страницы писания оппонента для полного исцеления болячки. Мой же оппонент, однако, игнорирует наше писание и прикладывает лик совсем к другому месту, после чего нам же доказывает, что его Ахоульман на болячку не действует, а спасти может только Кнут ...

M>Я не обидился, я просто указал на то, что Вы пытаетесь привнести в дискуссию понятия, не относящиеся к теме.

Если бы Вы отвечали на это сообщение, то я бы на это написал: "Конкретно перечислите, пожалуйста!"

M>Потом, на сектанта то чего обижаться? Я то как раз ортодокс большой Церкви, где и Ахо и Ульман и Кнут и иже с ними, так сказать, житие наше.

Да, наверное, Вы правы, сектант не точное описание — Вы просто иудей, а мы здесь — христиане.

M>Да нет, мне она сейчас уже не кажется сложной. Просто я оцениваю время, потраченное мною на изучение этой теории.

А у меня, как помню, формальная терия вероятности очень туго шла. Так я и не стал ей впоследствии уделять время.

M>И, если это не аргумент, то Вы могли бы оценить сложность теории, попытавшись понять ту грамматику, которую я уже представлял выше.

Наивный чукотский юноша!
(модератор, можешь выдавать предупреждение)

M>А это довольно простой пример на самом деле. и, конечно, к программированию это уже не относится совершенно.

Простой. Да. Но почему, тогда Вы имея этот простой пример и зная теорию не можете построить грамматику для меня? Почему, человек, знающй теорию, не может хотя бы обьяснить мне, КАК построить эту чертову грамматику или даже хотя бы не обоснует, что у нее будет КОНЕЧНОЕ число правил и не оценит хотя бы грубо сверху это число??? Почему мне хотят, что-то доказать, но реально доказывать или опровергать должен я сам???

M>Я вообще предлагаю завершить весь этот разговор, так как это не приведет ни к чему. Тем более, что правы все 6-). Если хотите, то напишите ответ на это сообщение, я же отвечать уже не вижу необходимости.

Не возражаю.
Re[31]: Граматика С++
От: WeCom Беларусь  
Дата: 11.08.04 09:34
Оценка:
Здравствуйте, mefrill, Вы писали:

M>Вот, полностью поддерживаю, если хотите, могу Вам ссылки на такую литературу дать и также номера страниц, откуда я цитаты выдергивал.


Да, пожалуйста. А если книги в электронном виде, то вообще здорово будет.
Моюно в аську: 158153635.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.