Автоматическая проверка синтаксиса VB кода

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Автоматическая проверка синтаксиса VB кода

Сообщение jangle » 03.05.2007 (Чт) 15:00

Есть ли быстрый способо проверить на валидность VB код?
Например школьник тестируется на знание языка, и ему надо написать простейшую программку Hello World. Тестирующая система должна автоматически проверить синтаксис и семантику и в случае ошибок, зафиксировать их.

Код: Выделить всё
Sub Main()
Msgbox "Hello " & " Word" & "!"
End Sub


При этом код не должен запускаться на исполнение, вдруг тестируемый напишет Shell "Format C:", должна быть только проверка на ошибки. Может есть какой-нибудь компанент который реализует такой функционал. Писать самому синтаксический и семантический анализатор, не реально.

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

Сообщение Хакер » 03.05.2007 (Чт) 15:31

Ну вопервых определись - что такое валидный код. Это код без Compile-error? Или код без Compile- и Runtime- ошибок? Если так то наличие Run-time ошибок можно подтвердить только запустив код (да и то не всегда получается :) ).

А если только Compile - то пиши "синтаксический и семантический анализатор" это реально :) Но ооочень долго. Всё зависит от сложности проверяемого кода.

А вообще для таких целей (проверка правильности) обычно используется учитель.
—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
Откуда: Нидерланды

Сообщение jangle » 03.05.2007 (Чт) 15:42

А если только Compile - то пиши "синтаксический и семантический анализатор" это реально Но ооочень долго. Всё зависит от сложности проверяемого кода.


Вот этого хотелось бы избежать


А вообще для таких целей (проверка правильности) обычно используется учитель


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

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 03.05.2007 (Чт) 15:48

jangle писал(а):автоматизированного тестирования

Тогда уж проще - "выберите из предложенных вариантов правильный".
Salus populi suprema lex

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 03.05.2007 (Чт) 15:55

jangle
VB6.exe с параметрами сборки, чо не так - выбьет мессагу. Оптимально юзать .NET - vbc пишет в stderror, если что.
Изображение

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

Сообщение Хакер » 03.05.2007 (Чт) 15:56

jangle
Скажи мне, что такое Compile Error ? Это собирательно о Syntax error и о некоторой недопустимости кода.

Что такое Syntax error? Это нарушение в структуре кода, расхождение с правилами написания конкретного языка. Как учитель находит в коде Syntax Error. Он просматривает каждую строчку и старается её классифицировать. Если строчку не удаётся классифицировать - это уже Syntax error.

А если удаётся? Например строка
Код: Выделить всё
If (фыва фыва фыва фыва фыва фыва фыва ) Then

классифицируется как начало условной конструкции - If-блока.

А у if-блока между if и then должно быть что? Правильно - выражение.

А тепер попробуем классифицировать (фыва фыва фыва фыва фыва фыва фыва ) как выражения. На этом шаге мы и находим ошибку - Invalid Expression.


И тд.

Вобщем, принцип анализа таков:

Разбей весь код на токены (я имею ввиду не объекты ядра, а элементы "скрипта" ).

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

Дальше в зависимости от типа токена - определяй, правильно ли он записан according его типа :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

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

keks-n
Агитатор :x
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.05.2007 (Чт) 16:08

jangle писал(а):
А если только Compile - то пиши "синтаксический и семантический анализатор" это реально Но ооочень долго. Всё зависит от сложности проверяемого кода.


Вот этого хотелось бы избежать

Готовые грамматики находятся гуглом (сам видел).
Готовые построители анализаторов по грамматикам находятся гуглом (сам видел).
Пример компилятора, в котором используются автосгенерированные по грамматикам анализаторы, лежит в Проектах.
В чём затруднения?


Хакер писал(а):Вобщем, принцип анализа таков:

Разбей весь код на токены (я имею ввиду не объекты ядра, а элементы "скрипта" ).

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

Дальше в зависимости от типа токена - определяй, правильно ли он записан according его типа :)

И что, ты предлагаешь реализовать такой анализатор в виде леса из условных конструкций? :roll: :roll:
Изображение

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

Сообщение jangle » 03.05.2007 (Чт) 16:34

VB6.exe с параметрами сборки, чо не так - выбьет мессагу. Оптимально юзать .NET - vbc пишет в stderror, если что.


Интересный вариант. К сожалению, ведь нельзя запихнуть компиляторы от МS в свои проекты, лицензионные ограничения и т.д.

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

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

А зачем запихивать?
—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
Откуда: Нидерланды

Сообщение jangle » 03.05.2007 (Чт) 17:07

А зачем запихивать?


Ну все равно программа будет зависить от других приложений, а это не есть гуд..

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 03.05.2007 (Чт) 20:16

Пиши компилятор :)


Кстати, vbc.exe - абсолютно бесплатный продукт, включённый в .NET Framework.
Изображение

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

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

keks-n
Прекрати :twisted:

Вопервых это явная агитация, во вторых, человек написал - ему нужен VB, а не VB .NET.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 03.05.2007 (Чт) 20:56

Синтаксис несильно поменялся :roll:
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.05.2007 (Чт) 21:04

keks-n писал(а):Синтаксис несильно поменялся :roll:

Ага, а ещё можно натравить на прогу qbasic, встроенный в Win9x.
Фига ли, синтаксис ведь несильно поменялся!
Изображение

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

Сообщение jangle » 04.05.2007 (Пт) 12:43

Вроде нашел решение, Gold Parser.

http://www.devincook.com/goldparser/

Есть даже грамматики для VBScript и Visual Basic .NET


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 41

    TopList