Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: fixed issue with provinces and prov_no_coast #25

Merged
merged 2 commits into from
Oct 5, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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)
byung-o marked this conversation as resolved.
Show resolved Hide resolved


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",
byung-o marked this conversation as resolved.
Show resolved Hide resolved
"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