import os import flag pub fn read_file(file string) ?[]string { if os.is_file(file) { text := os.read_lines(file) or { return error(@MOD + '.' + @STRUCT + '.' + @FN + ' Could not read "$file": "$err.msg()"') } return text } return [''] } pub fn extract_transitions(line string) ?string { mut result := ' ' first_comma := line.index(',')? second_comma := line.index_after(',', first_comma + 1) from := line[..first_comma] to := line[first_comma + 1..second_comma] condition := line[second_comma + 1..] return result + from + ' -> ' + to + ' [label=' + condition + '];' } pub fn get_transitions(line string) ?string { mut raw_text := line[line.index_any('(') + 1..line.index_any(')')] raw_text = raw_text.replace("'", '').replace(' ', '') return extract_transitions(raw_text) } pub fn main() { mut fp := flag.new_flag_parser(os.args) file := fp.string('file', `f`, '', 'input V file with transitions to generate graph from.') lines := read_file(file)? println('digraph fsm {') for line in lines { if line.contains('add_transition') { println(get_transitions(line)?) } } println('}') }