Инструменты для создания парсера языка разметки пользовательского интерфейса - PullRequest
0 голосов
/ 11 мая 2010

Для школьного проекта мне нужно реализовать синтаксический анализатор для языка разметки (возможно, на основе XML) для пользовательских интерфейсов. На основе входных данных генерируется HTML-документ с различными компонентами пользовательского интерфейса (текстовые области, входные данные, панели, диалоговые окна и т. Д.)

Есть ли у вас какие-либо предложения для инструментов / библиотек, которые я мог бы использовать для этого? (В школе мы используем Flex и Bison, но нам разрешено использовать современные инструменты - может быть, инструмент, обладающий возможностями как lex, так и yacc)

1 Ответ

2 голосов
/ 11 мая 2010

Если ваши входные данные являются, как предполагается, XML, а ваши выходные - HTML, то это основной вариант использования XSLT. Суть XML в том, что вам не нужно писать свой собственный синтаксический анализатор, поэтому, если это делается как работа, а не как школьный проект, который будет первым методом, который будет использоваться. Если вы не можете выразить это как преобразование, то вы можете посмотреть в другом месте.

Если вы не хотите использовать XML, то современные инструменты для текстовых языков включают грамматики выражений синтаксического анализатора и инструменты синтеза DSL, такие как Microsoft M .

PEG освобождает вас от необходимости отдельно использовать lex и синтаксический анализ, поэтому токен может быть контекстно-зависимым, не усложняя грамматику (как много токенов на многих языках), а некоторые реализации означают, что вам не нужно беспокоиться о левом / правом рекурсивные циклы.

Инструменты синтеза DSL объединяют грамматику на основе IDE с семантикой времени выполнения. Мартин Фаулер имеет книгу о DSL на своем сайте .

Но для языка определения пользовательского интерфейса, который является вводом для преобразования, первым делом будет XML или какое-либо другое стандартное отображение структуры (JSON, YAML), которое может выступать в качестве ввода в XSLT-процессор через интерфейс SAX. Я бы попробовал.

...