Грамматика EBNF для простого анализа логов - PullRequest
0 голосов
/ 03 ноября 2019

Я пытаюсь написать простую грамматику EBNF для анализа файла журнала игры, и для этого я использую плагин Grammar-Kit. Проблема сработала не так, как я ожидал, и я не понимаю, почему. Согласно тому, что я прочитал, все должно быть в порядке, но как-то нет. Итак, вот пример грамматики:

    {
  tokens=[

  LP='('
  RP=')'
  lb='('
  rb=')'

    space='regexp:\s+'
  ]
}

root ::= root_item *
private root_item ::= !<<eof>> message  {pin=1 recoverWhile=property_recover}

message ::= '[' datetime ']' typetoken numberValue actionDirectionPart targetPart info

typetoken ::= '(' type ')'
type ::= ('notify' | 'combat')

numberValue ::= tag-color '<b>' alphabets '</b>'

actionDirection ::= ('to' | 'from')
actionDirectionPart ::= tag-color tag-font actionDirection '</font>'

targetPart ::= '<b>' tag-color targetName '</b>'
targetName ::= alphabets*

info ::= tag-font tag-color alphabets*

tag-font ::= '<font size=' number '>'
tag-color ::= '<color=' hexnumber '>'

private property_recover ::= !'['

alphabets ::= "regexp:[A-Za-z\d-]+"
hexnumber ::= "regexp:0x[0-9a-fA-F]+"
number ::= 'regexp:\d+(\.\d*)?'
datetime ::= "regexp:\d{4}\.\d{2}\.\d{2} \d{2}:\d{2}:\d{2}"

А вот пример файла журнала:

[ 2019.10.25 15:34:01 ] (combat) <color=0xff00ffff><b>2494</b> <color=0x77ffffff><font size=10>to</font> <b><color=0xffffffff>Upgraded Avenger</b><font size=10><color=0x77ffffff> - Scout Scoped Dual 1000mm Railgun - Grazes
[ 2019.10.25 15:34:02 ] (combat) <color=0xffcc0000><b>797</b> <color=0x77ffffff><font size=10>from</font> <b><color=0xffffffff>Upgraded Avenger</b><font size=10><color=0x77ffffff> - Glances Off
[ 2019.10.25 15:34:02 ] (combat) <color=0xffcc0000><b>1323</b> <color=0x77ffffff><font size=10>from</font> <b><color=0xffffffff>Upgraded Avenger</b><font size=10><color=0x77ffffff> - Penetrates
[ 2019.10.25 15:34:04 ] (combat) <color=0xffcc0000><b>52</b> <color=0x77ffffff><font size=10>from</font> <b><color=0xffffffff>Emergent Sentinel</b><font size=10><color=0x77ffffff> - Oneiric Missile - Hits
[ 2019.10.25 15:34:04 ] (combat) <color=0xffcc0000><b>52</b> <color=0x77ffffff><font size=10>from</font> <b><color=0xffffffff>Emergent Sentinel</b><font size=10><color=0x77ffffff> - Oneiric Missile - Hits
[ 2019.10.25 15:34:04 ] (combat) <color=0xffcc0000><b>52</b> <color=0x77ffffff><font size=10>from</font> <b><color=0xffffffff>Emergent Sentinel</b><font size=10><color=0x77ffffff> - Oneiric Missile - Hits
[ 2019.10.25 15:34:04 ] (combat) <color=0xffcc0000><b>52</b> <color=0x77ffffff><font size=10>from</font> <b><color=0xffffffff>Emergent Sentinel</b><font size=10><color=0x77ffffff> - Oneiric Missile - Hits

Как вы могли видеть на следующем рисунке, он как-то работает live parser preview

Итак, первый вопрос: он не распознает маркер даты и времени, но если я изменяю его в грамматике, он терпит неудачу на этом токене, почему это происходит?

И второй вопрос не проходит по цвету= параметр говорит: " AUTO15 ожидается", но мой токен шестнадцатеричного числа должен быть полностью действительным, почему он не работает?

Может быть, я пропускаю какой-то ключевой момент, но я не могу выяснить, что именнодокументация для плагина довольно общая и не содержит примеров ...

...