Страница: 1 |
Страница: 1 |
Вопрос: Парсер
Добавлено: 31.01.06 09:38
Автор вопроса: Павел | Web-сайт:
Такая вот наукоёмкая вещь понадобилась... Sharp наверное смог бы
помочь, но по некоторым причинам его сейчас не бывает в онлайне :(
Нужно написать парсер языка программирования. Язык специфический:
некая смесь JavaScript и C#.
С чего начать?
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #1
Добавлено: 31.01.06 10:18
Сначала разбор кода по строчкам, потом сброс начальных и конечных пробелов и табов, дальше поиск ключевых слов в тех местах, где им положено быть. Потом тест на правила языка: знаки присваивания, скобки, точки с запятыми.. Отдельно прийдется писать парсер разбора выражений (типа eval() в js для математики и для логических операций). Сразу, ессно, повторяй регулярные выражения на том, на чём пишешь. Кстати, какая цель парсера: выдирать части кода (как msxml), раскрашивать синтаксис, проверять корректность в тексте, прежде, чем скармливать код компилятору? И что это за язык такой "JavaC#"?
Номер ответа: 2
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #2
Добавлено: 31.01.06 10:45
Основная задача - преобразовать код на этом языке в какое-то подобие CodeDOM. Ну вот скажем такой простенький примерчик кода:
{
class Person : SomeClass
{
var _firstName = 'Vasya';
property firstName
{
get
{
return _firstName;
}
set(value)
{
_firstName = value;
}
}
function hello()
{
alert('Hello, I'm ' + this.firstName);
}
}
}
В итоге я должен получить модель CodeDOM... Как бы это получше выразить... Ну представим это в виде XML, так проще
<NameSpace name="Samples">
<Class>
<Inheritance base="SomeClass" />
<Field name="_firstName">
'Vasya'
</Field>
<Property name="firstName">
<Get>
return _firstName;
</Get>
<Set>
_firstName = value;
</Set>
</Property>
<Method name="hello">
alert('Hello, I'm ' + this.firstName);
</Method>
</Class>
</NameSpace>
</Code>
Думаю, общая идея понятна...
Номер ответа: 3
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #3
Добавлено: 31.01.06 10:46
Точнее, это не совсем полная CodeDOM, но мне в принципе такой деализации модели будет достаточно Главное - распарсить основные структурные элементы. Сам программный код можно не трогать.
Номер ответа: 4
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #4
Добавлено: 31.01.06 11:37
Для подобных вещей созданы компиляторы компиляторов. Ему задаётся формализованное описание грамматики языка, он выдаёт исходный код компилятора для такого языка.
Возможно, если обработать напильником, получится искомое.
http://bbs.vbstreets.ru/viewtopic.php?t=20283
Номер ответа: 5
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #5
Добавлено: 31.01.06 11:48
Мне компилятор не нужен. Конечная цель - транслятор из этого языка в обычный JavaScript. Так как изменения по сравнению с JavaScript будут мизерные, собственно даже парсить программный код не нужно. Только основные структурные конструкции (нэймспэйсы, классы, свойства, методы и т.д.).
Номер ответа: 6
Автор ответа:
Fever
Вопросов: 60
Ответов: 808
Профиль | | #6
Добавлено: 03.02.06 18:06
Используй RegExp. Так проще. Больше ничего подсказать не могу. Лично я когда писал язык использовал RegExp.