Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Вниз

begin/end в начале/конце процедуры необязательные   Найти похожие ветки 

 
Igorek ©   (2004-07-05 18:05) [0]

- компилятор мог бы вырулить и без них. Как в случае с

with SomeObject do
 Result := SomeValue;


 
inic ©   (2004-07-05 18:07) [1]

Я тоже так думаю, наглядность чуть лучше, размер кода чуть меньше, мелочь а приятно, но кстати в c++ даже так нельзя


 
Igorek ©   (2004-07-05 18:07) [2]

уже надеваю каску на голову... (%-)))


 
Игорь Шевченко ©   (2004-07-05 18:08) [3]

Да они вообще необязательны. И компилятор мог бы все сам понять.
Но вот ведь незадача какая - грамматика языка не позволяет.


 
Jeer ©   (2004-07-05 18:09) [4]

А ты, ихохорек, Phyton поизучай - там еще интереснее.


 
Igorek ©   (2004-07-05 18:11) [5]


> Игорь Шевченко ©   (05.07.04 18:08) [3]
> Да они вообще необязательны. И компилятор мог бы все сам
> понять.
> Но вот ведь незадача какая - грамматика языка не позволяет.

Так я к тому и веду, что грамматика ... как бы это выразиться ... ммм... дает простор для дальнейшего улучшения. :-)))


 
inic ©   (2004-07-05 18:12) [6]

Надо письмо написать в Borland (серьезно)


 
Игорь Шевченко ©   (2004-07-05 18:12) [7]


> Так я к тому и веду, что грамматика ... как бы это выразиться
> ... ммм... дает простор для дальнейшего улучшения


Некоторые уже улучшают грамматику русского языка. В том числе и на этом сайте. Одна беда - их не всегда понимают.

ЗЫ: Это намек такой. Тонкий


 
Igorek ©   (2004-07-05 18:14) [8]


> Игорь Шевченко ©   (05.07.04 18:12) [7]
> ЗЫ: Это намек такой. Тонкий

Намеков не понимаю и не горю желанием - слишком они неоднозначны. Не пояснишь, что имел ввиду конкретно?


 
Григорьев Антон ©   (2004-07-05 18:15) [9]

А вы попробуйте написать консольное приложение или любое другое приложение без VCL, в виде одного только dpr-файла. Там сначала будут описаны функции, а потом, между begin и end с точкой будет написано тело программы. А теперь вопрос на засыпку: если у функций не будет begin"ов и end"ов, как компилятор поймёт, что begin означает начало программы, а не начало составного оператора внутри функции?

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


 
Digitman ©   (2004-07-05 18:15) [10]


> Igorek ©   (05.07.04 18:05)  
> - компилятор мог бы вырулить и без них


да что там мелочиться ? давай еще и скобки фигурные из С/С++ повыкидываем ! а начерта они там сдались, спрашивается ?


> уже надеваю каску на голову


про броник тож не забудь
помидоры и яйца - они тож больно шмякают


 
Тимохов ©   (2004-07-05 18:20) [11]

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


 
DiamondShark ©   (2004-07-05 18:21) [12]


> Igorek ©   (05.07.04 18:05)  
> - компилятор мог бы вырулить и без них. Как в случае с

Ок. Флаг в руки.
С тебя формальное описание грамматики такого языка, и программа разбора текста на этом языке.


 
Тимохов ©   (2004-07-05 18:23) [13]


> С тебя формальное описание грамматики такого языка, и программа
> разбора текста на этом языке.

да это ему как два пальца.

нет уж - с тебя готовый конечный автомат.


 
Digitman ©   (2004-07-05 18:25) [14]


> Igorek ©   (05.07.04 18:05)


приснопамятное "казнить нельзя помиловать" помнишь ?
нефих там точки расставлять, кому надо он сам разберется - либо башки лишится, либо возвеселится-возрадуется


 
Григорьев Антон ©   (2004-07-05 18:25) [15]

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


 
Игорь Шевченко ©   (2004-07-05 18:26) [16]

Igorek ©   (05.07.04 18:14)


>  Не пояснишь, что имел ввиду конкретно?


Поясню. Твою "усовершенствованную" грамматику компилятор тоже не сможет понять.


 
Sha ©   (2004-07-05 18:26) [17]

Igorek, ты про вложенные процедуры слышал?


 
Тимохов ©   (2004-07-05 18:29) [18]

он это специально делает :)))

