Skip to content

Commit

Permalink
fix: fixed issue with provinces and prov_no_coast
Browse files Browse the repository at this point in the history
I'm not 100% sure that this is the best solution or that it doesn't cause other errors.
@byung-o double check the changes I made both in src/daidepp/grammar.py and src/daidepp/daide_visitor.py

Closes: #24
  • Loading branch information
mjspeck committed Oct 5, 2022
1 parent 29a17d6 commit 8f4ef02
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 14 deletions.
2 changes: 1 addition & 1 deletion src/daidepp/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
from daidepp.daide_visitor import daide_visitor
from daidepp.grammar import create_daide_grammar
from daidepp.node_visitor import daide_visitor
16 changes: 8 additions & 8 deletions src/daidepp/node_visitor.py → src/daidepp/daide_visitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -418,14 +418,6 @@ def visit_power(self, node, visited_children):
return node.text

def visit_province(self, node, visited_children):
if isinstance(visited_children[0], str):
return node.text

_, province, _, coast, _ = visited_children[0]

return province + " " + coast

def visit_coast(self, node, visited_children):
return node.text

def visit_prov_coast(self, node, visited_children):
Expand All @@ -447,6 +439,14 @@ def visit_unit(self, node, visited_children):
def visit_unit_type(self, node, visited_children):
return node.text

def visit_province(self, node, visited_children):
if isinstance(visited_children[0], str):
return node.text
return visited_children[0][0].text

def visit_coast(self, node, visited_children):
return node.text

def visit_turn(self, node, visited_children):
season, _, year = visited_children
return season + " " + year.text
Expand Down
22 changes: 17 additions & 5 deletions src/daidepp/grammar.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ def _set_try_tokens(self):
self.try_tokens: List[str] = try_tokens_strings

@staticmethod
def from_level(level: DAIDE_LEVEL):
return create_daide_grammar(level)
def from_level(level: DAIDE_LEVEL, allow_just_arrangment: bool = False):
return create_daide_grammar(level, allow_just_arrangment)


DAIDE_LEVEL = Literal[10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130]
Expand Down Expand Up @@ -58,6 +58,9 @@ def from_level(level: DAIDE_LEVEL):
"try_tokens": '"PRP" / "PCE" / "ALY" / "VSS" / "DRW" / "SLO" / "NOT" / "YES" / "REJ" / "BWX" / "FCT"',
}

# prov_no_coast: all province tokens without coasts
# province: all provinces including coasts

# Order Proposals
LEVEL_20: GRAMMAR_DICT = {
"xdo": '"XDO" lpar order rpar',
Expand All @@ -77,10 +80,19 @@ def from_level(level: DAIDE_LEVEL):
"wve": 'power ws "WVE"',
"unit_type": '"AMY" / "FLT"',
"unit": "power ws unit_type ws province",
"province": "prov_coast / prov_no_coast / prov_sea / (lpar prov_coast ws coast rpar)",
"prov_no_coast": "prov_land_sea / prov_landlock / prov_sea",
"stp_ncs": 'lpar "STP" ws "SCS" rpar',
"stp_scs": 'lpar "STP" ws "SCS" rpar',
"spa_ncs": 'lpar "SPA" ws "NCS" rpar',
"spa_scs": 'lpar "SPA" ws "SCS" rpar',
"bul_ecs": 'lpar "BUL" ws "ECS" rpar',
"bul_scs": 'lpar "BUL" ws "SCS" rpar',
"prov_coast": "stp_ncs / stp_scs / spa_ncs / spa_scs / bul_ecs / bul_scs",
# "prov_coast": '"(STP NCS)" / "(STP SCS)" / "(SPA NCS)" / "(SPA SCS)" / "(BUL ECS)" / "(BUL SCS)"',
"province": "prov_land_sea / prov_landlock / prov_sea / prov_coast",
"coast": '"NCS" / "ECS" / "SCS" / "WCS"',
"prov_coast": '"ALB" / "ANK" / "APU" / "ARM" / "BEL" / "BER" / "BRE" / "BUL" / "CLY" / "CON" / "DEN" / "EDI" / "FIN" / "GAS" / "GRE" / "HOL" / "KIE" / "LON" / "LVN" / "LVP" / "MAR" / "NAF" / "NAP" / "NWY" / "PIC" / "PIE" / "POR" / "PRU" / "ROM" / "RUM" / "SEV" / "SMY" / "SPA" / "STP" / "SWE" / "SYR" / "TRI" / "TUN" / "TUS" / "VEN" / "YOR" / "WAL"',
"prov_no_coast": '"BOH" / "BUD" / "BUR" / "MOS" / "MUN" / "GAL" / "PAR" / "RUH" / "SER" / "SIL" / "TYR" / "UKR" / "VIE" / "WAR" ',
"prov_land_sea": '"ALB" / "ANK" / "APU" / "ARM" / "BEL" / "BER" / "BRE" / "BUL" / "CLY" / "CON" / "DEN" / "EDI" / "FIN" / "GAS" / "GRE" / "HOL" / "KIE" / "LON" / "LVN" / "LVP" / "MAR" / "NAF" / "NAP" / "NWY" / "PIC" / "PIE" / "POR" / "PRU" / "ROM" / "RUM" / "SEV" / "SMY" / "SPA" / "STP" / "SWE" / "SYR" / "TRI" / "TUN" / "TUS" / "VEN" / "YOR" / "WAL"',
"prov_landlock": '"BOH" / "BUD" / "BUR" / "MOS" / "MUN" / "GAL" / "PAR" / "RUH" / "SER" / "SIL" / "TYR" / "UKR" / "VIE" / "WAR" ',
"prov_sea": '"ADR" / "AEG" / "BAL" / "BAR" / "BLA" / "BOT" / "EAS" / "ENG" / "HEL" / "ION" / "IRI" / "LYO" / "MAO" / "NAO" / "NTH" / "NWG" / "SKA" / "TYS" / "WES"',
"supply_center": '"ANK" / "BEL" / "BER" / "BRE" / "BUD" / "BUL" / "CON" / "DEN" / "EDI" / "GRE" / "HOL" / "KIE" / "LON" / "LVP" / "MAR" / "MOS" / "MUN" / "NAP" / "NWY" / "PAR" / "POR" / "ROM" / "RUM" / "SER" / "SEV" / "SMY" / "SPA" / "STP" / "SWE" / "TRI" / "TUN" / "VEN" / "VIE" / "WAR"',
"arrangement": f"{TRAIL_TOKEN}mto / xdo / dmz",
Expand Down
9 changes: 9 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import pytest


@pytest.fixture(scope="session")
def sample_daide_messages():
return [
"PRP(XDO((ENG FLT EDI) SUP (ENG AMY LVP) MTO CLY))",
"PRP(XDO((ENG FLT (STP SCS)) SUP (ENG AMY LVP) MTO CLY))",
]
12 changes: 12 additions & 0 deletions tests/test_daide_visitor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from typing import List


def test_basic_visitor(sample_daide_messages: List[str]):
from daidepp.daide_visitor import daide_visitor
from daidepp.grammar import create_daide_grammar

grammar = create_daide_grammar(level=130)
for message in sample_daide_messages:
tree = grammar.parse(message)
daide_visitor.visit(tree)
assert True

0 comments on commit 8f4ef02

Please sign in to comment.