Skip to content

Commit b6e4c37

Browse files
committed
Support --start-symbol argument and lift common functionality into
Tools
1 parent bc8a3ca commit b6e4c37

File tree

3 files changed

+23
-12
lines changed

3 files changed

+23
-12
lines changed

kmir/src/kmir/__main__.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
from pathlib import Path
77
from typing import TYPE_CHECKING
88

9-
from pyk.kast.inner import KSort, Subst
10-
119
from kmir.build import semantics
1210
from kmir.convert_from_definition.v2parser import parse_json
1311

@@ -23,6 +21,7 @@ class KMirOpts: ...
2321
class RunOpts(KMirOpts):
2422
input_file: Path
2523
depth: int
24+
start_symbol: str
2625

2726

2827
def _kmir_run(opts: RunOpts) -> None:
@@ -35,10 +34,7 @@ def _kmir_run(opts: RunOpts) -> None:
3534

3635
kmir_kast, _ = parse_result
3736

38-
subst = Subst({'$PGM': kmir_kast})
39-
init_config = subst.apply(tools.definition.init_config(KSort('GeneratedTopCell')))
40-
init_kore = tools.krun.kast_to_kore(init_config, KSort('GeneratedTopCell'))
41-
result = tools.krun.run_pattern(init_kore, depth=opts.depth)
37+
result = tools.run_parsed(kmir_kast, opts.start_symbol, opts.depth)
4238

4339
print(tools.kprint.kore_to_pretty(result))
4440

@@ -60,6 +56,9 @@ def _arg_parser() -> ArgumentParser:
6056
run_parser = command_parser.add_parser('run', help='run stable MIR programs')
6157
run_parser.add_argument('input_file', metavar='FILE', help='MIR program to run')
6258
run_parser.add_argument('--depth', type=int, metavar='DEPTH', help='Depth to execute')
59+
run_parser.add_argument(
60+
'--start-symbol', type=str, metavar='SYMBOL', default='main', help='Symbol name to begin execution from'
61+
)
6362

6463
return parser
6564

@@ -69,7 +68,7 @@ def _parse_args(args: Sequence[str]) -> KMirOpts:
6968

7069
match ns.command:
7170
case 'run':
72-
return RunOpts(input_file=Path(ns.input_file).resolve(), depth=ns.depth)
71+
return RunOpts(input_file=Path(ns.input_file).resolve(), depth=ns.depth, start_symbol=ns.start_symbol)
7372
case _:
7473
raise AssertionError()
7574

kmir/src/kmir/tools.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,19 @@
22

33
from typing import TYPE_CHECKING
44

5+
from pyk.kast.inner import KSort, Subst
56
from pyk.kast.outer import read_kast_definition
67
from pyk.ktool.krun import KRun
8+
from pyk.prelude.string import stringToken
79

810
from .kparse import KParse
911

1012
if TYPE_CHECKING:
1113
from pathlib import Path
1214

15+
from pyk.kast import KInner
1316
from pyk.kast.outer import KDefinition
17+
from pyk.kore.syntax import Pattern
1418
from pyk.ktool.kprint import KPrint
1519

1620

@@ -42,3 +46,14 @@ def krun(self) -> KRun:
4246
@property
4347
def definition(self) -> KDefinition:
4448
return self.__definition
49+
50+
def run_parsed(self, parsed_smir: KInner, start_symbol: KInner | str = 'main', depth: int | None = None) -> Pattern:
51+
if isinstance(start_symbol, str):
52+
start_symbol = stringToken(start_symbol)
53+
54+
subst = Subst({'$PGM': parsed_smir, '$STARTSYM': start_symbol})
55+
init_config = subst.apply(self.definition.init_config(KSort('GeneratedTopCell')))
56+
init_kore = self.krun.kast_to_kore(init_config, KSort('GeneratedTopCell'))
57+
result = self.krun.run_pattern(init_kore, depth=depth)
58+
59+
return result

kmir/src/tests/integration/test_integration.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from typing import TYPE_CHECKING
66

77
import pytest
8-
from pyk.kast.inner import KApply, KSort, KToken, Subst
8+
from pyk.kast.inner import KApply, KSort, KToken
99

1010
from kmir.convert_from_definition.v2parser import Parser
1111

@@ -187,10 +187,7 @@ def test_exec_smir(
187187
assert parsed is not None
188188
kmir_kast, _ = parsed
189189

190-
subst = Subst({'$PGM': kmir_kast})
191-
init_config = subst.apply(tools.definition.init_config(KSort('GeneratedTopCell')))
192-
init_kore = tools.krun.kast_to_kore(init_config, KSort('GeneratedTopCell'))
193-
result = tools.krun.run_pattern(init_kore, depth=depth)
190+
result = tools.run_parsed(kmir_kast, depth=depth)
194191

195192
with output_kast.open('r') as f:
196193
expected = f.read().rstrip()

0 commit comments

Comments
 (0)