?

Log in

No account? Create an account

Еще парсерное восхитительное - Общество дровосеков Бердичева по изучению Мишны

Jul. 24th, 2012

10:56 am - Еще парсерное восхитительное

Previous Entry Share Next Entry



Представьте себе язык, в котором можно описывать некоторые иерархические структуры: скажем, записи, поля в которых могут быть, кроме примитивных типов, еще и типа "запись". Обращаться к элементам этих структур можно с помощью Си-подобного синтаксиса, например, var.f1.f2.f3.
Блок отладчика, который получает от пользователя иерархическое имя поля и разбирает его на составные элементы, не глядя в таблицу имен, не вызывает затруднений.

Представьте себе, что в этом языке, кроме привычных нам идентификаторов, есть еще и "расширенные", состоящие из любых символов, кроме пробельных. Они записываются как \идентификатор<пробел>, т.е. "\\ " - легально (а вот "\ " - нет). И в этом случае разбор иерархического имени не представляет проблем, даже несмотря на то, что символы \ и . внутри расширенных идентификаторов допускаются.

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

Отлаживать, понятное дело, нужно уметь и программы на смеси языков.

"\foo .\.\.\bar "



Та-да!

(Если кто не догадался, первый язык - Verilog, второй - VHDL).

Tags:

Comments:

[User Picture]
From:dz
Date:July 24th, 2012 07:49 pm (UTC)
(Link)
я бы уже застрелился. точнее - ввёл бы абсолютные кавычки, в которых литерально ВСЁ. :)
(Reply) (Thread)
[User Picture]
From:spamsink
Date:July 24th, 2012 08:03 pm (UTC)
(Link)
Пока это не вызвало реальных трудностей, но чует мое сердце, если/когда коса найдет на камень, то придется прибегнуть к способу Перла - вместо точки пользоваться любым символом, отсутствующим в тексте, в качестве разделителя.
(Reply) (Parent) (Thread)
[User Picture]
From:janatem
Date:July 25th, 2012 08:49 am (UTC)
(Link)
Так грамматика получается заведомо противоречивая. А зачем понадобилось такое извращение? Оба языка довольно плохи, а в смеси уж наверно совсем ужасны.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:July 25th, 2012 09:06 am (UTC)
(Link)
Такое извращение нужно потому, что разные библиотечные элементы разрабатываемых дизайнов были написаны в разное время в разных местах, и переписывать их никто не собирается.
По второму вопросу могу сказать лишь "Праститэ, других языков описания хардвэра у меня для вас нэт."
(Reply) (Parent) (Thread)
[User Picture]
From:janatem
Date:July 25th, 2012 09:52 am (UTC)
(Link)
> Праститэ, других языков описания хардвэра у меня для вас нэт.

В том и дело! Эти языки из 80-х, и новых нет. В то время как в обычном программировании с тех пор появились 100500 языков, среди которых достаточно много хороших, и можно выбрать на свой вкус. Я уже давно вынашиваю планы по созданию удобного HDL (даже заявку на ФЦП послал), но, несмотря на интерес к этой теме, что-то не накапливается критическая масса желающих.
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:July 25th, 2012 05:42 pm (UTC)
(Link)
Стабильность довольно логична, если учесть, что вокруг языков описания хардвера существует на порядки более сложная инфраструктура, чем вокруг обычных языков программирования - визуализаторы, синтезаторы, модификаторы исходного кода и т.п.

System Verilog на сегодняшний день - это на самом деле сплав Верилога с разнообразными языками для верификации. Ниша узкая, поэтому они на слуху обычно не оказываются.
(Reply) (Parent) (Thread)