VBStreets Conference - Преглед на темата - Команден интерпретатор
Целият вкус на програмирането!
- Списък на форумите‹Visual basic‹Visual Basic 1-6
- Променете размера на шрифта
- ЧЗВ
- вход
Команден интерпретатор
Команден интерпретатор
Re: Команден интерпретатор
Re: Команден интерпретатор
Re: Команден интерпретатор
Re: Команден интерпретатор
Re: Команден интерпретатор
Re: Команден интерпретатор
Uuu, добре, това е случаят. Писането на собствен интерпретатор е първата стъпка към писането на собствен компилатор.
Като цяло задача може да бъде разделена на две задачи:
• парсер
• команден манипулатор
Ето примерен код на парсер
Код: Изберете Всички A1 = Разделяне (InputFile, vbCrLf) 'Ако използваме нов ред за разделяне на редовете. Или:
A1 = Разделяне (InputFile, ";") 'За синтаксис на паскал.
След това, като имаме в масива A1 ключовите думи на нашия скрипт с параметри, така че?
Ако с параметри, тогава допълнително разделяме всеки елемент от масива според характеристиката, която разделя параметрите, т.е. по интервал.
Сега за кода на манипулатора на команди. Това е най-простият команден процесор от уроците по компютърни науки:
Първо, примерен скрипт:
Поздрави_света
Write_to_register HKCU Software \ MySoft \ Main LastUser Vasya
Сума 2 + 3
Show_total
Print_message Header vbOKOnly "Не знам как, но анализаторът трябва да може да обработва низове, съдържащи интервали"
Код: Изберете всички „Например за втория ред на скрипта в масив А2 ще има:
„0 1 2 3 4
'"Write_to_register", "HKCU", "Software \ MySoft \ Main", "LastUser", "Vasya"
Изберете случай A2 (0)
Дело "Write_to_register": Call Reeesr.Add (A2 (1), A2 (2), A2 (3), A2 (4)) 'направи това
Дело "Greet_world": MsgBox ("Здравей, свят!")
Калъф "Display_message": MsgBox A2 (1), A2 (2), A2 (3)
Дело "Сума": Ret = A2 (1) + A2 (3)
случай "Show_total": MsgBox Ret
Калъф "Изпълнение": Shell A2 (1), vbNormalFocus
край Изберете
Тук предполагам, че Reestr е клас, който работи с системния регистър и има метод .Add (Ключ като низ, Път като низ, Име като низ, Стойност като вариант), който добавя запис в системния регистър; че анализаторът по някакъв начин реагира на кавичките и третира всичко до следващия цитат (включително интервалите) като един параметър.
Re: Команден интерпретатор
Re: Команден интерпретатор
Re: Команден интерпретатор
Денис, моля, напишете правилната формулировка.
Не "примерен код на парсер", а "пример за това как никога не трябва да пишете парсер".
Re: Команден интерпретатор
Интересно, но как е по-правилно?
1) Анализ и разделяне на кода в списък с прости операции
2) Ако се използват модули - проверете за тяхното присъствие
3) Изпълнение на команди от списъка
?
Re: Команден интерпретатор
Никой не анализира текста, кода с помощта на разделяния и леви низове. Това е подобно на запояване на тънка електроника с горещ пирон в огън.
Или друг шиз: използване на регулярни изрази за тази цел.
Re: Команден интерпретатор
Едва ли - най-вероятно просто невежество. Същият контрол на скрипта за очите е достатъчен за неговата задача.
Re: Команден интерпретатор
Hacker написа: Никой не анализира текста, кода с помощта на разделяния и леви низове. Това е подобно на запояване на тънка електроника с горещ пирон в огън.
Или друг шиз: използване на регулярни изрази за тази цел.
Re: Команден интерпретатор
Hacker написа: Никой не анализира текста, кода с помощта на разделяния и леви низове. Това е подобно на запояване на тънка електроника с горещ пирон в огън.
Или друг шиз: използване на регулярни изрази за тази цел.
Глупости на системния специалист Приложното програмиране като цяло и по-специално езиците на високо ниво са току-що създадени, за да анализират текста с помощта на разделяния и оставени низове и други удобни неща, които не отвличат вниманието от основната идея с проблеми с разпределението на паметта. И това не е подобно на запояване с пирон, а подобно на превключване на съединители и джъмпери. Но вашите методи, скъпи систематисти, са точно като запояване, където можете да се справите със стандартен съединител, или, както някой каза, подобно на проектирането на звезден кораб.
Анализатор по моя пример, това е пример за това как можете да направите парсер. Отстоявам мнението си.
Кой не го харесва, напишете вашия пример как да прави и как да не прави.
Re: Команден интерпретатор
Re: Команден интерпретатор
Re: Команден интерпретатор
Мислите ли, че съм трол? Случвало ли ви се е да помислите, че наистина мисля така? Или беше необходимо изрично да се добави съкращението "IMHO"?
Re: Команден интерпретатор
Re: Команден интерпретатор
Re: Команден интерпретатор
Re: Команден интерпретатор
Доколкото разбирам, тези неща се организират с помощта на скокова таблица и че някои компилатори - например C # - създават такива конструкции автоматично, но във VB.Net и още повече в по-старите версии на VB това не е предвидено. Възможно ли е да обърнете този трик ръчно?