Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- HEADER = TABLE()
- TRANS = TABLE()
- DATA('TRANSITION(EVENT,NEWSTATE,ACTIONS,LINK)')
- DATA('LIST(VALUE,NEXT)')
- * WORD & WHITESPACE PATTERNS
- LETTERS = &LCASE &UCASE
- WORD = SPAN(LETTERS)
- WS = SPAN(' ')
- * HEADER PARSER
- NEXTHDR LINE = INPUT
- OUTPUT = LINE
- LINE (ARB . KEY) ':' WS (WORD . VALUE) :S(ADDHDR)
- LINE POS(0) '{' :S(PTRANS) F(NEXTHDR)
- ADDHDR HEADER<KEY> = VALUE
- OUTPUT = KEY '=' VALUE :(NEXTHDR)
- * TRANSITION PARSER
- PTRANS POLDST = WORD . OLDST
- PEVENT = WORD . EVENT
- PNEWST = WORD . NEWST
- PACTIONS = REM . ACTIONS
- N = 0
- NEXTTRAN LINE = INPUT
- OUTPUT = LINE
- LINE POLDST WS PEVENT WS PNEWST WS PACTIONS :S(ADDTRAN)
- LINE POS(0) '}' :S(PARSED) F(NEXTTRAN)
- ADDTRAN OUTPUT = OLDST '-' EVENT '-' NEWST '-' ACTIONS
- N = N + 1
- ACTIONS POS(0) WORD . ACT1 :S(TOACT1)
- ACTIONS '{' ARB . ACTS '}' :S(TOACTS)
- STTRAN TRANS<OLDST> = TRANSITION(EVENT,NEWST,ACTIONS,TRANS<OLDST>)
- OUTPUT = ACTIONS(TRANS<OLDST>) :(NEXTTRAN)
- * SINGLE ACTION PARSER
- TOACT1 ACTIONS = LIST(ACT1)
- OUTPUT = ACT1 :(STTRAN)
- * MANY ACTION PARSER
- TOACTS ACTIONS = LIST()
- CURRENT = ACTIONS
- NEXTACT ACTS (WORD . ACT) = :F(STTRAN)
- VALUE(CURRENT) = ACT
- LAST :S(FIRSTACT)
- NEXT(LAST) = CURRENT
- FIRSTACT LAST = CURRENT
- CURRENT = LIST()
- ACTS WS = :(NEXTACT)
- PARSED OUTPUT = 'PARSED ' N
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement