Cвалка basic компиляторов

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Cвалка basic компиляторов

Сообщение Хакер » 07.07.2011 (Чт) 19:38

Qwertiy писал(а):Пример можно?

"A'B" — апостроф является частью строковой константой.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cвалка basic компиляторов

Сообщение jangle » 07.07.2011 (Чт) 19:40

Хакер писал(а):Значит как часть строковой константы, в которой он играет роль обычного символа.


Если ты имеешь ввиду это MsgBox " ' rem " то код как раз это учитывает

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Cвалка basic компиляторов

Сообщение Хакер » 07.07.2011 (Чт) 19:41

jangle писал(а):Если ты имеешь ввиду это MsgBox " ' rem " то код как раз это учитывает

В данном случае апостроф внутри строки, поэтому никакого комментария нет.
Но есть случай, когда апостроф не внутри строки, но комментария всё равно нет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re:

Сообщение jangle » 07.07.2011 (Чт) 19:42

Qwertiy писал(а):
jangle писал(а):Выложи скомпилированный бинарник, у меня нет VS2010

Test Апостроф.7z

PS: Почему exe во вложениях запрещены?


Вот за что я не люблю .NET Для запуска крошечной программки мне надо качать .NET Framework :(

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cвалка basic компиляторов

Сообщение jangle » 07.07.2011 (Чт) 19:43

Хакер писал(а):В данном случае апостроф внутри строки, поэтому никакого комментария нет.
Но есть случай, когда апостроф не внутри строки, но комментария всё равно нет.


Какая-то ерунда... Хоть пример кода покажи, как это может быть

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.07.2011 (Чт) 19:44

Хакер писал(а):
Qwertiy писал(а):Пример можно?

"A'B" — апостроф является частью строковой константой.

Вы разве не на это отвечали?
jangle писал(а):
Плюс есть ещё один момент касательно комментариев. Есть случай, когда апостроф не внутри строки, но и не начинает комментарий. Я думаю твой код на этом сфейлит.

Что значит апостроф не внутри строки?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.07.2011 (Чт) 19:46

jangle писал(а):Вот за что я не люблю .NET Для запуска крошечной программки мне надо качать .NET Framework :(

Test Апостроф (2).7z
Перекомпилировал под .NET 2.0
(6.35 Кб) Скачиваний: 71

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Cвалка basic компиляторов

Сообщение Хакер » 07.07.2011 (Чт) 19:50

jangle писал(а):Какая-то ерунда... Хоть пример кода покажи, как это может быть

Ну ты подумай, что есть в VB, чего нет в PB (хотя, может и есть, но тогда твой код не соответствует задаче). Тем более, я совсем недавно об этом писал.

Люблю загадывать, знаешь ли, загадки, но не люблю сразу открывать ответ. Сдаёшься?

Я, вообще, планировал, что Феникс сделает чудовищное по сложности, но работоспособное регулярное выражение, и тогда я покажу ему случай, когда оно не работает, чтобы он сделал более сложное, но работоспособное. Так сказать, преподать урок, что регулярные выражения спасают только в элементарных случаях, а когда случай чуть-чуть сложный, проще написать цикл-разборщик, чем регулярное выражение.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.07.2011 (Чт) 19:54

Хакер писал(а):Ну ты подумай, что есть в VB, чего нет в PB (хотя, может и есть, но тогда твой код не соответствует задаче). Тем более, я совсем недавно об этом писал.

Если Вы о таком Dim [Q'W] As Integer, то в VS2010 не поддерживается, как и [char*]...
Последний раз редактировалось Qwertiy 07.07.2011 (Чт) 19:55, всего редактировалось 1 раз.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Cвалка basic компиляторов

Сообщение Хакер » 07.07.2011 (Чт) 19:55

Qwertiy писал(а):то в VS2010 не поддерживается, как и [char*]...

И в php тоже, и Smalltalk-е. И в ассемблере. Поздравляю. Но я о VB.

Даже в VB это не поддерживается, зато поддерживается такое:
Код: Выделить всё
v = [Function-with-'strange'-name](arguments)
или
[ variable ' " # ] = 123
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cвалка basic компиляторов

Сообщение jangle » 07.07.2011 (Чт) 19:56

Хакер писал(а):
jangle писал(а):Какая-то ерунда... Хоть пример кода покажи, как это может быть

Ну ты подумай, что есть в VB, чего нет в PB (хотя, может и есть, но тогда твой код не соответствует задаче). Тем более, я совсем недавно об этом писал.

Люблю загадывать, знаешь ли, загадки, но не люблю сразу открывать ответ. Сдаёшься?



Да кончено, покажи свой код

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Cвалка basic компиляторов

Сообщение Хакер » 07.07.2011 (Чт) 19:57

См. выше. Кавычка, там, кстати, тоже не означает начало или конец строки, так что подход феникса с подсчётом чётности здесь обломается.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.07.2011 (Чт) 19:58

Хакер писал(а):И в php тоже, и Smalltalk-е. И в ассемблере. Поздравляю. Но я о VB.

Я тоже. Только о VB.NET.

Кстати, в моём коде поддерживается [Rem]. Можно легко и на апостроф повесть: заменить
Код: Выделить всё
        Case "'"c
          If Not InString Then
на
Код: Выделить всё
        Case "'"c
          If Not InString AndAlso Not InName Then


Хакер писал(а):Кавычка, там, кстати, тоже не означает начало или конец строки, так что подход феникса с подсчётом чётности здесь обломается.

И ей тоже :)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Cвалка basic компиляторов

Сообщение Хакер » 07.07.2011 (Чт) 20:01

Qwertiy писал(а):Я тоже. Только о VB.NET.

Не зли, пожалуйста, общественность.

VB и VB.NET разные языки. Мы говорим о VB. В свете этого, писать что-то, касающееся обработки VB.NET — злостный оффтопик. И особенно это хамство, когда малейшая синтаксическая особенность определяет победу/проигрышь кода-образетеля в деле прохождения теста, пихать в тему язык, в котором заведомо куча синтаксических отличий.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cвалка basic компиляторов

Сообщение jangle » 07.07.2011 (Чт) 20:02

Хакер писал(а):
Код: Выделить всё
v = [Function-with-'strange'-name](arguments)
или
[ variable ' " # ] = 123


Первый раз вижу такую неизвестную науке фигню :mrgreen:

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Cвалка basic компиляторов

Сообщение Хакер » 07.07.2011 (Чт) 20:03

jangle писал(а):Первый раз вижу такую неизвестную науке фигню :mrgreen:

Да, это знатное извращение, но оно поддерживается и является аспектом языка. Так что такие вот тесты (сделайте подсветку, которая подсветит как родная IDE, или хотя бы определит границы комментариев так же) хорошо определяют тонкое знание языка.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cвалка basic компиляторов

Сообщение jangle » 07.07.2011 (Чт) 20:11

Хакер писал(а):
jangle писал(а):Первый раз вижу такую неизвестную науке фигню :mrgreen:

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


А пример кода привести можешь? Чтобы его можно было запустить в VB

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.07.2011 (Чт) 20:14

Хакер писал(а):Да, это знатное извращение, но оно поддерживается и является аспектом языка. Так что такие вот тесты (сделайте подсветку, которая подсветит как родная IDE, или хотя бы определит границы комментариев так же) хорошо определяют тонкое знание языка.

Попробуйте-ка выполнить эту строчку ([ variable ' " # ] = 123) без Compilation Error (в VB6). У меня что-то не выходит.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re:

Сообщение jangle » 07.07.2011 (Чт) 20:16

Qwertiy писал(а):Попробуйте-ка выполнить эту строчку ([ variable ' " # ] = 123) без Compilation Error (в VB6). У меня что-то не выходит.


У меня таже фигня. Не работает такой код в VB6

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Cвалка basic компиляторов

Сообщение Хакер » 07.07.2011 (Чт) 20:21

jangle писал(а):У меня таже фигня. Не работает такой код в VB6

Блин, ну что за верх наивности. Естественно, будет ошибка, пока сущность с таким именем не будет объявлена.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cвалка basic компиляторов

Сообщение jangle » 07.07.2011 (Чт) 20:22

Хакер писал(а):Блин, ну что за верх наивности. Естественно, будет ошибка, пока сущность с таким именем не будет объявлена.


Ну так и просим поэтому тебя привести пример использования этой сущности. В виде работоспособного VB-исходника

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.07.2011 (Чт) 20:25

Хакер писал(а):Блин, ну что за верх наивности. Естественно, будет ошибка, пока сущность с таким именем не будет объявлена.

1. Если я не написал Option Explicit, то объявлять необязательно. Просерено на нормальном имене.
2. А как объявить? Dim не катит.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.07.2011 (Чт) 20:26

Кажется, понял. Значение квадратных скобок в VB6 другое было, не как в VB.NET. Надо чтобы такая переменная была объявлена где-то ещё или без скобок.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Cвалка basic компиляторов

Сообщение Хакер » 07.07.2011 (Чт) 20:34

Qwertiy писал(а):1. Если я не написал Option Explicit, то объявлять необязательно. Просерено на нормальном имене.

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

Например имя ___func_eq вполне нормальное с точки зрения Си, но неправильное, с точки зрения VB. Но его можно использовать, если писать [__func_eq]. И логично, что квадратные скобки позволяют использовать вообще самое корявое с точки зрения синтаксиса VB имя, а не только с символом подчёркивания.

Уж если мы делаем квадратные скобки для «корявых» имён сущностей, почему бы нам не разрешить и кавычки внутри таких скобок? — подумали авторы, и сделали внутри них доступными всё, что угодно, даже вложенные квадратные скобки.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cвалка basic компиляторов

Сообщение jangle » 07.07.2011 (Чт) 20:39

Хакер писал(а):[
Уж если мы делаем квадратные скобки для «корявых» имён сущностей, почему бы нам не разрешить и кавычки внутри таких скобок? — подумали авторы, и сделали внутри них доступными всё, что угодно, даже вложенные квадратные скобки.


Кавычки в имени функции? Программисту надо сильно обкурится, что бы придумать такое имя для функции.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Cвалка basic компиляторов

Сообщение Хакер » 07.07.2011 (Чт) 20:46

jangle писал(а):Кавычки в имени функции? Программисту надо сильно обкурится, что бы придумать такое имя для функции.

Скажем так, было два варианта:
  • Вообще всё, что угодно, внутри квадратных скобок.
  • Чуть больше, чем положено, но всё равно с ограничениями.

Понятно же, что первый вариант для разработчиков проще. И технически, и политически (не нужно устраивать совещение с темой «какие символы внутри квадратных скобок мы планируем запретить»).

И да, необязательно это должна быть функция. Это может быть член ассоциативного массива внутри, скажем, PHP. Или это может быть просто коллекция, ключи которой содержат кавычки (почему бы им их не содержать?).

Вот так, к примеру:
Код: Выделить всё
Forum.BBCodes!quote.Description = "Позволяет вставить цитату"
Forum.BBCodes!code.Description = "Позволяет вставить код"
Forum.BBCodes![code="vb"].Description = "Позволяет вставить код на VB" ' * * *   Ы ? Кавычка, равно
Forum.BBCodes!img.Description = "Позволяет вставить изображение"
Forum.BBCodes!color.Description = "Позволяет выделить фрагмент определённым цветом"
Forum.BBCodes!list.Description = "Позволяет вставить маркированный список"
Forum.BBCodes![list=1].Description = "Позволяет вставить нумерованный список" ' * * *   Ы ? Просто равно

Ну как? По моему пример не из-за граней фантастики.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Cвалка basic компиляторов

Сообщение ger_kar » 07.07.2011 (Чт) 20:47

Хакер писал(а):v = [Function-with-'strange'-name](arguments)или[ variable ' " # ] = 123
Да это просто какой-то злостный блэк-кодинг :)
Врядли кто-то в здравом уме такое будет использовать. ИМХО извращаться что бы написать обработчик для этой фигни, можно только ради спортивного интереса, а с практической точки зрения оно вряд ли понадобиться.
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Cвалка basic компиляторов

Сообщение Хакер » 07.07.2011 (Чт) 20:50

ger_kar писал(а):Да это просто какой-то злостный блэк-кодинг :)

Это то, что не имеет ничего общего с Black-coding-ом.

Black-coding — это когда используются волшебные константы (без имени, из-за чего непонятно, что они обозначают и откуда их вообще взяли) и вообще методики, по которым не скажешь, почему они вообще работают и откуда взялись.

А квадратные скобки — это штатная, документированная, редко, но иногда нужная возможность языка.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cвалка basic компиляторов

Сообщение jangle » 07.07.2011 (Чт) 21:01

Хакер писал(а):Forum.BBCodes![code="vb"].Description = "Позволяет вставить код на VB"
Ну как? По моему пример не из-за граней фантастики.


Это в этом месте парсер должен обломаться? Даже если в квадратных скобках допустимо использовать ' не в кавычках, то вопрос решается добавлением лишнего условия в сканер, который будет поднимать флаг при открытии квадратной скобки, и запрещать идущему за ним парсеру обрабатывать входной поток, до тех пор пока не встретится закрывающая квадратная скобка и флаг не будет опущен.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Cвалка basic компиляторов

Сообщение Хакер » 07.07.2011 (Чт) 21:09

jangle писал(а):Это в этом месте парсер должен обломаться?

Да.

jangle писал(а):Даже если в квадратных скобках допустимо использовать ' не в кавычках

Это неправильная формулировка. Внутри кв. скобок можно использовать и ', и ". И оба трактуются как просто символы.

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

Облом:
[[a] ' [b]] = 2

Твой флаг сбросится на 4-ом символе. Так что нужен не флаг, а счётчик.

В общем, счётчик это не проблема, но я изначально обращался к FireFenix-у. Пусть сделает это регулярками.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Пред.След.

Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 54

    TopList