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

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

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

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

9 ответов

24 просмотра

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

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 ->...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта