Страница: 1 | 2 |
Вопрос: Интерпретатор
Добавлено: 20.07.06 21:05
Автор вопроса: Sacred Phoenix | ICQ: 304238252
На сайте видел пример интерпретатора пользовательского скриптового языка с подобным Basic'у синтаксисом. Киньте линк, плиз, если кто видел. Ещё прошу подкинуть линки на доки типа "С чего начинать?.." и т.д. (задумал написать свой интерпретатор, доков не хватает). Заранее спасибо.
Ответы
Всего ответов: 24
Номер ответа: 1
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #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-сайт:
Профиль | | #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-сайт:
Профиль | | #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: ну а всё-таки? У кого есть какие идеи? Думаю, во-первых, надо составить правильную грамматику, что-то типа:
<UNIT> = <NUMBER> | <CONSTANT>
<NUMBER> = <INTEGER> | <ECIMAL>
<INTEGER> = <FIGURE> | <FIGURE><INTEGER>
<ECIMAL> = <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-сайт:
Профиль | | #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><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-сайт:
Профиль | | #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-сайт:
Профиль | | #14
Добавлено: 21.07.06 21:41
кто ж интерпретаторы на HTML пишет?
Номер ответа: 15
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #15
Добавлено: 21.07.06 22:14
Блин, HTML здесь причём??? Так лексемы обозначаются!