Форум: "Потрепаться";
Текущий архив: 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