Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Парсер для своего скрипта / 6 сообщений из 6, страница 1 из 1
09.09.2012, 10:13:46
    #37949783
Show
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер для своего скрипта
Доброго времени суток.

Передо мной встала необходимость сделать для моего проекта свой маленький компилируемый скриптовый язык, не использующий никаких нативных библиотек.

На данный момент уже готовы виртуальная машина, эмулятор ассамблера и логическое дерево (самое простое, как мне кажется).

После этого я начал создавать переводчик потока символов в лексемы и анализатор кода (создатель логического дерева).

Т.е. порядок действий такой.
Сначала надо перевести код:
Код: sql
1.
2.
3.
4.
5.
if(a == b) {
	print(a);
} else {
	a = b;
}

в лексемы:
Код: sql
1.
2.
3.
4.
5.
IF; EXPSTA; IDENT:a; COMPARE; IDENT:b; EXPEND; COMPSTA;
IDENT:print; EXPSTA; IDENT:a; EXPEND; END;
COMPEND; ELSE; COMPSTA;
IDENT:a; ASSIGN; IDENT:b; END;
COMPEND;

а затем в синтаксическое дерево (графический вариант, ниже есть пример кода):


В первом случае ничего сложного нет, но во втором начинается самое сложное. Необходимо как-то пропарсить лексемы в дерево. Я пытался по простому циклом пройтись по всем лексемам и CASE'ом определить парсинг каждого оператора, но там получается слишком большие конструкции.

Пример класса LogicTree:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
public final class LogicTree {
    public static enum Type {
        STMT_LIST,
        EMPTY_STMT,
        EXPR_STMT,
        IFTHEN_STMT,
        IFTHENELSE_STMT,
        ERROR_STMT,

        EQUAL_EXPR,
        ASSIGN_EXPR,
        CONCAT_EXPR,
        IDENT_EXPR,
    }
    public static enum DataType {

        T_VOID,
        T_OBJECT
    }
    private static final int MAX_SUBTREES = 3;
    private LogicTree parent;
    private Iterator<Token> it;
    private Type type;
    public String symbol;
    public LogicTree subtrees[] = new LogicTree[MAX_SUBTREES];

    public LogicTree(Type type) {
        this.type = type;
        check();
    }
    public LogicTree(Type type, LogicTree... subtrees) {
        this.type = type;
        this.subtrees = subtrees;
        check();
    }
    public Type getType() {
        return type;
    }
    // Check the semantics of this tree
    public void check() {
    }
}


Кто нибудь может мне помочь? Есть у кого мысли в какую сторону смотреть?

Заранее благодарен.
...
Рейтинг: 0 / 0
09.09.2012, 10:26:43
    #37949788
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер для своего скрипта
...
Рейтинг: 0 / 0
09.09.2012, 10:36:03
    #37949791
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер для своего скрипта
В студенческие годы выполняя лабораторные написал свой "сискаль", но промышленного опыта написания трансляторов/компиляторов нет.

авторКто нибудь может мне помочь? Есть у кого мысли в какую сторону смотреть?Думаю начинать лучше всего с теории, прочитав например "Dragon book". Потом нужно определиться с грамматикой, ну и в зависимости от нее выбирать способ разбора.

Создавать в реальном проеке свой язык не являясь экспертом в этом области - это очень опасно. Видимо большую бомбу ты хочешь заложить тем кому придется поддерживать твой код в будущем. Коллеги тебе будут за это очень благодарны.
...
Рейтинг: 0 / 0
09.09.2012, 12:23:10
    #37949828
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер для своего скрипта
ShowКто нибудь может мне помочь? Есть у кого мысли в какую сторону смотреть?

groovy, beanshell и другие реализации jsr 223.
Если писать самому - то javacc, antlr, scala parser combinators.
...
Рейтинг: 0 / 0
09.09.2012, 15:48:51
    #37949947
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер для своего скрипта
+1 за scala, как-то был нужен дсл с несложной грамматикой - уложился в пару дней
...
Рейтинг: 0 / 0
10.09.2012, 06:42:57
    #37950394
Show
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер для своего скрипта
Благодарю всех за скорую помощь.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Парсер для своего скрипта / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]