Pull to refresh
0
0
Send message
Для тех, кого расстраивает нижний регистр: его можно вообще выключить в свойствах клавиатуры. General > Accessibility> Keyboard: Show Lowercase Keys — On/Off
Как будто Modern UI, только «Made in China»
Там не соскабливают в прямом смысле слова. Технология основана на травлении в плазме, довольно простая даже для наших ученых.
ничего не поменялось, так а что должно было поменяться? если в Вашем коде срабатывает обработчик catch в методе Main, то, очевидно, парсер не будет продолжать свою работу. тем более, как мне кажется, со стороны разработчиков ANTLR было бы нелогично вставлять код вывода каких-либо сообщений на консоль из самого парсера, т.к. сгенеренный код может использоваться где угодно. почти не остается сомнений, что вывод сообщения на консоль именно в таком формате — дело рук не сгенеренного системой ANTLR кода, и тем более не блока catch в методе Main. я намекаю на то, что все-таки не было сказано о дополнительной логике вывода сообщений, а ее не может не быть в представленном проекте.
если Вам не сложно, скиньте мне пожалуйста этот проект, я потом отпишусь о результатах своего расследования :)
ANTLR версии 3.4, но я (не знаю зачем) использую CSharp3, а не 2
спасибо, я уже частично разобрался. надо переопределить метод ReportError в парсере, описав в нем логику вывода сообщения, и не пользоваться @rulecatch.
да, на C#. после написания моего комментария выше пришла в голову мысль, что в принципе в обработчике исключений как раз и пишется код, который вывел бы строку, какую потом видно будет в консоли. Потом, видимо, в том же блоке catch нужно убрать строку «throw e;», чтобы парсер попытался бы продолжить свою работу. Но мне все равно показалось, что в исключении недостаточно данных для отображения соответствующего сообщения.
спасибо за ответ, но все равно не получилось так, как в Вашем примере. что-то здесь темно все :)
после добавления в грамматику "@rulecatch" действительно стали приходить исключения, но:
1) в них не содержалось почти никакой полезной информации об ошибке
2) уж никак после обработки этих исключений парсер не смог бы подняться и продолжить свое священное дело.
я понимаю, что вопросы по большому счету глупые, и при должном упорстве можно было бы и самостоятельно разобраться, но приведенный пример так и не заработал «из коробки». заранее спасибо
спасибо за статью, возникла маленькая проблемка: не выводятся сообщения об ошибках в консоль (хотя код метода Main и хэдэра грамматики скопипастен).
т.е. ошибки есть 100% (смотрю на их количество), но эксэпшны не выходят за пределы сгенеренного класса. может, надо как-то дополнительно настроить сгенеренный парсер, или грамматику?
ну то есть да, компилятор C# теперь написан на C#, ура! просто по ходу этого дела была выделена библиотека, которая и умеет компилировать «на лету».
ага, и компилятор как сервис, и интерактивное окно, но только все-таки какова судьба сгенеренных сборок?
это все, конечно, круто, но юзание Emit() не ново с пор .NET 2.0, а сейчас еще и System.Linq.Expressions. насколько мне понятно, вся сложность остается в распарсивании кода сишарпа.

Может быть, мною многое было упущено при чтении о Roslyn, но, опять таки же насколько мне понятно, происходит компиляция в сборку, а не интерпретация. поэтому назревает очевидный вопрос: сгенеренная сборка когда выгружается из памяти? придумали ли что-то принципиально новое разработчики Roslyn?

Information

Rating
Does not participate
Location
Харьков, Харьковская обл., Украина
Date of birth
Registered
Activity