Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Интерпретатор Добавлено: 20.07.06 21:05  

Автор вопроса:  Sacred Phoenix | ICQ: 304238252 
На сайте видел пример интерпретатора пользовательского скриптового языка с подобным Basic'у синтаксисом. Киньте линк, плиз, если кто видел. Ещё прошу подкинуть линки на доки типа "С чего начинать?.." и т.д. (задумал написать свой интерпретатор, доков не хватает). Заранее спасибо.

Ответить

  Ответы Всего ответов: 24  

Номер ответа: 1
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #1
Добавлено: 20.07.06 21:28
задумал написать свой интерпретатор

А чем ВБ.НЕТ не нравится?

Ответить

Номер ответа: 2
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #2 Добавлено: 20.07.06 22:12
нравица. но если точнее, хочу написать интерпретатор матформул. Есть ли чё-нить для этого в VB.NET (не прибегая ко всяким CodeCompiler и т.д.)? Но всё равно, свой скриптовый язык написать не помешало бы...

Ответить

Номер ответа: 3
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #3
Добавлено: 20.07.06 23:37
ааа, а я вот тоже хотел, но я вот только что закончил писать считалку для выражений формата А1+А2+А3+..+Ан где А-любое число, которе может вернуть функция Val() из куска строки (типа "-1+6+3.14";). Так то не сложно было, но строковые задачки из олимпиад вспомнить пришлось :) Если интересно, можешь глянуть, заодно и подскажешь насчёт слабых мест

Ответить

Номер ответа: 4
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #4 Добавлено: 20.07.06 23:45
а как ты эту считалку писал?

Ответить

Номер ответа: 5
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #5
Добавлено: 20.07.06 23:53
разбивал строку на слагаемые (каждое со знаком) и складывал

Ответить

Номер ответа: 6
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #6 Добавлено: 21.07.06 01:09
зачем? wsc рулит, да и api по имени вызывать умеем, т.е. при желании почти полная поддержка VB прям в ходе выполнения программы...

Ответить

Номер ответа: 7
Автор ответа:
 JMP



Вопросов: 6
Ответов: 171
 Профиль | | #7 Добавлено: 21.07.06 08:02
WHS [Windows Host Script] link -> c:\windows

Попробуйте пообщаться с "Батей" в форуме на
http://forum.wincmd.ru/

Он на нем чудеса пишет.

Best regards,

Ответить

Номер ответа: 8
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #8 Добавлено: 21.07.06 15:58
2 Morpheus: ааа, а нормальный интерпретатор должен разбивать на лексемы, потом проверять правильность данных и т.д. Там намного сложнее
2 JMP: спасибо за линк, загляну.
2 All: ну а всё-таки? У кого есть какие идеи? Думаю, во-первых, надо составить правильную грамматику, что-то типа:

<EXPRESSION> = <EXPRESSION><ACTION><EXPRESSION> | <FUNCTION> | (<EXPRESSION>;) | <UNIT>
<UNIT> = <NUMBER> | <CONSTANT>
<NUMBER> = <INTEGER> | <;DECIMAL>
<INTEGER> = <FIGURE> | <FIGURE><INTEGER>
<;DECIMAL> = <INTEGER> + "." + <INTEGER>
<FUNCTION> = <IDENTIFIER> + ";(" + <ARGUMENTS> + ";)"
<ARGUMENTS> = <ARGUMENT> | <ARGUMENT> + ","
<ARGUMENT> = <EXPRESSION>
<IDENTIFIER> = "ABS" | "SIN" | "COS" | "TAN" | "SQR" | "ATN" | "LOG" | "SGN" | "INT"
<FIGURE> = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<ACTION> = "+" | "-" | "*" | "/" | "^" | "mod" | "\" | "%"
<CONSTANT> = "PI" | "E"

Ответить

Номер ответа: 9
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #9
Добавлено: 21.07.06 16:06
Это у меня самая "низкая" функция, то есть обработчик скобок там и тд я ещё не писал, но мне кажется надо юзать рекурсию - то есть типа 2 * (2+3+4) - (2+3+4+5) - читаешь содержимое скобок и вызываешь саму себя, а это мы делать умеем. Потом полученное значение ставим вместо скобок и продолжаем сначала. и пока не дойдём до простёйшей суммы там или произведения... хз, мне кажется так. Хотя CyRax например говорил что надо раскрыть скобки

Ответить