предлагаю дальнейшие темы для обсуждения:
1. Почему окна прямоугольные. Ничего не стоило MS сделать их сразу круглыми. Мне (Игорьку) это намного естественней.
2. Почему младший байт машинного слова идет раньше старшего. Это же естественно - идешь правее, значит дальше от начала памяти, т.е. старший байт и т.д. Почему борланд так реализовал?

ЗЫ Заявки на конкурс принимаются.


 
Тимохов ©   (2004-07-05 18:30) [19]


> Sha ©   (05.07.04 18:26) [17]

Кактегоричный ОФФ: Александр, как с вами связаться - несколько раз писал - не доходит. Мой timoha@vkkb.ru


 
Игорь Шевченко ©   (2004-07-05 18:30) [20]

Григорьев Антон ©   (05.07.04 18:25)


> Вообще, синтаксис Паскаля уже ругали.


Да, с удовольствием присоединюсь поругать, слово implementation без 100 грамм написать нельзя без ошибок :) (Это я не писал, это я из буфера скопировал :)))


 
Тимохов ©   (2004-07-05 18:32) [21]


> Игорь Шевченко ©   (05.07.04 18:30) [20]

implementation
implementation
implementaion
implementation
implementation
implememmmm блин.
А прав Игорь.


 
Переяслов Григорий   (2004-07-05 18:35) [22]

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


 
Григорьев Антон ©   (2004-07-05 18:36) [23]


> Игорь Шевченко ©   (05.07.04 18:30) [20]
> Григорьев Антон ©   (05.07.04 18:25)
>
>
> > Вообще, синтаксис Паскаля уже ругали.
>
>
> Да, с удовольствием присоединюсь поругать, слово implementation
> без 100 грамм написать нельзя без ошибок :) (Это я не писал,
> это я из буфера скопировал :)))


А в стандартном Паскале такого слова вообще нет. А Object Pascal/Delphi с точки зрения Вирта вообще является извращением его идей (и это, ИМХО, справедливо).


 
Sha ©   (2004-07-05 18:38) [24]

>Тимохов ©   (05.07.04 18:30) [19] alshaГАВmail333ТОЧКАcom


 
Тимохов ©   (2004-07-05 18:39) [25]


> Sha ©   (05.07.04 18:38) [24]

:))))


 
DiamondShark ©   (2004-07-05 18:41) [26]


> Да, с удовольствием присоединюсь поругать, слово implementation
> без 100 грамм написать нельзя без ошибок :)

Пытаюсь вспомнить, когда я его последний раз руками набирал... Не могу.

ЗЫ
А что, TMultipleReadExclusiveWriteSyncronizer лучше что-ли?


 
DiamondShark ©   (2004-07-05 18:42) [27]

И, таки, ошибся...


 
Тимохов ©   (2004-07-05 18:42) [28]


> DiamondShark ©   (05.07.04 18:41) [26]

10 пальчиков, 240 в минуту.
и нет проблем.


 
vuk ©   (2004-07-05 18:43) [29]

to Григорьев Антон ©   (05.07.04 18:36) [23]:
>А Object Pascal/Delphi с точки зрения Вирта вообще является
>извращением его идей
Вообще говоря, Object Pascal (которай на MAC) при участии Вирта разрабатывался. Потом те же идеи Borland использовал в TP/OP.


 
DiamondShark ©   (2004-07-05 18:47) [30]


> А Object Pascal/Delphi с точки зрения Вирта вообще является
> извращением его идей (и это, ИМХО, справедливо).

На костёр еретиков!
Адрес святой инквизиции:
http://www.delphikingdom.com/asp/talktopic.asp?ID=285


 
pasha_golub ©   (2004-07-05 19:09) [31]

Ну, не знаю, для меня implementation как имя второе. ;-) А вот {} не люблю, их так потом в листинге трудно выискивать.


 
Юрий Зотов ©   (2004-07-05 19:30) [32]

> Igorek ©   (05.07.04 18:05)

<оператор> ::= <простой оператор> | <составной оператор>
<простой оператор> ::= <оператор if> | <оператор while> ...
<составной оператор> ::= begin <список операторов> end
<список операторов> ::= <оператор> | <оператор> ; <список операторов>

Если написанное Вам знакомо, то сабж, вероятно, не возник бы. А если незнакомо, то советую СНАЧАЛА почитать теорию языков, а уж ПОТОМ ругать компилятор. Или хвалить - потому что ПОСЛЕ прочтения может и такое получиться.


 
Anatoly Podgoretsky ©   (2004-07-05 19:33) [33]

