У меня есть эта гигантская веревка Мод. Это небольшой кусочек его:Как я могу написать парсер?
NamedElements
(
(
NamedElement
(
SpecTable
(
SpecColumns
(
(
SpecColumn
(
Name
(
"Id"
)
,
TypeVarChar
(
18
)
)
,
SpecColumn
(
name
(
"IsDeleted"
)
,
DataTypeBit
)
... ...
Существует только одна вещь, которую называют NamedElements. В нем много объектов NamedElement. Формат прост для понимания. Мне нужно написать синтаксический анализатор для этого, чтобы я мог сделать что-то вроде получения всех объектов SpecColumn, у которых есть Имя, которое равно чему-то. Я не уверен, что это лучший способ сделать это.
Некоторых вещей я думал о:...
Цикла по каждому символу, пока я не найти «(» Я делаю новый объект добавить этот объект в качестве свойства на выше этом объекте я продолжаю идти пока не найду совпадение ')'. Затем это завершает то, что находится в этом объекте.
В принципе, я никогда не делал ничего подобного раньше, и задавался вопросом, существует ли какой-то определенный способ сделать это, или мне нужно будет сделать что-то вроде того, что я описал выше?
https://en.wikipedia.org/wiki/Recursive_descent_parsing –
К сожалению, этот вопрос не вписывается сферы переполнению стека, но вот несколько советов: 1. Google «метод рекурсивного спуска ", это самый простой метод синтаксического анализа, и вы найдете довольно много примеров реализации. 2. Посмотрите на [чрезмерно простой парсер JSON] (https://github.com/H2CO3/libjsonz/tree/master/src/jsonz.c), который я написал. –
Есть несколько отличных библиотек, доступных для такого рода вещей, где вы указываете грамматику. Идея языка была бы полезна для того, чтобы дать больше указаний, но усиление духа будет моей рекомендацией для C++. Это также удивительно быстро. – OllieB