Я делаю парсер для BGP-сообществ.Я решил сделать это с Antlr, но я совершенно новый.Это мой ввод:
NO_EXPORT не для NTT
NO_EXPORT установлен на CNN
NO_EXPORT предварительно, кроме CNN
NO_EXPORT не на CNN
LOCAL_PREFERENCE не для NTT
LOCAL_PREFERENCE не для CNN
Это мой код:
expression
: action*
;
action
: no_export+
| local_preference+
| as_padding+
;
no_export
: 'NO_EXPORT' sentencenevdn+
| 'NO_EXPORT' sentencenevs+
| 'NO_EXPORT' sentencenevp+
;
local_preference
: ('LOCAL_PREFERENCE' sentencelp)+
;
as_padding
: ('AS_PADDING' sentenceap)+
;
sentencenevdn
: 'do not' prepdest+
;
sentencenevs
: ('set' prepdest)+
;
sentencenevp
: ('prepend' prepdest)+
;
sentencelp
: (verbs prepdest)+
;
sentenceap
: (verbs prepdest)+
;
verbs
: ('do not'|'set'|'prepend')+
;
prepdest
: 'to' dest+
| 'except' dest+
;
dest
: DESTINATION
;
Это вывод:
Как вы можете видеть, первый и четвертый "no_export" одинаковы, за исключением "dest".Я хотел бы, чтобы они были одним и тем же ребенком, и у этого дест есть два листа: NTT и CNN
Кто-нибудь может мне помочь?Спасибо