Digitman ©   (05.07.04 18:15) [10]
И броне трусы иначе тоже больно.


 
Igorek ©   (2004-07-05 20:58) [34]


> Игорь Шевченко ©   (05.07.04 18:12) [7]
> Некоторые уже улучшают грамматику русского языка. В том
> числе и на этом сайте. Одна беда - их не всегда понимают.
>
> ЗЫ: Это намек такой. Тонкий


> Игорь Шевченко ©   (05.07.04 18:26) [16]
> Igorek ©   (05.07.04 18:14)
> >  Не пояснишь, что имел ввиду конкретно?
>
> Поясню. Твою "усовершенствованную" грамматику компилятор
> тоже не сможет понять.

Я не имел ввиду Паскаль на русский перевести.

2 Григорьев Антон ©   (05.07.04 18:15) [9]
> А вы попробуйте написать консольное приложение или любое
> другое приложение без VCL, в виде одного только dpr-файла.
> Там сначала будут описаны функции, а потом, между begin
> и end с точкой будет написано тело программы. А теперь вопрос
> на засыпку: если у функций не будет begin"ов и end"ов, как
> компилятор поймёт, что begin означает начало программы,
> а не начало составного оператора внутри функции?

Вот разбираем мы исходник. Разобрали заголовок процедуры - ожидаем тело. Если дальше идет begin - разбираем тело до соотв. end. Если сразу идет выражение - разбираем. Потом уже ожидаем или заголовок новой процедуры или начало программы. Правда остается проблема forward declaration. Но и ее при желании можно решить - например (;) после заголовка означает конец обьявлению процедуры(тела не предвидется).

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

> DiamondShark ©   (05.07.04 18:21) [12]
> Ок. Флаг в руки.
> С тебя формальное описание грамматики такого языка, и программа
> разбора текста на этом языке.

Неа. Времени нету. А я за это денег не получу. Так что потрепаться - пожалуйста. А вот реализация - увольте.

> Sha ©   (05.07.04 18:26) [17]
> Igorek, ты про вложенные процедуры слышал?

Слышал. Вот как раз сегодня писал конвертер из одной БД - в другую. Так у меня вложенность процедур достигала 4 в глубину.
Но не вижу проблемы в контексте сабжа.

> Юрий Зотов ©   (05.07.04 19:30) [32]
> <оператор> ::= <простой оператор> | <составной оператор>
> <простой оператор> ::= <оператор if> | <оператор while>
> ...
> <составной оператор> ::= begin <список операторов> end
> <список операторов> ::= <оператор> | <оператор> ; <список
> операторов>
>
> Если написанное Вам знакомо, то сабж, вероятно, не возник
> бы. А если незнакомо, то советую СНАЧАЛА почитать теорию
> языков, а уж ПОТОМ ругать компилятор. Или хвалить - потому
> что ПОСЛЕ прочтения может и такое получиться.

Представьте себе знакомо. И не понаслышке - приходилось и самому грамматики писать. И разбирать. И кое-что покруче.
Так вот, в контексте того, что вы привели:
1) счас в паскале тело процедуры есть <составной оператор>
2) я предлагаю сделать его (тело) - <оператор>


 
YurikGL ©   (2004-07-05 20:59) [35]

А мне пролог нравился...


 
YurikGL ©   (2004-07-05 21:00) [36]

А мне пролог нравился...


 
Igorek ©   (2004-07-05 21:06) [37]


> Тимохов ©   (05.07.04 18:29) [18]
> он это специально делает :)))

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


 
DiamondShark ©   (2004-07-05 21:25) [38]


> Igorek ©   (05.07.04 20:58) [34]


> > Ок. Флаг в руки.
> > С тебя формальное описание грамматики такого языка, и программа
> > разбора текста на этом языке.
>
> Неа. Времени нету. А я за это денег не получу. Так что потрепаться
> - пожалуйста. А вот реализация - увольте.

Неа. На таком уровне даже потрепаца не получица. Трепаца без того, чтобы отвечать за слова надо в одиночку. Перед зеркалом.


 
Тимохов ©   (2004-07-06 10:32) [39]


> DiamondShark ©   (05.07.04 21:25) [38]

класс!


 
Юрий Зотов ©   (2004-07-06 11:08) [40]

> Igorek ©   (05.07.04 20:58) [34]

> Так вот, в контексте того, что вы привели:
> 1) счас в паскале тело процедуры есть <составной оператор>
> 2) я предлагаю сделать его (тело) - <оператор>

В контексте того, что я привел,
<оператор> ::= <простой оператор> | <составной оператор>

И тогда Ваше предложение сводится к следующему:
<тело программы> ::= <простой оператор> | <составной оператор>

Поскольку второй вариант уже вполне успешно реализован и именно его Вы критикуете, то надо полагать, что Вы предлагаете первый:
<тело программы> ::= <простой оператор>

Таким образом, Ваша программа будет состоять только из одного простого оператора. Я не думаю, что такая программа сможет делать что-то серьезное. Ну разве что этот оператор будет, например, таким:
if True then
begin
 ...
end

И если теперь отсюда выбросить очевидно избыточную первую строчку, то получим как раз то, что имеем и сейчас.

Igorek, разговоры о грамматике "на пальцах" - это несерьезно. Приведите несколько строчек, описывающих то, что Вы предлагаете, в виде БНФ - вот тогда можно будет говорить, а не болтать.


 
Digitman ©   (2004-07-06 11:23) [41]


> Я не имел ввиду Паскаль на русский перевести


нет уж, увольте !

хватит с нас одних извращенцев-разработчиков 1С ! Якобы денно и нощно заботящихся о русскоязычных порограммерах ..

не хватало еще Паскаль поганить переводом на русский..

иначе получим хронический геморрой :

было : TMultipleReadExclusiveWriteSyncronizer
стало : ТипСинхронизаторМножественногоЧтенияИЭксклюзивнойЗаписи

это, конечно, не Паскаль, но - оцените какова сама тенденция !

и так не сладко по-аглицки подобные конструкции писать, так еще и по-русски придется эту галиматью набирать .. implementation по сравнению с этим отдыхает..


 
PVOzerski ©   (2004-07-06 11:40) [42]

Ты уж предложи сразу заменить begin на {, end на } - так ведь короче. Или писать вот так:

<function MyFunc>
....
</function>

Только это уже другие языки получатся.


 
Тимохов ©   (2004-07-06 11:48) [43]

а еще нэймспейсы сюда прикрутить.
вообще супер будет.
типа html, только со свтроенными языками - на выбор: алгол, ада, кобол, с, паскаль, с++, дельфи, перл, пхп (фантазия кончилась).

т.е. совместить dfm и код: код, данные, код, данные и т.д.

на такой среде разработки можно разбогатеть конкретно


 
PVOzerski ©   (2004-07-06 11:50) [44]

BTW, кто-нибудь Странника юзать пробовал?


 
wicked ©   (2004-07-06 12:15) [45]


> а еще нэймспейсы сюда прикрутить.

а вот не надо... "нэймспейсы" - этта подпорки в си++, взамен модульности, от которой там отказались... вот кабы в си++ модуля ввели бы... или в паскаль шаблоны.... ;))


> т.е. совместить dfm и код: код, данные, код, данные и т.д.

так это ж кларион... вроде.... (брр, жуть... ;))


 
Тимохов ©   (2004-07-06 12:17) [46]


> а вот не надо... "нэймспейсы" -

я имел в виду xml неэмспейты
это вообще шутка на xml-подобный код в [42]


 
PVOzerski ©   (2004-07-06 12:21) [47]

Поясняя [44]: http://www.soft-search.ru/programs/50230.shtml . Правда, я посмотрел и стер. Не понравилось. Синтаксис (я только Паскаль пробовал) "кастрированный", линкер убогий... Хотя это IMHO и не более того.


 
DiamondShark ©   (2004-07-06 12:22) [48]


> или в паскаль шаблоны

По образу Ц с крестами? Фтопку.


 
PVOzerski ©   (2004-07-06 12:24) [49]

>или в паскаль шаблоны

И прощай скорость компиляции? BTW, никто ведь не запрещает городить огород из include-файлов и сейчас. Только почему-то не хочется.


 
wicked ©   (2004-07-06 12:24) [50]


> По образу Ц с крестами? Фтопку.

угу.... и СТЛ туда же?.... паскалю ой как далеко до функциональности шаблонов... ;)


 
GuAV ©   (2004-07-06 12:41) [51]

<off>
Кстати, я тоже думал, что Паскаль устаревает. До недавнего времени. А счас в MSDN нашел про C#. Что меня заинтересовало, что этот новый С становится как Дельфи.

Comparison Between C++ and C#

Inheritance: A class can inherit implementation from one base class only. Also a class or an interface can implement multiple interfaces.

The struct type: In C#, classes and structs are semantically different. A struct is a value type, while a class is a reference type.

The switch statement: Unlike the C++ switch statement, C# does not support fall through from one case label to another.

The delegate type: Delegates are roughly similar to function pointers in C++, but they are type-safe and secure.

Using the new modifier to explicitly hide an inherited member.

Method parameters: C# supports ref and out parameters, which are used instead of pointers in passing parameters by reference.

C# does not support bit fields.

</off>


 
Григорьев Антон ©   (2004-07-06 12:47) [52]


> Что меня заинтересовало, что этот новый С становится как
> Дельфи.


А чего ж тут удивительного-то? Для разработки C# MS переманили из Борланда Андерса Хейлсберга, разработчика Turbo Pascal"я и Delphi.


 
GuAV ©   (2004-07-06 13:11) [53]

Григорьев Антон ©   (06.07.04 12:47) [52]

Понятно. Тогда возможно дойдет до того (если еще нет), что различия в языках будут чисто синтаксические. Тогда я точно останусь в Дельфи - мне его код читать легче.

Кстати именно из-за читабильности сабжу - нет.
я как-то писал еще в паскале:

proecdure ...
 begin ... end;

потом пришлось написать как обычно - неудобно.


 
Darts ©   (2004-07-06 13:37) [54]

Чем хуже Mодула-2 (или Оберон-2)? Тот же Паскаль, но поизящнее и без лишних begin..end.


 
Бир аббасы   (2004-07-06 13:55) [55]

offtopic->begin();
Digitman, кто мешает юзать в 1С английскую нотацию?
Проблема именно в англ/рус нотации или "запахе 1С", который многими не любим?
offtopic->end();


 
GuAV ©   (2004-07-06 13:59) [56]


> Бир аббасы   (06.07.04 13:55) [55]


>  begin/end в начале/конце процедуры необязательные


 
Igorek ©   (2004-07-06 14:52) [57]


> Юрий Зотов ©   (06.07.04 11:08) [40]
> Поскольку второй вариант уже вполне успешно реализован и
> именно его Вы критикуете, то надо полагать, что Вы предлагаете
> первый:
> <тело программы> ::= <простой оператор>

Да не надо ничего полагать. Я написал ясно и точно. Повторю:

> Так вот, в контексте того, что вы привели:
> 1) счас в паскале тело процедуры есть <составной оператор>
> 2) я предлагаю сделать его (тело) - <оператор>

<тело процедуры> = <оператор>
Это дает свободу:
- или писать begin/end - тогда мы имеем составной оператор (а в нем список <операторов>)
- или не писать - тогда мы имеем <простой оператор>


 
GuAV ©   (2004-07-06 15:14) [58]


> Igorek ©   (06.07.04 14:52) [57]

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

зы в .dpr есть begin..end. может ещё заменить
begin
 Main();
end

на

Main().

?


 
Тимохов ©   (2004-07-06 15:16) [59]

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


 
DiamondShark ©   (2004-07-06 15:18) [60]


> Это дает свободу:

Канкретная такая свобода.

Как отличить конец объявлений от первого оператора?


 
КаПиБаРа ©   (2004-07-06 15:19) [61]


> Igorek ©   (05.07.04 18:05)  


Можешь точку с запятой в строчке перед "end;" не ставить. Сплошная економия.


 
GuAV ©   (2004-07-06 15:25) [62]


> для локальных переменных? как будет обозначаться, что уже
> конец этой секции и началась та самая единственная команда?

Элементарно
Единственная команда не содержит : без полседующего = и не в скобках.


 
Юрий Зотов ©   (2004-07-06 15:50) [63]

> Igorek ©   (06.07.04 14:52) [57]

> Это дает свободу:
> - или писать begin/end - тогда мы имеем составной оператор (а в нем список <операторов>)
> - или не писать - тогда мы имеем <простой оператор>

Синтаксически это прокатит, согласен. Но практического смысла не вижу - лишних два слова, а строгость и читабельность падают. Да и в реальности эти два слова все равно всегда будут присутствовать - редкая программа состоит из одного простого оператора.

> Тимохов ©   (06.07.04 15:16) [59]
> DiamondShark ©   (06.07.04 15:18) [60]

