Zadanie #4246
Akcja reguły dopasowania dodająca metadane na poziomie tokenu
Status: | Rozwiązany | Start date: | 23 Jul 2012 | |
---|---|---|---|---|
Priority: | Normalny | Due date: | ||
Assignee: | Paweł Orłowicz | % Done: | 100% | |
Category: | - | |||
Target version: | - |
Description
Reguły dopasowania składają się z warunków, opcjonalnych post-conditions (zatwierdzających już dopasowaną strukturę) oraz akcji.
Zadanie polega na dodaniu nowej akcji:
setprop(match, key_name, val_name)
Akcja pobiera pierwszy token z dopasowania:
int abs_pos = match_->apply(context)->first_token(as); // kod wziąłem z ops/match/actions/unmarkmatch.cpp
i dodaje tam własność/metadata o ustalonym kluczu i wartości (w razie czego nadpisuje).
Dodanie nowej akcji wymaga zrobienia dwóch rzeczy:
1. Dodania kodu implementującego akcję (zob. libwccl/ops/match/actions).
2. Dodania do gramatyki ANTLR-owej odpowiednich zapisów (grammar.g). Trzeba po pierwsze dodać nową akcję tutaj:
match_action [ParsingScope& scope] returns [boost::shared_ptr<Matching::MatchAction> m_act] : m_act = match_mark_action [scope] | m_act = match_unmark_action [scope] | m_act = match_remark_action [scope] ;
Np. linijkę m_act = match_prop_action [scope]
i potem zdefiniować tę match_prop_action poniżej. Ta nowa akcja będzie miała składnię podobną do unmark, tj. najpierw match_at = match_operator[scope], a potem dwa stringi, jeden to nazwa klucza, a drugi — nazwa wartości.
History
#1 Updated by Paweł Orłowicz about 11 years ago
- Status changed from Nowy to Rozwiązany
- % Done changed from 0 to 100