powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Парсер для своего скрипта
6 сообщений из 6, страница 1 из 1
Парсер для своего скрипта
    #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
Парсер для своего скрипта
    #37949788
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Парсер для своего скрипта
    #37949791
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В студенческие годы выполняя лабораторные написал свой "сискаль", но промышленного опыта написания трансляторов/компиляторов нет.

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

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

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


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