======ragel ====== ======epxr ====== ^ ^ ^ ^ | expr . expr | concat | | | expr %%|%% expr | nebo | | | expr & expr | intersect | | | expr - expr | diff | | | expr %%--%% expr | strong diff| | | expr* | | | | expr+ | | | | expr? | | | | expr{n,m} | | | |!expr | | | |%%^expr%% | | | ======extra ====== defacto hratky s prioritami ^guarded ^ ^ ^ | expr :> expr |main = any* :> 'FIN' |Finish-Guarded Concatenation| | expr ::> expr |comment= '/*' (any @comm)* :>> '*/' |Entry-Guarded Concatenation| | expr ::> expr |main = any* :>> 'FIN' |catch-all on the last chars of FIN| | expr <: expr |main := (' '* >start %fin ) <: (' ' $ws %%|%% [a-z] $alpha)*|Left-Guarded Concatenation| | expr ** expr | |Left-Guarded Concatenation| ======action ====== action a1 { c-code; } ======transitional ====== ^ ^ ^ |> |start | |$ |all | |% |leave | |@ |finish | main := (lower* >A $B %C ) . '\n' @N; ======in state ====== ======variable ====== host interface ^ ^ ^ ^ |int |cs |current state, lze modifikovat "zvenku"| |char * |p | data pointer | |char * |pe | data end pointer | |int |eof | end-of-file pointer | |array |data | pouze java,ruby | |int[] |stack | | |int |top | viz stack | |int |act | někdy použito [[#scanner|skenerem]] | |char * |ts | pro skener? 6.3| |char * |te | pro skener? 6.3| pomoci [[#variable]] lze p,pe,eof,cs,top,stack,ts,te,act předifovat, lze také použít [[#getkey]] a/nebo [[#access]] =====getkey *p===== způsob, jak získat dato z data pointeru, opakovaně použito! =====access fsm->===== definuje prefix, zpravidla pointer na strukturu =====prepush===== =====postpop===== kod pro manipulaci se zásobníkem, pokud je tento dynamický (top,stack) použíto během [[#fcall]] ======write====== =====write data ?nofinal|noerror|nofinal? ===== konstantní static data, do třídy, funkce i global. =====write start===== =====write first_final===== =====write error===== alternativa pro přístup ke start/first_final/error statvům =====write init ?nocs?===== zpravidla inicializace cs, top/stack, pouze jednou před startem mašiny =====write exec===== =====write exports=====