185 похожих чатов

Прошу прощение, что вопрос снова про фронтенд. На какой стадии происходит

вычисления значения нетерминальных токенов? Или это происходит в рамках какой-то стадии?

Вот предположим есть стадия (вероятно её следует назвать стадия лексического анализа?), на которой исходный код разбивается на массив токенов типо {kind, start_pos, end_pos}. В рамках следующей стадии и должно происходить вычисление значений нетерминальных токенов? Или же стадия лексического анализа уже должна была эти значения вычислить (а когда? В конце просто пройтись по уже готовому списку токенов или же «одновременно» с парсингом нетерминального токена)?

9 ответов

6 просмотров

А что такое "значение нетерминального токена"?

Miroslav-Belov Автор вопроса
Alexander Chichigin
А что такое "значение нетерминального токена"?

Токены, по типу которых нельзя однозначно определить какой последовательностью символов они были заданы в исходном тексте, называются нетерминальным, правильно? Тогда такие токены — это например строковые, числовые и символьные (мм, я имел ввиду идентификаторы, но один символ тоже ведь такой) литералы. Вот, например для строкового литерала "z\x01z" значением будет массив байт 7A 01 7A (надеюсь не напутал😊)

> Токены, по типу которых нельзя однозначно определить какой последовательностью символов они были заданы в исходном тексте, называются нетерминальным, правильно? Нет, это что-то совершенно из другой области... Я вообще пока не понимаю, о чём Вы спрашиваете и какую проблему пытаетесь решить...

Miroslav-Belov Автор вопроса
Alexander Chichigin
> Токены, по типу которых нельзя однозначно опреде...

1. Ох, извиняюсь. А есть термин для такого подмножества токенов? (по одному лишь типу которых нельзя однозначно определить какой последовательностью символов они были заданы в исходном коде) 2. Пытаюсь разобраться в стадиях фронтенда. Вот первая стадия это вроде как стадия лексического анализа, которая разбивает исходный код на последовательность токенов. То есть, что-то {token_kind, start_pos, end_pos}. Потом, вероятно, идёт стадия синтаксического анализа. Ей «значения токенов» не нужны скорее всего, так? А на какой стадии происходит вычисление этих «значений токенов»? Ведь рано или поздно нужно будет знать, какой именно идентификатор используется, какая именно строка, какое именно число обозначено тем или иным токеном. 3. Кстати, а может для «значений токенов» тоже есть термин?

Miroslav Belov
1. Ох, извиняюсь. А есть термин для такого подмнож...

После лексера идёт парсер, ему-то как раз значения нужны, чтобы было из чего AST строить.

Miroslav Belov
Токены, по типу которых нельзя однозначно определи...

Нетерминалы — это конструкции в грамматике. Терминалы — это отдельные токены.

есть строчка "1 + 2" ну вот тебе лексер выдал lex : string -> stream(token) [ {{int, 1}, 0, 1}, {plus, 2, 3}, {{int, 2}, 4, 5} ] парсер это превратил в конкретное синтаксическое дерево parse : steam(token) -> tree(token) {plus, 2, 3, {{int, 1}, 0, 1}, {{int, 2}, 4, 5}} которое потом можно превратиться в другое уже абстраткное дерево, с которым уже работает бэк, например такая трансформация, которая все операторы объединяет abstract : tree(token) -> AST {op, plus, 2, 3, {{int, 1}, 0, 1}, {{int, 2}, 4, 5}} никаких значений токенов в результате не появилось

Miroslav-Belov Автор вопроса
кана
есть строчка "1 + 2" ну вот тебе лексер выдал le...

У меня лексер по-другому работает: lex : string -> stream(token), где token это {token_kind, token_start, token_end}. Следственно, для примера "1 + 2" я получу что-то типо этого: [ {INT, 0, 1}, {PLUS, 2, 3}, {INT, 4, 5} // ну и еще EOL или EOI токен тут будет ]

Miroslav Belov
У меня лексер по-другому работает: lex : string ->...

ну так у меня такой же лексер, только ты в токенах потерял информацию важную

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
83
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
Вопрос вроде правильно, но что надо сделать, чтоб текст был виден нормально ? ghci> TE.decodeUtf8 $ TE.encodeUtf8 "test - проба" "test - \1087\1088\1086\1073\1072"
Fedor
7
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
@HemulGM Параметры у AddStream поменялись? Несостыковка какая-то
Катерина Свиридова
12
Карта сайта