Size: a a a

Compiler Development

2021 March 07

AK

Andrei Kurosh in Compiler Development
Danya
То есть PHP сначала парсит, если все ок, то транслирует в байткод и байткод выполняет?
Я не эксперт, но у него есть несколько режимов выполнения - как интерактивный построчный, так и запуск скомпилированного байт-кода без исходника
источник

D

Danya in Compiler Development
Andrei Kurosh
Я не эксперт, но у него есть несколько режимов выполнения - как интерактивный построчный, так и запуск скомпилированного байт-кода без исходника
Понял
источник

AK

Andrei Kurosh in Compiler Development
У питона и джиеса тоже
источник
2021 March 08

РС

Роман Соловьев... in Compiler Development
Ruslan Neshta
я бы просто выводил все ошибки лексера а потом и парсера
плюс в том что сразу ошибки от обоих, но в этом же и минус - могут дублироваться или накапливаться
в любом случае компилятор не исправляет сами ошибки а лишь выводит сообщение
так в этом и вопрос. Как просто выводить, если по таблице он не знает куда идти)
источник

RN

Ruslan Neshta in Compiler Development
не понятно чего он не знает
у него есть определенные правила, он находит несостыковку, дальше надо написать сообщение
мол такая строка, такая колонка, ожидается такой-то токен, или неожиданный символ
можно в дать возможность вместе с граматикой вводить сообщения об ошибках(таблицу сообщений об ошибках)
источник

AK

Andrei Kurosh in Compiler Development
Ruslan Neshta
не понятно чего он не знает
у него есть определенные правила, он находит несостыковку, дальше надо написать сообщение
мол такая строка, такая колонка, ожидается такой-то токен, или неожиданный символ
можно в дать возможность вместе с граматикой вводить сообщения об ошибках(таблицу сообщений об ошибках)
У парсер-комбинаторов обычно такие ошибки и бывают: «строка 359: ожидается number, или string, или true, или false, или identifier, или var, или while, или if, или for, или (, или ...» и так далее, что мягко говоря недружественно для пользователя
источник

AT

Alexander Tchitchigi... in Compiler Development
Andrei Kurosh
У парсер-комбинаторов обычно такие ошибки и бывают: «строка 359: ожидается number, или string, или true, или false, или identifier, или var, или while, или if, или for, или (, или ...» и так далее, что мягко говоря недружественно для пользователя
А я такое от ANTLR получал в больших количествах. 😊
"Тупые" комбинаторы парсеров вообще склонны рапортовать только "нишмогла" и ничего больше... 😒
источник

РС

Роман Соловьев... in Compiler Development
Ruslan Neshta
не понятно чего он не знает
у него есть определенные правила, он находит несостыковку, дальше надо написать сообщение
мол такая строка, такая колонка, ожидается такой-то токен, или неожиданный символ
можно в дать возможность вместе с граматикой вводить сообщения об ошибках(таблицу сообщений об ошибках)
это если до первой ошибки. А как ему действовать дальше?

В книге дракона упоминается синхронизирующий токен, но если я пишу условный генератор парсеров - то не ясно как его определять
источник

AT

Alexander Tchitchigi... in Compiler Development
Роман Соловьев
это если до первой ошибки. А как ему действовать дальше?

В книге дракона упоминается синхронизирующий токен, но если я пишу условный генератор парсеров - то не ясно как его определять
Добавить соответствующее правило в грамматику грамматики чтобы пользователи (авторы грамматик) сами могли указывать какие токены синхронизирующие. 🤷‍♀️
источник

RN

Ruslan Neshta in Compiler Development
Роман Соловьев
это если до первой ошибки. А как ему действовать дальше?

В книге дракона упоминается синхронизирующий токен, но если я пишу условный генератор парсеров - то не ясно как его определять
ну можно в тупую действовать дальше как будто никакой ошибки и не было(в таком случае будут другие ошибки как следствие первой)
или же искать тот самый синхронизирующий токен и после него такого накопления ошибок не будет
источник

RN

Ruslan Neshta in Compiler Development
если даже пользователь не задавал токен то можно самому его вставлять в лексическом
источник

AT

Alexander Tchitchigi... in Compiler Development
источник

AK

Andrei Kurosh in Compiler Development
Alexander Tchitchigin
А я такое от ANTLR получал в больших количествах. 😊
"Тупые" комбинаторы парсеров вообще склонны рапортовать только "нишмогла" и ничего больше... 😒
Увы, имхо генерировать понятные контекстуальные сообщения вида «выражения должны заканчиваться точкой с запятой» автоматически невозможно, только расставлять вручную
источник

РС

Роман Соловьев... in Compiler Development
это синтаксические, сначала же лексические ещё))
источник

AT

Alexander Tchitchigi... in Compiler Development
Роман Соловьев
это синтаксические, сначала же лексические ещё))
Поскольку на уровне лексического анализа нет структуры, то нет и вразумительной информации. Так что лексическая ошибка, по факту, бывает одна: прочитанная последовательность символов не является лексемой. Дальше либо падать, либо завернуть в лексему UNKNOWN и отдать н откуп парсеру.
источник

dt

d t in Compiler Development
Alexander Tchitchigin
Поскольку на уровне лексического анализа нет структуры, то нет и вразумительной информации. Так что лексическая ошибка, по факту, бывает одна: прочитанная последовательность символов не является лексемой. Дальше либо падать, либо завернуть в лексему UNKNOWN и отдать н откуп парсеру.
На этом уровне тоже есть "структура".  К примеру, строка начинается на " и заканчивается на ".  Или число начинается на необязательный знак, далее идет цифра, потом идет точка, потом цифра, потом экспонента начинающиеся на e, и так далее.
источник

AT

Alexander Tchitchigi... in Compiler Development
d t
На этом уровне тоже есть "структура".  К примеру, строка начинается на " и заканчивается на ".  Или число начинается на необязательный знак, далее идет цифра, потом идет точка, потом цифра, потом экспонента начинающиеся на e, и так далее.
No shit! Tell me more about that! 🍿😁
источник

K

Kir in Compiler Development
Руки чешутся сделать лексер, умеющий во вложенные комментарии через тот же самый LR
источник

AT

Alexander Tchitchigi... in Compiler Development
Kir
Руки чешутся сделать лексер, умеющий во вложенные комментарии через тот же самый LR
What about string templates and HEREDOC? 😁
источник

A

Alexander in Compiler Development
Alexander Tchitchigin
What about string templates and HEREDOC? 😁
<<SQL , ещё, ага
источник