> Как отличить конец объявлений от первого оператора?

Вот это как раз не проблема. Все объявления кончаются точкой с запятой, все операторы начинаются либо с ключевого слова, либо с идентификатора. Парсится элементарно (да, собственно, компилятор практически то же самое и делает, только требует ключевое слово begin).


 
Sha ©   (2004-07-06 16:07) [64]

Для вложенных процедур прикольно получится.
Последовательно записанные операторы относятся к разным процедурам и исполняются в обратном порядке.
Но нам все нипочем, у нас мозги крепкие.


 
Тимохов ©   (2004-07-06 16:10) [65]


> Юрий Зотов ©   (06.07.04 15:50) [63]

с одной стороны вы правы.
формально (наверное, надо еще подумать) действительно проблем у компилятора не возникнет.

Интересно, как тогда будет выглядеть пустой метод без begin end?

Так что ли?

procedure Do();;

в таком случае имхо.

ЗЫ. На досуге еще подумаю. Есть ощущение, что у компилятора возникнут большие проблемы с построением грамматики. Как минимум КС грамматики.


 
Юрий Зотов ©   (2004-07-06 16:43) [66]

> Sha ©   (06.07.04 16:07) [64]

Эт-точно.
:о)

Видимо, имелось в виду, что для вложенных процедур begin-end писать все же нужно, но это отдается на откуп программисту. Не написал - сам виноват, получишь процедуру из одного оператора.
:о)


 
DiamondShark ©   (2004-07-06 17:00) [67]


> Юрий Зотов ©   (06.07.04 15:50) [63]
> > DiamondShark ©   (06.07.04 15:18) [60]
>
> > Как отличить конец объявлений от первого оператора?
>
> Вот это как раз не проблема.

Проблема.

Компилятор смотрит (должен смотреть) не только на синтаксис, но и на семантику.
После ключевого слова begin он уже не станет сопоставлять найденный идентификатор с продукцией

var_def ::= ident{, ident} ":" <type_def>

а сразу будет разворачивать продукцию

stmt ::= simple_stmt | comp_stmt
simple_stmt ::= assign_stmt | proc_call | ...
assign_stmt ::= var_ident ":=" expression
proc_call ::= proc_ident ["(" param_list ")"]

Принимая во внимание семантику, он сразу сможет отличить идентификатор переменной от идентификатора процедуры.

Если же тупо разбирать только по синтаксису, придётся перебирать разные правила и делать откаты. Компилятор получится тормозной.

Вирт не зря оттачивал синтаксис своих языков и стремился к минимальности формальной грамматики.


 
Юрий Зотов ©   (2004-07-06 17:20) [68]

> DiamondShark ©   (06.07.04 17:00) [67]

> Компилятор смотрит (должен смотреть) не только на синтаксис,
> но и на семантику.

Эт-точно. Но проблемы все равно нет. После объявления он может встретить либо следующее объявление (т.е., ключевое слово const, var, type), либо исполнимый оператор (т.е., идентификатор, либо ключевое слово). И все чудесно рулится - причем во втором случае он понимает, что секция объявлений завершена.

То есть, все как и обычно, ничего перебирать не нужно. Какие же здесь откаты и тормоза?


 
Тимохов ©   (2004-07-06 17:21) [69]

так как все же будет выглядеть пустой метод без begin end и без единой строки осмысленного кода?


 
Sha ©   (2004-07-06 17:41) [70]

> Тимохов ©   (06.07.04 17:21) [69]
см. Тимохов ©   (06.07.04 16:10) [65] :)


 
Тимохов ©   (2004-07-06 17:48) [71]


> Sha ©   (06.07.04 17:41) [70]

вы предсталяете что это будет?
имхо полный ацццтой.

ОФФ.
Александр, дошло мое письмо до Вас?.
Мне в действительности интересно - может я сейчас в чем-то ошибаюсь, т.е. все-таки вы правы оказались по поводу R+/-
ЗЫ. По всей проге, правда я уже это поменял,но интересно :))


 
QuasiLamo ©   (2004-07-06 17:50) [72]


> begin/end в начале/конце процедуры необязательные
>  Igorek ©   (05.07.04 18:05)
> - компилятор мог бы вырулить и без них. Как в случае с
>
> with SomeObject do
>  Result := SomeValue;

В данном случае, как я понимаю, речь идет о функции


 
DiamondShark ©   (2004-07-06 18:06) [73]


