#!/usr/bin/env python3

import sys


def lattice_s3(latfile):
    mode = "empty"
    for line in latfile:

        if line.startswith("Nodes"):
            mode = "node"
            continue
        if line.startswith("Edges"):
            mode = "edge"
            continue
        if line.startswith("#") or line.startswith("End"):
            mode = "none"
            continue

        items = line.strip().split(" ")
        if mode == "node":
            if items[1] != "":
                print(items[0] + " [label = \"" + items[1] + " " + items[2] +
                      " " + items[3] + " " + items[4] + "\"];")
            else:
                print("node " + items[0] + ";")
        if mode == "edge":
            print(items[0] + " -> " + items[1] + " [label = \"" + items[2] +
                  "\"];")
    print("}")


def create_map(items):
    dct = {}
    for i in items:
        dct[i[0]] = i[2:]
    return dct


def lattice_htk_wordnode(latfile):
    mode = "empty"
    for line in latfile:
        items = line.strip().split()
        if items[0].startswith("I="):
            dct = create_map(items)
            if "W" in dct:
                print(dct["J"] + " [label = \"" + dct["W"] + "\"];")
        if items[0].startswith("J="):
            dct = create_map(items)
            if "W" in dct:
                print(dct["S"] + " -> " + dct["E"] + " [label = \"" +
                      dct["W"] + "," + dct["a"] + "," + dct["l"] + "\"];")
            else:
                print(dct["S"] + " -> " + dct["E"] + " [label = \"" +
                      dct["a"] + "," + dct["l"] + "\"];")
    print("}")


if __name__ == '__main__':
    latfilename = sys.argv[1]
    latfile = open(latfilename, "r")

    print("""
    digraph lattice {
	rankdir=LR;
    """)

    if latfilename.endswith("slf"):
        lattice_htk_wordnode(latfile)
    else:
        lattice_s3(latfile)
