forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   Интерпретатор JavaScript-подобного языка (http://forum.boolean.name/showthread.php?t=13311)

pax 10.09.2010 14:54

Интерпретатор JavaScript-подобного языка
 
Захотелось вот для собственного развития написать интерпретатор JavaScript-подобного языка на C#. Начал писать лексический анализатор. Вроде пока ничего сложного, т.к. разобрать текст с программой на лексеммы - это маленькая толика всего что разделяет текст от исполняемой части. Не мог бы кто помочь в поиске доступно написанной теории написания лексических и синтаксических анализаторов?

Randomize 10.09.2010 20:42

Ответ: Интерпретатор JavaScript-подобного языка
 
http://www.gamedev.ru/code/articles/?id=4245
http://www.gamedev.ru/code/articles/?id=4245&page=2
Тоже поможет:
http://www.gamedev.ru/articles/?id=70104
http://isir.ras.ru/ph/0005/NOV8QCSR.pdf
http://algolang.da.ru/

pax 11.09.2010 11:39

Ответ: Интерпретатор JavaScript-подобного языка
 
Вложений: 2
Пока частично написал лексический анализ, в приложении есть тест. Находит числа, строки, операторы, комментарии, скобки, идентификаторы. (приложение требует наличия NetFramework 3.5)

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

Randomize 23.09.2010 05:35

Ответ: Интерпретатор JavaScript-подобного языка
 
По идее на endline не нужно обращать внимания.
Вернее правильно его заменять на пробел перед разбором.
Допустим:
PHP код:

/*немного магии*/ x=(y); y=(y); x=(y); 


pax 23.09.2010 14:35

Ответ: Интерпретатор JavaScript-подобного языка
 
Цитата:

Сообщение от Randomize (Сообщение 163016)
По идее на endline не нужно обращать внимания.
Вернее правильно его заменять на пробел перед разбором.
Допустим:
PHP код:

/*немного магии*/ x=(y); y=(y); x=(y); 


Ну такой код будет правильно разобран при нахождении ";". Вообще подумаю, первый мой недоинтерпретатор был с немного бэйсикоподобным синтаксисом. Пока да, не могу придумать примера, в котором необходимо знать о конце строки. Убрать всегда можно ;)

upd: вспоминая о minified версиях js-скриптов получается что точно не нужно обращать внимания. Спасибо за совет. А заменять на пробел нет необходимости. Пробелы, табуляции и перевод каретки игнорируются. Будут игнорироваться и переводы строк :)

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

Кстати есть у кого идеи по поводу того, в какой момент ловить операцию смены знака (там где унарный оператор "-"). Я раньше получая формулу просматривал все операторы "-" и менял их на "±" если перед ними стояла открывающая скобка/другой оператор, разделитель и т.д. Может есть другие способы это определить.

PS: для разбора формул использую ОПН. Кстати подумалось о других унарных операторах... надо бы какой-то метод надежный для их определения... и еще не знаю как реализовать ++i и i++

pax 06.10.2010 16:30

Ответ: Интерпретатор JavaScript-подобного языка
 
Нечайно наткнулся на такую ссылку http://jint.codeplex.com/
Чувствую буду его исходники разбирать...


Часовой пояс GMT +4, время: 20:54.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot