Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.71 MB
Время: 0.042 c
9-1081748757
Мараканец
2004-04-12 09:45
2004.07.25
непонятки при загрузке 3DS


8-1083840133
lexx_av
2004-05-06 14:42
2004.07.25
Построение графика с помощью tchart


1-1089310072
Shc
2004-07-08 22:07
2004.07.25
Работа с XML (и Schema)


3-1088589754
adLer
2004-06-30 14:02
2004.07.25
Delphi надо просматривать изображение сохраняемое FoxPro


8-1083638047
тихий вовочка
2004-05-04 06:34
2004.07.25
Как избежать пропадания рисунка