Номер ответа: 10
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #10 Добавлено: 21.07.06 18:48
Есть функция (по-моему рекурсивная), которая разбивает выражение на входе на лексемы. Называется «Lexer». Вот, например, разбитие выражения "2*(2+3+4)":

<EXPRESSION>
<EXPRESSION><ACTION><EXPRESSION>
<EXPRESSION><ACTION>";("<EXPRESSION>";)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION>";)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION><ACTION><EXPRESSION>";)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION><ACTION><UNIT>";)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION><ACTION><NUMBER>";)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION><ACTION><POSITIVE>";)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION><ACTION><INTEGER>";)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION><ACTION><FIGURE>";)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION><ACTION>"4)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION>"+4)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><UNIT>"+4)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><NUMBER>"+4)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><POSITIVE>"+4)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><INTEGER>"+4)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><FIGURE>"+4)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION>"3+4)"
<EXPRESSION><ACTION>";("<EXPRESSION>"+3+4)"
<EXPRESSION><ACTION>";("<UNIT>"+3+4)"
<EXPRESSION><ACTION>";("<NUMBER>"+3+4)"
<EXPRESSION><ACTION>";("<POSITIVE>"+3+4)"
<EXPRESSION><ACTION>";("<INTEGER>"+3+4)"
<EXPRESSION><ACTION>";("<FIGURE>"+3+4)"
<EXPRESSION><ACTION>";(2+3+4)"
<EXPRESSION>"*(2+3+4)"
<UNIT>"*(2+3+4)"
<NUMBER>"*(2+3+4)"
<POSITIVE>"*(2+3+4)"
<INTEGER>"*(2+3+4)"
<FIGURE>"*(2+3+4)"
"2*(2+3+4)"

Т.е. функция «рекурсивно» распознаёт элементы справа налево, при этом в зависимости от распознанного элемента чё-то делает. Имхо, так.

Ответить

Номер ответа: 11
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #11 Добавлено: 21.07.06 18:50
тьфу, слово "рекурсивно" в пред. посте имелось в виду без кавычек...

Ответить

Номер ответа: 12
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #12
Добавлено: 21.07.06 19:57

<EXPRESSION>
<EXPRESSION><ACTION><EXPRESSION>
<EXPRESSION><ACTION>";("<EXPRESSION>";)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION>";)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION><ACTION><EXPRESSION>";)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION><ACTION><UNIT>";)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION><ACTION><NUMBER>";)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION><ACTION><POSITIVE>";)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION><ACTION><INTEGER>";)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION><ACTION><FIGURE>";)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION><ACTION>"4)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><EXPRESSION>"+4)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><UNIT>"+4)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><NUMBER>"+4)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><POSITIVE>"+4)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><INTEGER>"+4)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION><FIGURE>"+4)"
<EXPRESSION><ACTION>";("<EXPRESSION><ACTION>"3+4)"
<EXPRESSION><ACTION>";("<EXPRESSION>"+3+4)"
<EXPRESSION><ACTION>";("<UNIT>"+3+4)"
<EXPRESSION><ACTION>";("<NUMBER>"+3+4)"
<EXPRESSION><ACTION>";("<POSITIVE>"+3+4)"
<EXPRESSION><ACTION>";("<INTEGER>"+3+4)"
<EXPRESSION><ACTION>";("<FIGURE>"+3+4)"
<EXPRESSION><ACTION>";(2+3+4)"
<EXPRESSION>"*(2+3+4)"
<UNIT>"*(2+3+4)"
<NUMBER>"*(2+3+4)"
<POSITIVE>"*(2+3+4)"
<INTEGER>"*(2+3+4)"
<FIGURE>"*(2+3+4)"
"2*(2+3+4)"

Чё ЭТО за HTML блин?! :)

Ответить

Номер ответа: 13
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #13 Добавлено: 21.07.06 20:08
ЭТО «Грамматика» называется. Lexer разбивает выражения на лексемы (тег в ЭТОМ — и есть лексема). HTML'ец ты, блинов!.. )))

Ответить

Номер ответа: 14
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #14
Добавлено: 21.07.06 21:41
кто ж интерпретаторы на HTML пишет?

Ответить

Номер ответа: 15
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #15 Добавлено: 21.07.06 22:14
Блин, HTML здесь причём??? Так лексемы обозначаются!

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам