+153
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
function parse(input) {
var options = arguments.length > 1 ? arguments[1] : {},
peg$FAILED = {},
peg$startRuleFunctions = { grammar: peg$parsegrammar },
peg$startRuleFunction = peg$parsegrammar,
peg$c0 = peg$FAILED,
peg$c1 = null,
peg$c2 = [],
peg$c3 = function(initializer, rules) {
. . .
peg$c142 = { type: "other", description: "whitespace" },
peg$c143 = /^[ \t\x0B\f\xA0\uFEFF\u1680\u180E\u2000-\u200A\u202F\u205F\u3000]/,
peg$c144 = { type: "class", value: "[ \\t\\x0B\\f\\xA0\\uFEFF\\u1680\\u180E\\u2000-\\u200A\\u202F\\u205F\\u3000]", description: "[ \\t\\x0B\\f\\xA0\\uFEFF\\u1680\\u180E\\u2000-\\u200A\\u202F\\u205F\\u3000]" },
peg$currPos = 0,
peg$reportedPos = 0,
peg$cachedPos = 0,
peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },
peg$maxFailPos = 0,
peg$maxFailExpected = [],
peg$silentFails = 0,
peg$result;
. . . // + 3К строк бреда до конца функции
История моих мытарств и жалких метаний:
Меня попросило начальство радикально улучшить формат в котором приложение хранит данные. Думал я, думал, и решил, что YAML ка нельзя лучше подходит для задачи (нужно хранить описание слайдов презентации, т.е. много текста и довольно схематичная графика, все это желательно бы иметь возможность комфортно редактировать в текстовом виде, создавать заготовки и т.д.).
Шаг первый: поиск готового YAML парсера, врезультате обнаружились две штуки для АС3. Один - клон Ява парсера, в котором по класу на токен. Я не шучу. Проект заброшен 5 лет назад. Второй: заброшен 4 года назад, все в одном файле, парсится регулярками и магией, какие-то комментарии имеются, но они только свидетельствуют о несостоятельности писавшего коментарии.
Подумал: если нет нормального парсера, может есть генератор парсеров?
Шаг второй: поиск обнаружил одну попытку написать клон ANTLR, но очень ограниченную, и не работающую.
Думаю: ну бля, если все так херово, может с ж.скрипта портирую чего-нибудь простенькое, PEG как раз должен подойти.
И тут я нашел это.
Запостил: wvxvw,
21 Августа 2014
roman-kashitsyn 22.08.2014 15:02 # +1
wvxvw 22.08.2014 15:15 # 0
Я не знаю, почему в llvm было так плохо. Формат, конечно, немного сложнее XML, но не на столько, чтобы прямо невыполнимо. В Руби, пусть меня поправят, кто знает, это формат для встроенного механизма рефлексии / ОРМ, и т.п.
inkanus-gray 22.08.2014 15:20 # 0
wvxvw 22.08.2014 17:04 # +1
- повторное использование уже определенного элемента. например:
- определяемые парсером типы данных (в отличие от головной боли с XSL). Документ может сразу же содержать и определение и использование тэгов (XML тоже может одновременно в одном документе использовать DTD и содержание, но в DTD новых типов данных не объявить).
- явно указывает нужно ли читать дочерние объекты по порядку, или можно порядок игнорировать.
YAML принципиально отличаеся тем, что типы привязаны к аннотациям типов, а не к структуре документа. Т.е. в XSL нет возможности объявить универсальный тип, который будет инрерпретирован в любом месте документа, где бы он ни встретился, а в YAML так оно работает само по себе. Это помогает избегать очень сложных описаний документов, и делает их более модульными.
С более теоретической точки зрения: YAML позволяет хорошее разделение данных и метаданных (в XML положение метаданных определяется данными, и его никак не поменять). Т.е. <p>параграф</p>: параграф - содержание, <p></p> - метаданные. Их никак не переместить в другоем место (если в каждом <p> нужно описать свойства параграфа, то их прийдется повторять, либо писать специальные языки расширения, типа CSS). Не предписывает однозначную интерпретацию, а только делает ее возможной. Т.е. в XML внешний вид целиком определяет интерпретацию, а в YAML это можно оставить на совести парсера.
bormand 22.08.2014 15:49 # +2
Ну-ну. Что-то сложнее XML, походу, хрен придумаешь.
roman-kashitsyn 22.08.2014 16:17 # +1
Потому что формат в основном читался той же либой, которой генерился, потому всё работало.
Когда в дело вступают люди, всё гораздо интереснее.
Ну и плюс отказ от исключений, как и любой фанатизм, до добра редко доводит.
> удивляет такая плохая распространненость формата
Js всё ещё один из самых популярных языков на планете, а тащить парсер YAML на фронтенд ради эфемерных удобств врядли можно назвать превосходной идеей.
roman-kashitsyn 22.08.2014 16:25 # 0
guest 22.08.2014 16:43 # +3
АДОБОПРОБЛЕМЫ
wvxvw 22.08.2014 18:08 # 0
Так что приходится решать адобопроблемы.
guest 22.08.2014 18:16 # +3
А как же познания в области теории языков? Разве нет пользы от вхождения в кругозор тех же лиспов при приеме на работу?
>Но люди не верят. И их сложно в этом винить
Да судя по здешним тредам Вы можете запросто переубедить и переговорить многих.
Даже тех кто твёрдо стоял на своём.
wvxvw 22.08.2014 18:33 # 0