Skip to content

Commit

Permalink
Sequence diagram function name and arguments are implemented. #3
Browse files Browse the repository at this point in the history
  • Loading branch information
pylover committed Jun 17, 2021
1 parent f0bb51a commit 24371a4
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 24 deletions.
5 changes: 3 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
PIP = pip3
TEST_DIR = tests
PRJ = dial
PYTEST_FLAGS = -v

.PHONY: test
test:
pytest $(TEST_DIR)
pytest $(PYTEST_FLAGS) $(TEST_DIR)

.PHONY: cover
cover:
pytest --cov=$(PRJ) $(TEST_DIR)
pytest $(PYTEST_FLAGS) --cov=$(PRJ) $(TEST_DIR)

.PHONY: lint
lint:
Expand Down
3 changes: 3 additions & 0 deletions TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ alice:
```


## Tokenizer
- Semicolon

## Sequence Diagram
- call
- loop
Expand Down
28 changes: 19 additions & 9 deletions dial/tokenizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,32 @@
NAME = 1
NL = 2
AT = 3
COLON = 4
DOT = 4
COLON = 5
LPAR = 6
RPAR = 7
COMA = 8
RARROW = 9


EXACT_TOKENS = [
('@', 1, AT),
(':', 1, COLON),
('\n', 1, NL),
('@', 1, AT),
('.', 1, DOT),
(':', 1, COLON),
('(', 1, LPAR),
(')', 1, RPAR),
(',', 1, COMA),
('->', 2, RARROW),
('\n', 1, NL),
]


WHITESPACE = r'\s+'
NAME = r'\w+'
ALLTOKENS = [i[0] for i in EXACT_TOKENS] + [WHITESPACE, NAME]
WHITESPACE_RE = r'\s+'
NAME_RE = r'\w+'
ALLTOKENS_RE = \
[re.escape(i[0]) for i in EXACT_TOKENS] + [WHITESPACE_RE, NAME_RE]
ALLTOKENS_RE = re.compile('(' + '|'.join(ALLTOKENS_RE) + ')')
TOKENS_DICT = {t: n for t, _, n in EXACT_TOKENS}
ALLTOKENS_RE = re.compile('(' + '|'.join(ALLTOKENS) + ')')


Token = namedtuple('Token', 'type string start end line')

Expand Down
49 changes: 36 additions & 13 deletions tests/test_tokenizer.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
from io import StringIO

from dial.tokenizer import tokenize, EOF, AT, NAME, NL, COLON
import pytest

from dial.tokenizer import tokenize, EOF, AT, NAME, NL, COLON, DOT, LPAR, \
RPAR, COMA, RARROW


def tokenizes(string):
Expand All @@ -12,17 +15,37 @@ def test_emptyinput():
assert tokens[0] == (EOF, '', (1, 0), (1, 0), '')


def go(gen):
t = next(gen)
return t.type, t.string, t.start, t.end


def test_simple_call():
tokens = list(tokenizes(
gen = tokenizes(
'@seq foo\n'
'bar: baz'
))
assert len(tokens) == 8
assert tokens[0] == (AT, '@', (1, 0), (1, 1), '@seq foo\n')
assert tokens[1] == (NAME, 'seq', (1, 1), (1, 4), '@seq foo\n')
assert tokens[2] == (NAME, 'foo', (1, 5), (1, 8), '@seq foo\n')
assert tokens[3] == (NL, '\n', (1, 8), (1, 9), '@seq foo\n')
assert tokens[4] == (NAME, 'bar', (2, 0), (2, 3), 'bar: baz')
assert tokens[5] == (COLON, ':', (2, 3), (2, 4), 'bar: baz')
assert tokens[6] == (NAME, 'baz', (2, 5), (2, 8), 'bar: baz')
assert tokens[7] == (EOF, '', (3, 0), (3, 0), '')
'bar: baz\n'
'bar: qux.quux(corge, fred) -> waldo'
)
assert go(gen) == (AT, '@', (1, 0), (1, 1))
assert go(gen) == (NAME, 'seq', (1, 1), (1, 4))
assert go(gen) == (NAME, 'foo', (1, 5), (1, 8))
assert go(gen) == (NL, '\n', (1, 8), (1, 9))
assert go(gen) == (NAME, 'bar', (2, 0), (2, 3))
assert go(gen) == (COLON, ':', (2, 3), (2, 4))
assert go(gen) == (NAME, 'baz', (2, 5), (2, 8))
assert go(gen) == (NL, '\n', (2, 8), (2, 9))
assert go(gen) == (NAME, 'bar', (3, 0), (3, 3))
assert go(gen) == (COLON, ':', (3, 3), (3, 4))
assert go(gen) == (NAME, 'qux', (3, 5), (3, 8))
assert go(gen) == (DOT, '.', (3, 8), (3, 9))
assert go(gen) == (NAME, 'quux', (3, 9), (3, 13))
assert go(gen) == (LPAR, '(', (3, 13), (3, 14))
assert go(gen) == (NAME, 'corge', (3, 14), (3, 19))
assert go(gen) == (COMA, ',', (3, 19), (3, 20))
assert go(gen) == (NAME, 'fred', (3, 21), (3, 25))
assert go(gen) == (RPAR, ')', (3, 25), (3, 26))
assert go(gen) == (RARROW, '->', (3, 27), (3, 29))
assert go(gen) == (NAME, 'waldo', (3, 30), (3, 35))
assert go(gen) == (EOF, '', (4, 0), (4, 0))
with pytest.raises(StopIteration):
next(gen)

0 comments on commit 24371a4

Please sign in to comment.