Сообщение Про канонический алгоритм парсинга Markdown и подобного от 13.01.2025 10:26
Изменено 13.01.2025 10:27 Shmj
Про канонический алгоритм парсинга Markdown и подобного
Вроде классически для разбора таких текстов как Markdown применяют типа конечный автомат:
Но это не точно, голова сейчас не работает — могут быть ошибки тут.
Дал задание GPT — он сначала решил с помощью хитровумных регулярных выражений. Минус такого подхода — регулярки сложно поддерживать, если будут добавляться новые теги. В таком алгоритме как у меня все намного проще.
Попросил без регулярных выражений — он начал как бы заглядывать вперед, делать i+1 и т.д. Т.е. не понял как сделать проще. Когда попросил без i+1 — то он такого наворотил, раз в 5 больше кода и ошибку там найти стало не реально.
Вопрос у меня такой — где-то описан этот алгоритм парсинга? Узнаете ли вы его?
Скрытый текст | |
[java] TextSpan markdown2TextSpan(String markdownText) { final spans = <TextSpan>[]; final buffer = StringBuffer(); int asteriskCount = 0; bool isItalic = false; bool isBold = false; for (int i = 0; i < markdownText.length; i++) { final char = markdownText[i]; if ("*" == char) { if (asteriskCount < 2) { asteriskCount++; continue; } buffer.write(char); continue; } if (1 == asteriskCount) { if (buffer.isNotEmpty) { spans.add(_buildTextSpan(buffer.toString(), isItalic, isBold)); } buffer.clear(); isItalic = !isItalic; asteriskCount = 0; } else if (2 == asteriskCount) { if (buffer.isNotEmpty) { spans.add(_buildTextSpan(buffer.toString(), isItalic, isBold)); } buffer.clear(); isBold = !isBold; asteriskCount = 0; } buffer.write(char); } if (buffer.isNotEmpty) { spans.add(_buildTextSpan(buffer.toString(), isItalic, isBold)); } return TextSpan(children: spans); } [java] | |
Но это не точно, голова сейчас не работает — могут быть ошибки тут.
Дал задание GPT — он сначала решил с помощью хитровумных регулярных выражений. Минус такого подхода — регулярки сложно поддерживать, если будут добавляться новые теги. В таком алгоритме как у меня все намного проще.
Попросил без регулярных выражений — он начал как бы заглядывать вперед, делать i+1 и т.д. Т.е. не понял как сделать проще. Когда попросил без i+1 — то он такого наворотил, раз в 5 больше кода и ошибку там найти стало не реально.
Вопрос у меня такой — где-то описан этот алгоритм парсинга? Узнаете ли вы его?
Про канонический алгоритм парсинга Markdown и подобного
Вроде классически для разбора таких текстов как Markdown применяют типа конечный автомат:
Но это не точно, голова сейчас не работает — могут быть ошибки тут.
Дал задание GPT — он сначала решил с помощью хитровумных регулярных выражений. Минус такого подхода — регулярки сложно поддерживать, если будут добавляться новые теги. В таком алгоритме как у меня все намного проще.
Попросил без регулярных выражений — он начал как бы заглядывать вперед, делать i+1 и т.д. Т.е. не понял как сделать проще. Когда попросил без i+1 — то он такого наворотил, раз в 5 больше кода и ошибку там найти стало не реально.
Вопрос у меня такой — где-то описан этот алгоритм парсинга? Узнаете ли вы его?
Скрытый текст | |
| |
Но это не точно, голова сейчас не работает — могут быть ошибки тут.
Дал задание GPT — он сначала решил с помощью хитровумных регулярных выражений. Минус такого подхода — регулярки сложно поддерживать, если будут добавляться новые теги. В таком алгоритме как у меня все намного проще.
Попросил без регулярных выражений — он начал как бы заглядывать вперед, делать i+1 и т.д. Т.е. не понял как сделать проще. Когда попросил без i+1 — то он такого наворотил, раз в 5 больше кода и ошибку там найти стало не реально.
Вопрос у меня такой — где-то описан этот алгоритм парсинга? Узнаете ли вы его?