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

Вниз

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

 
Юрий Зотов ©   (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 (который проверяется в любом случае). Значит, секция объявлений закончена и началась исполнимая секция. Именно семантика, и не требуется никаких откатов.



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

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

Наверх




Память: 0.63 MB
Время: 0.051 c
1-1089795574
din
2004-07-14 12:59
2004.07.25
Подскажите пожалуйста какие нужны библиотеки


3-1088685364
Ceval
2004-07-01 16:36
2004.07.25
Подскажите как с помощью ADOTable связать две таблицы ?


1-1089446154
ltexcimer
2004-07-10 11:55
2004.07.25
сохранение записи в файл


14-1088770603
Иксик
2004-07-02 16:16
2004.07.25
Послать Ctrl-C bat-файлу


14-1088005083
Knight
2004-06-23 19:38
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский