рдпрджрд┐ рдЖрдкрдХреА рд╢рд┐рдХреНрд╖рд╛ рджреВрд╕рд░реА рдХрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИ, рдпрджрд┐ рд╢рдмреНрджрд╛рд╡рд▓реА рд╕реАрдорд┐рдд рд╣реИ, рдФрд░ рднрд╛рд╖рдг рдзреАрдорд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдмрд╕ рдмреЗрд╡рдХреВрдл рд╣реИрдВ, рддреЛ рдЖрдк рдЗрди рдЕрд╕реНрдкрд╖реНрдЯ рд▓реИрдЯрд┐рди рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЕрднреА рднреА рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдмрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реА рдорд╡реЗрд╢реА рднрд╛рд╖рд╛ рдпреЛрдмрд╛ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧреАред рдпреЛрдмрд╛ рдЕрд╕рд▓реА рд▓рдбрд╝рдХреЛрдВ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рд╣реИ!
рд▓реЗрдХрд┐рди рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдПрдХ рджрд┐рди рдХрд╛рдо рдкрд░, рдХрд┐рд╕реА рдиреЗ рдордЬрд╛рдХ рдореЗрдВ рдПрдХ рдЧреЛрдк рднрд╛рд╖рд╛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рдХреЛрдИ рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рддрд░рд╣ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХреЗред рд╢рдмреНрдж "рдЪреЛ" рдФрд░ рдЙрд╕ рд╕рдм рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░реЗрдВред рдпрд╣рд╛рдВ рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐, рдЕрдкрдиреЗ рдЬреАрд╡рди рдкрде рдкрд░ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╢рд┐рдХреНрд╖рд╛ рдирд╣реАрдВ рдорд┐рд▓реА, рдореИрдВрдиреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдмрд┐рд▓реНрдбрд┐рдВрдЧ, рдФрдкрдЪрд╛рд░рд┐рдХ рд╡реНрдпрд╛рдХрд░рдг рдФрд░ рдЕрдиреНрдп рдЙрдкрд╣рд╛рд░реЛрдВ рдореЗрдВ рдЙрди рд╕рднреА рджрд┐рд▓рдЪрд╕реНрдк рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдЫрд╛рддреНрд░ рджреВрд╕рд░реЗ рдпрд╛ рддреАрд╕рд░реЗ рд╡рд░реНрд╖ рдореЗрдВ рдЦрд╛рддреЗ рд╣реИрдВред рд╕рдВрдХрд▓рдХ рдирд┐рд░реНрдорд╛рдг рдкрд░ рд╡рд┐рд░реНрде рдХреА рдкреБрд╕реНрддрдХ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдиреЗ рдореБрдЭреЗ рдмреАрдПрдирдПрдл рдЬреИрд╕реЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрддреБрд░ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЬреНрдЮрд╛рди рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд▓рд╛рдн рдирд╣реАрдВ рд╣реБрдЖ - рдореИрдВрдиреЗ рдПрдХ рднреА рд╕рдВрдХрд▓рдХ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдХрд╛рд░реНрдп рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рд░реЛрдЪрдХ рдерд╛ред
рдпрджрд┐ рдЖрдк 18 рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рдЙрдореНрд░ рдХреЗ рд╣реИрдВ, рддреЛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реА рдореВрд▓ рднрд╛рд╖рд╛ рдХреА рдЕрд╢реНрд▓реАрд▓ рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░реЗрдВред
рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рднреА рд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рд╕реЗ, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдХреБрдЫ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ lex, flex, yacc, bison рдФрд░ antlr рд╣реИрдВ, рдЬреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ C / C ++ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ, рдпрд╣ рдУрд╕рдорд▓реИрд▓реЗрдХреНрд╕ рдФрд░ рдУрдХреНрдорд▓реИрдХреИрдХ рд╣реИ - рдЬреЛ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдУрдХрд╛рдорд▓рд╛ рдкрд░ред рдФрд░ рддреАрд╕рд░рд╛, рдпрд╣ fslexx рдФрд░ fsyacc рд╣реИ - рдПрдХ рд╣реА рдЪреАрдЬрд╝, рдХреЗрд╡рд▓ F # рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдХрд┐ ocaml рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдереЛрдбрд╝реА рдХрдо рдирдХрд▓ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдмрдиреНрд╕ рдХреА рдмрдЬрд╛рдп рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЙрдЧ рдЖрддреА рд╣реИред рдПрдл # рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЕрдиреБрдкрд╕реНрдерд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛, рдФрд░ рд╕рднреА рдкреНрд▓рд╕рд╕ - рдЙрдирдХреА рдмрд╣реБрддрд╛рдпрдд рдХреЗ рдХрд╛рд░рдгред рд╣рд╛рдВ, рдХрднреА-рдХрднреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдкрд╕рдВрдж рднреА рдЦрд░рд╛рдм рд╣реЛрддреА рд╣реИ, рдореБрдЭреЗ рдЗрди рд╕рднреА рд▓реЗрдХрд░реНрд╕ рдФрд░ рдкрд╛рд░реНрд╕рд░реНрд╕ рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдХрд╛ рдбрд░ рдерд╛ред
рд╡реИрд╕реЗ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЕрдЬреАрдм рдФрд░ рдЕрдкреНрд░рд┐рдп рдЦреЛрдЬ рдереА, рдЬреЛ рдпрд╣ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рдпрд╣ рдкреНрд░рддреАрдд рд╣реБрдЖ рдХрд┐ рдПрдХ рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЕрдлрд╕реЛрд╕ред
рднрд╛рд╖рд╛ рдХреЗ рдкреНрд░рдХрд╛рд░
рдореИрдВ рдЭреВрда рдирд╣реАрдВ рдмреЛрд▓рддрд╛, рдореИрдВрдиреЗ рддреБрд░рдВрдд рднрд╛рд╖рд╛ рдХреА рдкреВрд░реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдзреАрд░реЗ-рдзреАрд░реЗ рдЦрддреНрдо рдХрд░ рд░рд╣рд╛ рдерд╛ред рд▓реЗрдХрд┐рди рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдЙрд╕ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдореБрдЭреЗ рдЫрд╣ рд╕реБрдВрджрд░ рд░рд╡рд┐рд╡рд╛рд░ рд╕реБрдмрд╣ рдШрдВрдЯреЛрдВ рддрдХ рд▓реЗ рдЧрдпрд╛), рд╣рдо рдпрд╣ рджрд┐рдЦрд╛рд╡рд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рдпреЛрдЬрдирд╛рдмрджреНрдз рдерд╛ред рд╣рдорд╛рд░реА рднрд╛рд╖рд╛ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджреЗрд╢ рдПрдХ рд╡рд╕реНрддреБ рд╣реИред C ++ рдореЗрдВ, рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╛ рдПрдХ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╕рдВрдШ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдУрдХрд╛рдорд▓ рд╣рдореЗрдВ рд╣рд░ рдЪреАрдЬ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдорд╛рд░реА рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓, yobaType.ml, рдЬреЛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ, рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
type action =
DoNothing
| AddFunction of string * action list
| CallFunction of string
| Stats
| Create of string
| Conditional of int * string * action * action
| Decrement of int * string
| Increment of int * string;;
рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред DoNothing рд╕рд┐рд░реНрдл рдПрдХ рдПрдирдУрдкреА рдмрдпрд╛рди рд╣реИ, рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреНрд░рд┐рдПрдЯ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рддрд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╡реЗ рд╣рдореЗрд╢рд╛ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реЛрддреЗ рд╣реИрдВ), рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдорд╢рдГ рджрд┐рдП рдЧрдП рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдШрдЯрд╛рддреЗ рдФрд░ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рдмрдирд╛рдП рдЧрдП рдЪрд░ рдФрд░ рд╕рд╢рд░реНрдд рдХреЗ рд▓рд┐рдП рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдБрдХрдбрд╝реЗ рд╣реИрдВ - рд╣рдорд╛рд░рд╛ рдпрджрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдЪрд░ рдореЗрдВ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдорд╛рди (рдпрд╛ рдПрдХ рдмрдбрд╝рд╛) рд╣реИ рдпрд╛ рдирд╣реАрдВред рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ AddFunction рдФрд░ CallFunction рдЬреЛрдбрд╝рд╛ - рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВред
рднрд╛рд╖рд╛ рдХрд╛ рд╡реНрдпрд╛рдХрд░рдг
рдЕрдЧрд▓рд╛ рдХрджрдо рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реИ, рд╣рдорд╛рд░реА рднрд╛рд╖рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдЬреЛ рдПрдХ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдВрдЧреЗред
рдХреЛрдб рджрд┐рдЦрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реА рднрд╛рд╖рд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдХрд┐рд╕реА рднреА рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдХреНрд╡реЗрд░реА рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП (рдпрд╣ рдПрдХ рд╕реЗрд╡рд╛ рджрд▓ рдХреА рддрд░рд╣ рд╣реИ) рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдирд╛ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдФрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЗрди рдмреНрд░реЗрдХ рдФрд░ рдЗрдВрдбреЗрдВрдЯ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ (рд╣рдо рд░реВрд╕реА рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ), рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдПрдХ рдЪрд░ рдФрд░ рдореВрд▓реНрдп рджреЛрдиреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдк рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рддреЛ, рд╣рдорд╛рд░реА yobaParser.mly рдлрд╝рд╛рдЗрд▓:
%{
open YobaType
%}
%token <string> ID
%token <int> INT
%token RULEZ
%token GIVE TAKE
%token WASSUP DAMN
%token CONTAINS THEN ELSE
%token FUCKOFF
%token STATS
%token MEMORIZE IS
%token CALL
%start main
%type <YobaType.action> main
%%
main:
expr { $1 }
expr:
fullcommand { $1 }
| MEMORIZE ID IS fullcommandlist DAMN { AddFunction($2, $4) }
fullcommandlist:
fullcommand { $1 :: [] }
| fullcommand fullcommandlist { $1 :: $2 }
fullcommand:
WASSUP command DAMN { $2 }
| STATS { Stats }
command:
FUCKOFF { DoNothing }
| GIVE ID INT { Increment($3, $2) }
| GIVE INT ID { Increment($2, $3) }
| TAKE ID INT { Decrement($3, $2) }
| TAKE INT ID { Decrement($2, $3) }
| RULEZ ID { Create($2) }
| CALL ID { CallFunction($2) }
| CONTAINS ID INT THEN command ELSE command { Conditional($3, $2, $5, $7) }
| CONTAINS INT ID THEN command ELSE command { Conditional($2, $3, $5, $7) }
%%
рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рд╣реИ рд╣реЗрдбрд┐рдВрдЧ - рдпреЛрдмрдЯрд╛рдЗрдк рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЦреЛрд▓рдирд╛, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░рд╛ рдПрдХреНрд╢рди рдЯрд╛рдЗрдк рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред рд╕рдВрдЦреНрдпрд╛ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬреЛ рднрд╛рд╖рд╛ (рдЪрд░) рдХреЗ рдХреАрд╡рд░реНрдб рдирд╣реАрдВ рд╣реИрдВ, рд╣рдо рджреЛ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рдХреНрдпрд╛ рд╣реИрдВред % рдЯреЛрдХрди рдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреАрд╡рд░реНрдб рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреНрд░рдХрд╛рд░ рднреА рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╡реНрдпрд╛рдХрд░рдг рдореЗрдВ рдЗрд╕ рд╢рдмреНрдж рдХреА рдкрд╣рдЪрд╛рди рдХрд░реЗрдЧрд╛ред рдХреЛрдИ рднреА рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЙрди рд╕рднреА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдмрд╕ рдРрд╕реЗ рд░рд┐рдХреЙрд░реНрдб рд╕рдореВрд╣ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдм рдХреБрдЫред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╕рднреА рдЯреЛрдХрди рдареАрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИрдВ рдЬрд┐рдирдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдХрд░рдг рдкрд╛рд░реНрд╕рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреБрдЫ рднреА рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╡реЗ рд╕реНрд╡рдпрдВ рднрд╛рд╖рд╛ рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рд╣рдо рдмрд╛рдж рдореЗрдВ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдореБрдЦреНрдп рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐ рдЯрд╛рдЗрдк рдПрдХреНрд╢рди рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣рдореЗрд╢рд╛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢ред рдЕрдВрдд рдореЗрдВ, рджреЛ %% рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдо рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рд╕реНрд╡рдпрдВ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
- рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб (рдлреБрд▓рдХрдореИрдВрдб) рдпрд╛ рдПрдХ рдлрдВрдХреНрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИред
- рдлрд╝рдВрдХреНрд╢рди, рдмрджрд▓реЗ рдореЗрдВ, рдХрдорд╛рдВрдб (рдлреБрд▓рдХреИрдВрдбрд▓рд┐рд╕реНрдЯ) рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрддреА рд╣реИред
- рдПрдХ рдХрдорд╛рдВрдб рдпрд╛ рддреЛ рд╕реЗрд╡рд╛ (STATS) рдпрд╛ рдирд┐рдпрдорд┐рдд (рдХрдорд╛рдВрдб) рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрд╕реЗ рдХреАрд╡рд░реНрдб рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреАрдо рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рдореИрдВрдиреЗ рдкреЗрдВрдЯ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рдШреБрдВрдШрд░рд╛рд▓реЗ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╣рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЬрдм рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ $ N рдирд┐рд░реНрдорд╛рдг рдХреЗ Nth рд╕рджрд╕реНрдп рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо "CALL ID" рд╕реЗ рдорд┐рд▓рддреЗ рд╣реИрдВ (ID рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рддреЛ рдордд рднреВрд▓реЛ), рддреЛ рд╣рдо рдПрдХ CallFunction рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ $ 2 (рдмрд╕ ID) - рдлрдВрдХреНрд╢рди рдХреЗ рдирд╛рдо рдХрд╣рддреЗ рд╣реИрдВред
Lexer - рднрд╛рд╖рд╛ рдХреЛ рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдореЗрдВ рдмрджрд▓рдирд╛
рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд▓рдЧрднрдЧ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдмрд╕реЗ рд╕реБрдирд╕рд╛рди рднрд╛рдЧ рдкрд░ рдкрд╣реБрдБрдЪреЗред рдпрд╣ рд╕рд░рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рднрд╛рд╖рд╛ рдХреЗ рд╢рдмреНрджреЛрдВ рдХреЗ рд╣рдорд╛рд░реЗ рдЯреЛрдХрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╕реБрдирд╕рд╛рди, рдХреНрдпреЛрдВрдХрд┐ рд▓реЗрдХреНрд╕рд░реНрд╕ (рдпрд╛ рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдУрдХрд╛рдорд▓реЛрд╡реНрд╕реНрдХреА рд▓реЗрдХреНрд╕рд░) рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рд░реВрд╕реА рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдХреЗрд╡рд▓ рддрд╛рд░ рдХреЗ рд╕рд╛рде рд░реВрд╕реА рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ рдореИрдВ рднрд╛рд╖рд╛ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рдиреЗ рдмрд╡рд╛рд╕реАрд░ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ - рдХреЗрд╡рд▓ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП "рджреЗ", рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдХреНрд╖рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрддрдиреА рд╡рд┐рдХрд▓реНрдк рдЪреБрдирдирд╛ рдерд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЕрдкрдиреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ, yobLexer.mll рдлрд╝рд╛рдЗрд▓:
- {
- YOBParser рдЦреЛрд▓реЗрдВ
- рдЕрдкрд╡рд╛рдж eof
- }
- рд╢рд╛рд╕рди рдЯреЛрдХрди = рдкрд╛рд░реНрд╕
- ( "рдФрд░" | "рдФрд░" ) ( "рдбреА" | "рдбреА" ) ( "рдФрд░" | "рдФрд░" ) ( ' ' ) +
- ( "n" | "H" ) ( "a" | "A" ) ( "x" | "X" ) ( "y" | "Y" | "Y" ) ( "y" | "Y" ) { FUCKOFF }
- | ( "рдмреА" | "рдмреА" ) ( "рдП" | "рдП" ) ( "рдПрд▓" | "рдПрд▓" ) ( "рдП" | "рдП" )
- ( "рдПрди" | "рдПрдЪ" ) ( "рд╕реА" | "рд╕реА" ) ( ' ' ) +
- ( "n" | "H" ) ( "a" | "A" ) ( "x" | "X" ) { STATD }
- | [ ' ' ' \ t ' ' \ n тАЩ \ r ' ] { рдЯреЛрдХрди рд▓реЗрдХреНрд╕рдмреБрдлрд╝ }
- | [ ' 0 ' - ' 9 ' ] + { INT ( int_of_string ( рд▓реЗрдХреНрд╕рд┐рдВрдЧ ред рд▓реЗрдХреНрд╕рдореЗ рд▓реЗрдХреНрд╕рдмреЛрд░реНрди ) ) }
- | ( "d" | "D" ) ( "a" | "A" ) ( "y" | "Y" ) { GIVE }
- | ( "n" | "H" ) ( "a" | "A" ) { TAKE }
- | ( "рдПрдЪ" | "рдПрдЪ" ) ( "рдУ" | "рдУ" ) { WASSUP }
- | ( "рде" " | " рде " ) ( " рдУ " | " рдУ " ) ( " рдмреА " | " рдмреА " ) ( " рдП " | " рдП " ) { DAMN }
- | ( "l" | "l" ) ( "y" | "y" ) ( "b" | "b" ) ( "l" ) ( "l" | " l " ) ( "y" | " y " ) { RULEZ }
- | ( "e" | "E" ) ( "c" | "C" ) ( "t" | "T" ) ( "b" | "b" | "b" ) { CONTAINS }
- | ( "t" | "T" ) ( "a" | "A" ) ( "d" | "D" ) ( "a" | "A" ) { THEN }
- | ( "рдФрд░" | "рдФрд░" ) ( "рдПрд▓" | "рдПрд▓" ) ( "рдФрд░" | "рдФрд░" ) { ELSE }
- | ( "y" | "Y" ) ( "c" | "C" ) ( "e" | "E" ) ( "k" | " k" | "K" ) ( "рдФрд░" | "рдФрд░" ) { MEMORIZE }
- | ( "рдИ" | "рдИ" ) ( "рдЯреА" | "рдЯреА" ) ( "рдУ" | "рдУ" ) { рдЖрдИрдПрд╕ }
- | ( "x" | "X" ) ( "y" | "Y" ) ( "y" | "Y" ) "Y" ) ( "n" | "H" ) ( "рдФрд░" | "рдФрд░" ) { CALL }
- |
- ( "a" | "b" | "c" | "g" | "d" | "e" | "e" | " e ")
- | "z" | "рдФрд░" | "рдз" | "рд╕реЗ" | "рд▓" | "рдо" | "рдПрди" | 'рдУ'
- | "рдкреА" | "рдкреА" | "s" | "рдЯреА" | "рдпреВ" | "рдЪ" | x | "Ts"
- | "рдЬ" | "w" | "рдпреВ" | "рдмреА" | "s" | "рдмреА" | "рдИ" | "рдпреВ" | "I" ) + { ID ( рд▓реЗрдХреНрд╕рд┐рдВрдЧ ред рд▓реЗрдХреНрд╕реЗрдо рд▓реЗрдХреНрд╕рдмреБрдл ) }
- | eof { Eof рдмрдврд╝рд╛рдПрдБ }
рдореИрдВ рдмрд╕ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреЛрдб рдмрдЪреНрдЪреЛрдВ рдФрд░ рдирд╛рдЬреБрдХ рдорд╛рдирд╕рд┐рдХ рд╕рдВрдЧрдарди рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдЕрд╢реНрд▓реАрд▓ рднрд╛рд╖рд╛ рдХреА рд╢рдмреНрджрд╛рд╡рд▓реА рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдкрд╛рд░реНрд╕рд░ рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ (STATS, GIVE, TAKE, рдЖрджрд┐) рдФрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдмрдирд╛рдПрдВ рдЬреЛ рдЗрдирдкреБрдЯ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред 11 рд╡реАрдВ рдкрдВрдХреНрддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдФрд░ рдЕрдиреНрдп рдХрдЪрд░реЗ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдмрдХрд┐ рдпрд╣ рдЙрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рдж рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╣реЛрддреЗ рд╣реИрдВред 12 рд╡реАрдВ рдФрд░ 25-28рд╡реАрдВ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЪрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдирд╛рдореЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреА рд╣реИрдВ, рдФрд░ 29 рд╡рд╛рдВ рдмрд╣реБрдд рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
рджреБрднрд╛рд╖рд┐рдпрд╛
рдЖрдЦрд┐рд░реА рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛ рд╣реБрдЖ рд╣реИ - рджреБрднрд╛рд╖рд┐рдпрд╛ рд╣реА, рдЬреЛ рд╣рдорд╛рд░реА рднрд╛рд╖рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдХреЛрдб, рдлрд┐рд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:
- YOBType рдЦреЛрд▓реЗрдВ
- рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░реНрд╕ = рд╣реИрд╢рдЯреИрдм ред 10 рдмрдирд╛рдПрдВ ;;
- рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ = рд╣рд╢реНрдЯрдмрд▓ ред 10 рдмрдирд╛рдПрдВ ;;
- let рдкреНрд░рд┐рдВрдЯ_рд╕реНрдЯреЗрдЯреНрд╕ ( ) =
- let рдкреНрд░рд┐рдВрдЯ_рдЗрдЯреЗрдо рдЖрдИрдбреА рд░рд╛рд╢рд┐ =
- рдЫрд╛рдкрд╛ ред рдкреНрд░рд┐рдВрдЯрдл ">> рдпреЛ! рдЖрдкрдХреЗ рдкрд╛рд╕% s:% d" рдЖрдИрдбреА рд░рд╛рд╢рд┐ рд╣реИ ;
- Print_newline ( ) ;
- рдореЗрдВ рдмрд╣рдирд╛
- рд╣рд╢рдмреНрдмрд▓ ред iter Print_item рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ ;;
- рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ arithm рдЖрдИрдбреА op рдорд╛рди ( ) =
- рдХреЛрд╢рд┐рд╢
- рд╣рд╢рдмреНрдмрд▓ ред рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ рдЖрдИрдбреА ( op ( рд╣реИрд╢рдЯреИрдм ред рдЖрдЗрдбреЗрдВрдЯреАрдЬрд╝рд░реНрд╕ рдЖрдИрдбреА ) рдорд╛рди ) рдмрджрд▓реЗрдВ ;
- рдЫрд╛рдкрд╛ ред рдкреНрд░рд┐рдВрдЯрдл ">> рд╢рд┐рдЯ рдкреНрд░рд╢реНрди \ n" ; рдлреНрд▓рд╢ рд╕реНрдЯрдбрдЖрдЙрдЯ
- Not_found рдХреЗ рд╕рд╛рде -> Printf Printf ">> X @ # рдкрд░, рдЖрдкрдХреЛ% s рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ \ n" рдЖрдИрдбреА ; рдлреНрд▓рд╢ рд╕реНрдЯрдбрдЖрдЙрдЯ ;;
- рдЖрдЗрдП rec cond id id act1 act2 ( ) =
- рдХреЛрд╢рд┐рд╢
- рдЕрдЧрд░ рд╣реИрд╢рдЯреИрдм ред рдЖрдЗрдбреЗрдВрдЯреАрдлрд╛рдпрд░реНрд╕ рдЖрдИрдбреА > = рд░рд╛рд╢рд┐ рдлрд┐рд░ рдкреНрд░реЛрд╕реЗрд╕_рдПрдХреНрд╢рди рдПрдХреНрдЯ 1 ( ) рдФрд░ рдкреНрд░реЛрд╕реЗрд╕_рдПрдХреНрд╢рди рдПрдХреНрдЯ 2 ( )
- Not_found рдХреЗ рд╕рд╛рде ->
- рдЫрд╛рдкрд╛ ред Printf ">> рдпрд╣ рдХреНрдпрд╛ рд╣реИ? \ n" ;
- рдлреНрд▓рд╢ рд╕реНрдЯрдбрдЖрдЙрдЯ
- рдФрд░ process_action = рдлрд╝рдВрдХреНрд╢рди
- | рдмрдирд╛рдПрдБ ( рдЖрдИрдбреА ) -> ( рдлрд╝рдВрдХреНрд╢рди ( ) -> рд╣реИрд╢рдЯреИрдм ред рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЖрдИрдбреА рдЬреЛрдбрд╝реЗрдВ 0 )
- | рд╡рд┐рдХреГрддреАрдХрд░рдг ( рд░рд╛рд╢рд┐, рдЖрдИрдбреА ) -> рдЕрдВрдХрдЧрдгрд┐рдд рдЖрдИрдбреА ( - ) рд░рд╛рд╢рд┐
- | рд╡реГрджреНрдзрд┐ ( рд░рд╛рд╢рд┐, рдЖрдИрдбреА ) -> рдЕрдВрдХрдЧрдгрд┐рдд рдЖрдИрдбреА ( + ) рд░рд╛рд╢рд┐
- | рд╕рд╢рд░реНрдд ( рд░рд╛рд╢рд┐, рдЖрдИрдбреА, рдЕрдзрд┐рдирд┐рдпрдо 1, рдЕрдзрд┐рдирд┐рдпрдо 2 ) -> рдХрдВрдбреЛрдо рд░рд╛рд╢рд┐ рдЖрдИрдбреА рдЕрдзрд┐рдирд┐рдпрдо 1 рдЕрдзрд┐рдирд┐рдпрдо 2
- | DoNothing -> ( рдлрд╝рдВрдХреНрд╢рди ( ) -> ( ) )
- | рдЖрдБрдХрдбрд╝реЗ -> Print_stats
- | AddFunction ( id, funclist ) -> ( рдлрдВрдХреНрд╢рди ( ) -> Hashtbl ред рдлрдВрдХ рдЖрдИрдбреА id funclist рдЬреЛрдбрд╝реЗрдВ )
- | рдХреЙрд▓рдлрдВрдХреНрд╢рди ( рдЖрдИрдбреА ) -> рдХреЙрд▓рдлреБрди рдЖрдИрдбреА
- рдФрд░ рдХреЙрд▓рдлреБрди рдЖрдИрдбреА ( ) =
- рдЪрд▓реЛ рдПрдл : YOBType ред рдХреНрд░рд┐рдпрд╛ рд╕реВрдЪреА = рд╣реИрд╢рдЯреИрдм ред рдореЗрдВ funcs id рдЦреЛрдЬреЗрдВ
- рд╕реВрдЪреАред iter ( рдлрд╝рдВрдХреНрд╢рди x -> process_action x ( ) ) f
- ;;
- рдЬрдмрдХрд┐ рд╕рдЪ рд╣реИ
- рдХреЛрд╢рд┐рд╢
- рд▓реЗрдХреНрд╕рдмреБрдл = рд▓реЗрдХреНрд╕рд┐рдВрдЧ ред from_channel рд╕реНрдЯрдбрд┐рди рдЗрди
- process_action ( YOBParser ред рдореБрдЦреНрдп YOBLexer ред рдЯреЛрдХрди рд▓реЗрдХреНрд╕рдмреБрдл ) ( )
- рд╕рд╛рде
- YOBLexer ред рдИрдУрдПрдл ->
- рдкреНрд░рд┐рдВрдЯ_рд╕реНрдЯреЗрдЯреНрд╕ ( ) ;
- рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ 0
- | рдкрд╛рд░реНрд╕рд┐рдВрдЧ ред Parse_error ->
- рдЫрд╛рдкрд╛ ред Printf ">> рди рддреЛ @ # рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ b @ #! \ n" ;
- рдлреНрд▓рд╢ рд╕реНрдЯрдбрдЖрдЙрдЯ
- | рдЕрд╕рдлрд▓рддрд╛ ( _ ) ->
- рдЫрд╛рдкрд╛ ред Printf ">> рди рддреЛ @ # рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ b @ #! \ n" ;
- рдлреНрд▓рд╢ рд╕реНрдЯрдбрдЖрдЙрдЯ
- рдХрд┐рдпрд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рджреЛ рд╣реИрд╢ рдЯреЗрдмрд▓ рдмрдирд╛рдПрдВрдЧреЗ - рдЪрд░ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдПред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрдХрд╛рд░ 10 рдХреЛ рдЯреЙрд░реНрдЪ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рднрд╛рд╖рд╛ рд╣реИ, рд╣рдореЗрдВ рдПрдХ рд╕рд╛рде рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред
рдлрд┐рд░ рд╣рдо рджреЛ рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ: рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП, рдФрд░ рджреВрд╕рд░рд╛ рдЪрд░реЛрдВ рдХреЗ рдмрдврд╝рдиреЗ / рдШрдЯрдиреЗ рдХреЗ рд▓рд┐рдПред
рдЗрд╕рдХреЗ рдмрд╛рдж рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рддреАрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рдореВрд╣ рдЖрддрд╛ рд╣реИ: рд╕рд╢рд░реНрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрдВрдбрд┐рд╢рдирд▓ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рдВрд╕ (рдпрджрд┐ рд╣рдорд╛рд░рд╛), рдХреЙрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЙрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЖрдП рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрд╕реЗрд╕_рдПрдХреНрд╢рди рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╕рднреА рддреАрди рдХрд╛рд░реНрдп рдПрдХ-рджреВрд╕рд░реЗ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ, рдХреЛрдИ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ process_action рдореЗрдВ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдПрдХ рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдпрд╣ рдРрд╕рд╛ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЫреЛрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдерд╛ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред
рдЕрдВрдд рдореЗрдВ, рдХреЛрдб рдХрд╛ рдЕрдВрддрд┐рдо рднрд╛рдЧ, рд▓реВрдк рдореЗрдВ рдиреАрд▓рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкрд╛рд░реНрд╕рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдореЗрдВ рдореЗрдлрд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЖрдк рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
all:
ocamlc -c yobaType.ml
ocamllex yobaLexer.mll
ocamlyacc yobaParser.mly
ocamlc -c yobaParser.mli
ocamlc -c yobaLexer.ml
ocamlc -c yobaParser.ml
ocamlc -c yoba.ml
ocamlc -o yoba yobaLexer.cmo yobaParser.cmo yoba.cmo
clean:
rm -f *.cmo *.cmi *.mli yoba yobaLexer.ml yobaParser.ml
рднрд╛рд╖рд╛ рдХреА рдЬрд╛рдБрдЪ
рдЕрдм, рдзреНрдпрд╛рди рджреЗрдВ, рдореИрдВрдиреЗ рдореВрд▓реНрдпреЛрдВ рдФрд░ рдЪрд░ рдХреЗ рдПрдХ рдЕрд▓рдЧ рдХреНрд░рдо рдХрд╛ рд╕рдорд░реНрдерди рдХреНрдпреЛрдВ рдХрд┐рдпрд╛? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдмрд╣реБрдд рдирд┐рдХрд▓реА, рдЙрдо, рдкреНрд░рд╛рдХреГрддрд┐рдХ, рджреБрднрд╛рд╖рд┐рдпрд╛ рд╕рдЪрдореБрдЪ рдЖрдкрд╕реЗ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЦреБрдж рд▓рдЧрд╛рддрд╛рд░ рдЗрд╕ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдБ рдХрд┐ рдХреНрдпрд╛ рд▓рд┐рдЦрдирд╛ рд╣реИ:
$ ./yoba
3
4
2
@#
>>
>>
>>
>> ! : 7
>> ! : -2
4 1 @#
>>
>> ! : 7
>> ! : -1
4 @# @#
>>
>>
>>
>> ! : 14
>> ! : -3
рдХрдорд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╡реГрджреНрдзрд┐ / рдХрдореА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИрдВред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ред рд╕рднреА рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛрдб
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ
рд╣реИрдВ (2kb) ред
рдпрджрд┐ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡реА рд▓реЛрдЧ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред