2016-08-26 3 views
1

Я просматривал создание языков разметки, похожих на Markdown. Мне было интересно, с чего начать с чего-то подобного. Я немного изучил создание языков, и я закончил с учебниками, говорящими о лексерах и АСТ - в конце концов, эти языки передаются на что-то вроде LLVM.Создание языка разметки, такого как markdown

Из того, что я понимаю, языки, подобные C, являются императивными языками, а языки, подобные Markdown, являются декларативными. Что именно похоже на инструментальную цепочку для чего-то, что, вероятно, не затронет ничего подобного LLVM?

Я видел другие ответы, например, как tokenize язык в Python. Однако, как я могу это сделать в C? Я хотел бы иметь что-то, что можно использовать в любом месте (например, интегрировано в собственное расширение Ruby или в проект C#).

Я не могу найти подходящее направление для этого. У кого-нибудь есть опыт/советы о том, с чего начать? В какой момент и где бы я построил «двоичный» (создание HTML из исходного кода?)

Есть ли у Markdown даже лексер? Из синтаксиса кажется, что он вполне может просто использовать регулярные выражения.

Извинения, если это слишком широкое, но я не могу найти очень много информации по этой теме (возможно, я просто смотрю в неправильных местах!)

+1

Любой хороший парсер (Markdown или нет) должен ** никогда ** использовать регулярное выражение для синтаксического анализа. Регулярное выражение для * регулярных выражений. Языки программирования/разметки по своей природе нерегулярны. – Sinkingpoint

+0

В основном для моей собственной пользы и практики. –

+3

На самом деле регулярного выражения достаточно для разбора Markdown, поскольку он в основном полагается на символы форматирования, а не на ключевые слова. Существует не так много, чтобы анализировать и анализировать, но некоторые узнаваемые символы. Большинство анализаторов Markdown используют регулярное выражение. Здесь вы можете найти объяснение о том, как это сделать: https://github.com/Khan/simple-markdown – Jaime

ответ

2

Вы правы, простые языки разметки, такие как Markdown являются декларативный. Существуют очень простые реализации, в которых не задействованы никакие лексеры и АСТ.

Первоначальная реализация Markdown, например, была простым скриптом Perl с использованием регулярных выражений. Она была написана Джон Грубер (создатель Markdown) и доступна здесь: http://daringfireball.net/projects/downloads/Markdown_1.0.1.zip

Существует также реализация C вы можете посмотреть на, называется скидкой, можно найти здесь: http://www.pell.portland.or.us/~orc/Code/discount/

Оба эти инструменты полностью открыты с открытым исходным кодом и показывают вам точно, что необходимо для обработки языка разметки. Они включают всю инструментальную цепочку, включая парсер.

+0

Я ценю ссылку на скидку. Однако это скорее конечный результат. Меня интересует * how *, чтобы добраться туда, и какие инструменты задействованы. –

+3

Языки разметки настолько просты, что других инструментов нет. Как правило, просто регулярные выражения, как вы можете видеть в коде, который я связал с ... –

Смежные вопросы