< Previous by Date Date Index Next by Date >
  Thread Index Next in Thread >

[reSIProcate-users] how to convert MsgHeaderScannerFSM to digraph?


Hi,

I dumped MsgHeaderScanner FSM, but have no idea what tool should be used to convert it to diagraph.
Any help is appreciated.


digraph MsgHeaderScannerFSM {
node[shape=record
fontsize=8
fontname="Helvetica"
]
edge [ fontsize=6 fontname="Helvetica"]
graph [ ratio=0.8
fontsize=6 compound=true ] MsgStart [ label = "0|MsgStart" ]
MsgStart -> MsgStart [label="TERM\nSentinel" ]
MsgStart -> ScanStatusLine [label="*\nStartText" ]
MsgStart -> ScanStatusLine [label="FName\nStartText" ]
MsgStart -> ScanStatusLine [label="WS\nStartText" ]
MsgStart -> ScanStatusLine [label="\":\"\nStartText" ]
MsgStart -> ScanStatusLine [label="\"\nStartText" ]
MsgStart -> ScanStatusLine [label="\"<\"\nStartText" ]
MsgStart -> ScanStatusLine [label="\">\"\nStartText" ]
MsgStart -> ScanStatusLine [label="\"\\\"\nStartText" ]
MsgStart -> ScanStatusLine [label="\",\"\nStartText" ]
MsgStart -> HalfLineBreakAtMsgStart [label="CR\nNone" ]

HalfLineBreakAtMsgStart [ label = "1|HalfLineBreakAtMsgStart" ]
HalfLineBreakAtMsgStart -> HalfLineBreakAtMsgStart [label="TERM\nSentinel" ]
HalfLineBreakAtMsgStart -> MsgStart [label="LF\nNone" ]

ScanStatusLine [ label = "2|ScanStatusLine" ]
ScanStatusLine -> ScanStatusLine [label="TERM\nSentinel" ]
ScanStatusLine -> HalfLineBreakAfterStatusLine [label="CR\nTermStatusLine" ]

HalfLineBreakAfterStatusLine [ label = "3|HalfLineBreakAfterStatusLine" ]
HalfLineBreakAfterStatusLine -> HalfLineBreakAfterStatusLine [label="TERM\nSentinel" ]
HalfLineBreakAfterStatusLine -> AfterLineBreakAfterStatusLine [label="LF\nNone" ]

AfterLineBreakAfterStatusLine [ label = "4|AfterLineBreakAfterStatusLine" ]
AfterLineBreakAfterStatusLine -> AfterLineBreakAfterStatusLine [label="TERM\nSentinel" ]
AfterLineBreakAfterStatusLine -> ScanFieldName [label="FName\nStartText" ]
AfterLineBreakAfterStatusLine -> HalfLineBreakAfterLineBreak [label="CR\nNone" ]

ScanFieldName [ label = "5|ScanFieldName" ]
ScanFieldName -> ScanFieldName [label="TERM\nSentinel" ]
ScanFieldName -> ScanWhitespaceAfter1FieldName [label="WS\nTermFieldName" ]
ScanFieldName -> ScanWhitespaceOr1Value [label="\":\"\nTermFieldName" ]

ScanWhitespaceAfter1FieldName [ label = "6|ScanWhitespaceAfter1FieldName" ]
ScanWhitespaceAfter1FieldName -> ScanWhitespaceAfter1FieldName [label="TERM\nSentinel" ]
ScanWhitespaceAfter1FieldName -> ScanWhitespaceOr1Value [label="\":\"\nNone" ]

ScanWhitespaceAfterNFieldName [ label = "7|ScanWhitespaceAfterNFieldName" ]
ScanWhitespaceAfterNFieldName -> ScanWhitespaceAfterNFieldName [label="TERM\nSentinel" ]
ScanWhitespaceAfterNFieldName -> ScanWhitespaceOrNValue [label="\":\"\nNone" ]

ScanWhitespaceOr1Value [ label = "8|ScanWhitespaceOr1Value" ]
ScanWhitespaceOr1Value -> ScanWhitespaceOr1Value [label="TERM\nSentinel" ]
ScanWhitespaceOr1Value -> Scan1Value [label="*\nStartText" ]
ScanWhitespaceOr1Value -> Scan1Value [label="FName\nStartText" ]
ScanWhitespaceOr1Value -> Scan1Value [label="\":\"\nStartText" ]
ScanWhitespaceOr1Value -> Scan1Value [label="\"\nStartText" ]
ScanWhitespaceOr1Value -> Scan1Value [label="\"<\"\nStartText" ]
ScanWhitespaceOr1Value -> Scan1Value [label="\">\"\nStartText" ]
ScanWhitespaceOr1Value -> Scan1Value [label="\"\\\"\nStartText" ]
ScanWhitespaceOr1Value -> Scan1Value [label="\",\"\nStartText" ]
ScanWhitespaceOr1Value -> HalfLineBreakInWhitespaceBefore1Value [label="CR\nNone" ]

ScanWhitespaceOrNValue [ label = "9|ScanWhitespaceOrNValue" ]
ScanWhitespaceOrNValue -> ScanWhitespaceOrNValue [label="TERM\nSentinel" ]
ScanWhitespaceOrNValue -> ScanNValue [label="*\nStartText" ]
ScanWhitespaceOrNValue -> ScanNValue [label="FName\nStartText" ]
ScanWhitespaceOrNValue -> ScanNValue [label="\":\"\nStartText" ]
ScanWhitespaceOrNValue -> ScanNValueInQuotes [label="\"\nStartText" ]
ScanWhitespaceOrNValue -> ScanNValueInAngles [label="\"<\"\nStartText" ]
ScanWhitespaceOrNValue -> ScanNValue [label="\">\"\nStartText" ]
ScanWhitespaceOrNValue -> ScanNValue [label="\"\\\"\nStartText" ]
ScanWhitespaceOrNValue -> HalfLineBreakInWhitespaceBeforeNValue [label="CR\nNone" ]

HalfLineBreakInWhitespaceBefore1Value [ label = "10|HalfLineBreakInWhitespaceBefore1Value" ]
HalfLineBreakInWhitespaceBefore1Value -> HalfLineBreakInWhitespaceBefore1Value [label="TERM\nSentinel" ]
HalfLineBreakInWhitespaceBefore1Value -> AfterLineBreakInWhitespaceBefore1Value [label="LF\nNone" ]

HalfLineBreakInWhitespaceBeforeNValue [ label = "11|HalfLineBreakInWhitespaceBeforeNValue" ]
HalfLineBreakInWhitespaceBeforeNValue -> HalfLineBreakInWhitespaceBeforeNValue [label="TERM\nSentinel" ]
HalfLineBreakInWhitespaceBeforeNValue -> AfterLineBreakInWhitespaceBeforeNValue [label="LF\nNone" ]

AfterLineBreakInWhitespaceBefore1Value [ label = "12|AfterLineBreakInWhitespaceBefore1Value" ]
AfterLineBreakInWhitespaceBefore1Value -> AfterLineBreakInWhitespaceBefore1Value [label="TERM\nSentinel" ]
AfterLineBreakInWhitespaceBefore1Value -> ScanFieldName [label="FName\nBeyondEmptyValue" ]
AfterLineBreakInWhitespaceBefore1Value -> ScanWhitespaceOr1Value [label="WS\nNone" ]
AfterLineBreakInWhitespaceBefore1Value -> HalfLineBreakAfterLineBreak [label="CR\nBeyondEmptyValue" ]

AfterLineBreakInWhitespaceBeforeNValue [ label = "13|AfterLineBreakInWhitespaceBeforeNValue" ]
AfterLineBreakInWhitespaceBeforeNValue -> AfterLineBreakInWhitespaceBeforeNValue [label="TERM\nSentinel" ]
AfterLineBreakInWhitespaceBeforeNValue -> ScanFieldName [label="FName\nBeyondEmptyValue" ]
AfterLineBreakInWhitespaceBeforeNValue -> ScanWhitespaceOrNValue [label="WS\nNone" ]
AfterLineBreakInWhitespaceBeforeNValue -> HalfLineBreakAfterLineBreak [label="CR\nBeyondEmptyValue" ]

Scan1Value [ label = "14|Scan1Value" ]
Scan1Value -> Scan1Value [label="TERM\nSentinel" ]
Scan1Value -> HalfLineBreakIn1Value [label="CR\nNone" ]

ScanNValue [ label = "15|ScanNValue" ]
ScanNValue -> ScanNValue [label="TERM\nSentinel" ]
ScanNValue -> ScanNValueInQuotes [label="\"\nNone" ]
ScanNValue -> ScanNValueInAngles [label="\"<\"\nNone" ]
ScanNValue -> ScanWhitespaceOrNValue [label="\",\"\nTermValue" ]
ScanNValue -> HalfLineBreakInNValue [label="CR\nNone" ]

HalfLineBreakIn1Value [ label = "16|HalfLineBreakIn1Value" ]
HalfLineBreakIn1Value -> HalfLineBreakIn1Value [label="TERM\nSentinel" ]
HalfLineBreakIn1Value -> AfterLineBreakIn1Value [label="LF\nNone" ]

HalfLineBreakInNValue [ label = "17|HalfLineBreakInNValue" ]
HalfLineBreakInNValue -> HalfLineBreakInNValue [label="TERM\nSentinel" ]
HalfLineBreakInNValue -> AfterLineBreakInNValue [label="LF\nNone" ]

AfterLineBreakIn1Value [ label = "18|AfterLineBreakIn1Value" ]
AfterLineBreakIn1Value -> AfterLineBreakIn1Value [label="TERM\nSentinel" ]
AfterLineBreakIn1Value -> ScanFieldName [label="FName\nTermValueAfterLineBreak" ]
AfterLineBreakIn1Value -> Scan1Value [label="WS\nNone" ]
AfterLineBreakIn1Value -> HalfLineBreakAfterLineBreak [label="CR\nTermValueAfterLineBreak" ]

AfterLineBreakInNValue [ label = "19|AfterLineBreakInNValue" ]
AfterLineBreakInNValue -> AfterLineBreakInNValue [label="TERM\nSentinel" ]
AfterLineBreakInNValue -> ScanFieldName [label="FName\nTermValueAfterLineBreak" ]
AfterLineBreakInNValue -> ScanNValue [label="WS\nNone" ]
AfterLineBreakInNValue -> HalfLineBreakAfterLineBreak [label="CR\nTermValueAfterLineBreak" ]

ScanNValueInQuotes [ label = "20|ScanNValueInQuotes" ]
ScanNValueInQuotes -> ScanNValueInQuotes [label="TERM\nSentinel" ]
ScanNValueInQuotes -> ScanNValue [label="\"\nNone" ]
ScanNValueInQuotes -> AfterEscCharInQuotesInNValue [label="\"\\\"\nNone" ]
ScanNValueInQuotes -> HalfLineBreakInQuotesInNValue [label="CR\nNone" ]

AfterEscCharInQuotesInNValue [ label = "21|AfterEscCharInQuotesInNValue" ]
AfterEscCharInQuotesInNValue -> AfterEscCharInQuotesInNValue [label="TERM\nSentinel" ]
AfterEscCharInQuotesInNValue -> ScanNValueInQuotes [label="*\nNone" ]
AfterEscCharInQuotesInNValue -> ScanNValueInQuotes [label="FName\nNone" ]
AfterEscCharInQuotesInNValue -> ScanNValueInQuotes [label="WS\nNone" ]
AfterEscCharInQuotesInNValue -> ScanNValueInQuotes [label="\":\"\nNone" ]
AfterEscCharInQuotesInNValue -> ScanNValueInQuotes [label="\"\nNone" ]
AfterEscCharInQuotesInNValue -> ScanNValueInQuotes [label="\"<\"\nNone" ]
AfterEscCharInQuotesInNValue -> ScanNValueInQuotes [label="\">\"\nNone" ]
AfterEscCharInQuotesInNValue -> ScanNValueInQuotes [label="\"\\\"\nNone" ]
AfterEscCharInQuotesInNValue -> ScanNValueInQuotes [label="\",\"\nNone" ]

HalfLineBreakInQuotesInNValue [ label = "22|HalfLineBreakInQuotesInNValue" ]
HalfLineBreakInQuotesInNValue -> HalfLineBreakInQuotesInNValue [label="TERM\nSentinel" ]
HalfLineBreakInQuotesInNValue -> AfterLineBreakInQuotesInNValue [label="LF\nNone" ]

AfterLineBreakInQuotesInNValue [ label = "23|AfterLineBreakInQuotesInNValue" ]
AfterLineBreakInQuotesInNValue -> AfterLineBreakInQuotesInNValue [label="TERM\nSentinel" ]
AfterLineBreakInQuotesInNValue -> ScanNValueInQuotes [label="WS\nNone" ]

ScanNValueInAngles [ label = "24|ScanNValueInAngles" ]
ScanNValueInAngles -> ScanNValueInAngles [label="TERM\nSentinel" ]
ScanNValueInAngles -> ScanNValue [label="\">\"\nNone" ]
ScanNValueInAngles -> HalfLineBreakInAnglesInNValue [label="CR\nNone" ]

HalfLineBreakInAnglesInNValue [ label = "25|HalfLineBreakInAnglesInNValue" ]
HalfLineBreakInAnglesInNValue -> HalfLineBreakInAnglesInNValue [label="TERM\nSentinel" ]
HalfLineBreakInAnglesInNValue -> AfterLineBreakInAnglesInNValue [label="LF\nNone" ]

AfterLineBreakInAnglesInNValue [ label = "26|AfterLineBreakInAnglesInNValue" ]
AfterLineBreakInAnglesInNValue -> AfterLineBreakInAnglesInNValue [label="TERM\nSentinel" ]
AfterLineBreakInAnglesInNValue -> ScanNValueInAngles [label="WS\nNone" ]

HalfLineBreakAfterLineBreak [ label = "27|HalfLineBreakAfterLineBreak" ]
HalfLineBreakAfterLineBreak -> HalfLineBreakAfterLineBreak [label="TERM\nSentinel" ]
HalfLineBreakAfterLineBreak -> MsgStart [label="LF\nEndHeader" ]

}


Thanks


Frank