from lark import Lark

notam_grammar = r"""
start: area+

area: area_intro? clause+

area_intro: "AREA" | "WI" "AREA"

clause: coord_clause
      | arc_clause
      | circle_clause
      | bearing_clause

coord_clause: COORD (sep COORD)*

arc_clause: dir? "ARC" "OF" "A" "CIRCLE"
            "RADIUS" NUMBER "NM"
            "CENTRED" "ON" COORD
            ("TO" COORD)?

circle_clause: "RADIUS" NUMBER "NM"
               "CENTRED" "ON" COORD

bearing_clause: "BEARING" NUMBER "TO" NUMBER

dir: "CLOCKWISE" | "ANTICLOCKWISE"

sep: "TO" | "THEN" | "THENCE" | "FROM"

COORD: /[0-9]{6,7}[NS]\s*[0-9]{7}[EW]/

NUMBER: /[0-9]+(\.[0-9]+)?/

%import common.WS
%ignore WS
"""
parser = Lark(notam_grammar, start="start", parser="lalr")