> Юрий Зотов ©   (06.07.04 17:20) [68]
> > DiamondShark ©   (06.07.04 17:00) [67]
>
> > Компилятор смотрит (должен смотреть) не только на синтаксис,
> > но и на семантику.
>
> Эт-точно. Но проблемы все равно нет. После объявления он
> может встретить либо следующее объявление (т.е., ключевое
> слово const, var, type), либо исполнимый оператор (т.е.,
> идентификатор, либо ключевое слово). И все чудесно рулится
> - причем во втором случае он понимает, что секция объявлений
> завершена.
>
> То есть, все как и обычно, ничего перебирать не нужно. Какие
> же здесь откаты и тормоза?


Ну как же!

var
 a: integer;
 b: real;
a:=123;

Как пойдёт разбор?


 
Тимохов ©   (2004-07-06 18:08) [74]

после : пойдет =, поэтому это не будет терминалом "разделитель переменной и типа", а терминалом "присвоение".


 
Sha ©   (2004-07-06 18:20) [75]

> Тимохов ©   (06.07.04 17:48) [71]
> Александр, дошло мое письмо до Вас?.

Нет не дошло, хотя другие письма получаю регулярно (каждый день).

> Igorek ©

Как тебе это:

function p1: integer;
function p2: integer;
function p3: integer;
 Result:=2;
 Result:=2+p3;
 Result:=2*p2;


 
Тимохов ©   (2004-07-06 18:22) [76]


> Sha ©   (06.07.04 18:20) [75]

жаль :(((
буду надеятся :))))


 
Sha ©   (2004-07-06 18:28) [77]

> Тимохов ©   (06.07.04 18:22) [76]
<off>
 Заведи ящик на mail333.com и попробуй послать почту на него.
 Может, у тебя какие проблемы с отсылкой.
</off>


 
Тимохов ©   (2004-07-06 18:30) [78]


> Sha ©   (06.07.04 18:28) [77]

блин 333 это сервер, я думал отравление жизни спамерам (т.е. я думал это случайные символы :)))) :)))

сейчас заведу


 
Тимохов ©   (2004-07-06 18:30) [79]

Прошу прощения у всех за мой оффтоп в sha
больше не повторится


 
Юрий Зотов ©   (2004-07-06 18:47) [80]

> DiamondShark ©   (06.07.04 18:06) [73]

> Как пойдёт разбор?

Повтор идентификатора a (который проверяется в любом случае). Значит, секция объявлений закончена и началась исполнимая секция. Именно семантика, и не требуется никаких откатов.


 
Igorek ©   (2004-07-06 21:18) [81]


> Sha ©   (06.07.04 18:20) [75]
> > Igorek ©
> Как тебе это:
>
> function p1: integer;
> function p2: integer;
> function p3: integer;
>  Result:=2;
>  Result:=2+p3;
>  Result:=2*p2;

А тебе это:

function p1: integer;

 function p2: integer;

   function p3: integer;
     Result:=2;

   Result:=2+p3;

 Result:=2*p2;

Дело тут не в грамматике, а в оформлении кода. Если вы заметили, то begin/end просто необязательные в моем предложении. Т.е. допустимы. Пишите их там, где теряется читабельность. Ну и не забывайте про отступы.


> Юрий Зотов ©   (06.07.04 15:50) [63]
> Синтаксически это прокатит, согласен. Но практического смысла
> не вижу - лишних два слова, а строгость и читабельность
> падают. Да и в реальности эти два слова все равно всегда
> будут присутствовать - редкая программа состоит из одного
> простого оператора.

Мы говорим о методах. Если вы посмотрите исходники нашей родной ВЦЛ, то увидите, что там очень много простых делигирующих методов, состоящих именно из одного <простого оператора>.



Страницы: 1 2 3 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.7 MB
Время: 0.042 c
3-1088748804
so_well
2004-07-02 10:13
2004.07.25
база и Rave Reports


14-1088950211
Rouse_
2004-07-04 18:10
2004.07.25
общий доступ к C: WINDOWS system32 spool drivers


4-1086870441
Лёха
2004-06-10 16:27
2004.07.25
RegNotifyChangeKeyValue, отслеживание реестра


3-1088758251
Pipl
2004-07-02 12:50
2004.07.25
Забавный формат даты в базе Access


14-1088691594
Копир
2004-07-01 18:19
2004.07.25
Женщина - это мужчина плюс таблетки?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский