Boost Spirit Wdrażaj małą linię DSL w jednej aplikacji serwerowej
Przepraszam, jeśli na to pytanie udzielono wcześniej odpowiedzi.
Chcę wstawić małą DSL do aplikacji serwerowej, nad którą pracuję. Składnia jest bardzo prosta i nawet na tym wczesnym etapie jestem zakłopotany. Po prostu nie potrafię zrozumieć, jak konstruować składnię w duchu.
Oto przykład składni, którą chcę przetestować:
WHERE [not] <condition> [ and | or <condition> ] <command> [parameters]
Klauzula WHERE wybierze pewną liczbę obiektów ze sklepu wewnętrznego, testując na nich nazwane właściwości. Wektor wybranych obiektów jest następnie przekazywany jako dane wejściowe do obiektu polecenia.
Istnieją 2 możliwe testy, które chcę wykonać na każdym obiekcie:
<property> = "value"
i
<property> like <regexp>
Istnieją również 2 polecenia:
print <propertyName> [, <propertyName> [...]]
i
set <propertyName> = "value" [, <propertyName> = "value" [...] ]
przykładami składni byłyby:
where currency like "GBP|USD" set logging = 1, logfile = "myfile"
i
where not status = "ok" print ident, errorMessage
Wiem, że to wielkie pytanie, ale zastanawiam się, czy są tam eksperci duchowi, którzy potrafią znokautować tę składnię w ciągu kilku sekund. Doszedłem do parsowania LIKE i =, ale utknąłem przy próbie zmieszania tego z AND, OR i NOT. Problem polega na tym, że nie wiem, od czego zacząć, zastanawiając się, w jaki sposób duch się tym zajmie.