рдкрд╛рд░реНрд╕рд░ рдХреЙрдореНрдмреАрдиреЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╕реА # рдореЗрдВ рдбреАрдПрд╕рдПрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг


рдирд┐рдХреЛрд▓рд╕ рдмреНрд▓реВрдорд╣рд╛рд░реНрдб, рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз .NET рдбреЗрд╡рд▓рдкрд░, рдСрдЯреЛрдлреИрдХ IoC / DI рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рджред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдирд┐рдХреЛрд▓рд╕ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдкрд╛рд░реНрд╕рд░-рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░реЛрдВ рдХреЗ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдкрд╛рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдо рд╕реЗ рдХрдо рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╖рдп-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдПрдХ рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрдирд╛ рд╣реИред


рд╣рдорд╛рд░реА рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддреЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдФрд░ рдЕрдиреБрдореЛрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдбреЛрдореЗрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛рдУрдВ рдФрд░ рд╕реНрдкреНрд░рд╛рдЪ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЕрдм рдореИрдВ рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдБрдЧрд╛ред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реЗрдЯ рдЕрд╕реАрдорд┐рдд рд╣реИ; рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ "рдХрд░реНрдордЪрд╛рд░реА", "рдареЗрдХреЗрджрд╛рд░", "рдЕрд╕реНрдерд╛рдпреА рдХрд░реНрдордЪрд╛рд░реА" рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╣реИред рдЦрд╛рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрдкрдпреБрдХреНрдд рдлреЙрд░реНрдо рднрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдкреНрд░рд╢реНрдирд╛рд╡рд▓реА рдбреЗрдЯрд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдФрд░ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп, рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рддрдм рддрдХ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдЕрдВрддрддрдГ рдЖрд╡реЗрджрди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдпрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред


VS2010 рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХред

рдХрдард┐рдирд╛рдЗрдпреЛрдВ


рдХрдИ рдорд╛рдпрдиреЛрдВ рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЦрд╛рддреЛрдВ рдХрд╛ рд╕реЗрдЯ (рдФрд░, рдЗрд╕рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдлрд╛рдЗрд▓) рдЕрд╕реАрдорд┐рдд рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рдирдП рдкреНрд░реЛрдлрд╛рдЗрд▓ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рд╢реНрдирд╛рд╡рд▓реА рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рдВрднрд╡рддрдГ рдЕрдВрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдпрдВред

рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЬрдорд╛ рдХрд░рдиреЗ рдХреЗ рдХрдИ рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХреЗ рд╣реИрдВ:

рдЗрди рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдЗрд╕рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рд░рдЦрд░рдЦрд╛рд╡, рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рд▓рдЪреАрд▓реЗрдкрди рдореЗрдВ рдЖрд╕рд╛рдиреА рд╣реЛрддреА рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдПрдХ рдФрд░ рдЖрдХрд░реНрд╖рдХ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ: рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдорд┐рдиреА-рднрд╛рд╖рд╛ рдмрдирд╛рдирд╛ред

рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╡рд░рдг рднрд╛рд╖рд╛


рдЖрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рдФрд░ рдмрд╛рд╣рд░реА DSL рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреА рдХреБрдЫ рдЪрд░реНрдЪрд╛ рдкрдврд╝реА рд╣реЛрдЧреАред

рдЖрдВрддрд░рд┐рдХ рдбреАрдПрд╕рдПрд▓ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдкреАрдЖрдИ рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ рд╕реА #), рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдмрд╛рд╣рд░реА DSL рдПрдХ рдЕрд▓рдЧ рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреЛ рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдмрд╛рд╣рд░реА рдбреАрдПрд╕рдПрд▓ рдиреНрдпреВрдирддрдо рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реЛрд░ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрддрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдП рдмрд┐рдирд╛ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ DSL рдкреНрд░рд╢реНрдирд╛рд╡рд▓реА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

identification "Personal Details" [ name "Full Name" department "Department" ] employment "Current Employer" [ name "Your Employer" contact "Contact Number" #months "Total Months Employed" ] 

рдпрд╣ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдФрд░ рд░реЛрдЬрдЧрд╛рд░ рд╡рд┐рд╡рд░рдг рдПрдХрддреНрд░ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рджреЛ-рдЪрд░рдг рдкреНрд░рд╢реНрдирд╛рд╡рд▓реА рд╣реИред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЦрд╛рддреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╢реНрдирд╛рд╡рд▓реА рдХрд╛ рд╡рд┐рд╡рд░рдг рдкрдврд╝реЗрдЧрд╛, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЪрд░рдг-рджрд░-рдЪрд░рдг рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдЧрд╛ред

рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг


рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕реНрд░реЛрдд рднрд╛рд╖рд╛ рдореЗрдВ рдкрд╛рда рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдКрдкрд░ рдкреНрд░рд╢реНрдирд╛рд╡рд▓реА рдФрд░ рдЗрд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛, рдЖрдорддреМрд░ рдкрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдореЗрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред C # рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред

рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦреЗ рд╣реБрдП рдкрд░реНрд╕

рд╕рд░рд▓рддрдо рдФрд░ рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рдкрд╛рд░реНрд╕рд░ рджреЛрдиреЛрдВ рдХреЛ рдЕрдХреНрд╕рд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд░рд▓ рддрдм рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕рдорд╛рдзрд╛рди рд╕реНрдкрд╖реНрдЯ рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рд▓реВрдк рдореЗрдВ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдЦреЛрдЬрдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рддреЛрдбрд╝рдирд╛")ред рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рдкрд░реНрд╕рд░реНрд╕ рддрдм рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдПрдХ рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрддрд░ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реА # рдХрдВрдкрд╛рдЗрд▓рд░)ред рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмреАрдЪ рдореЗрдВ рдХреБрдЫ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдкреЗрд╢реЗрд╡рд░ рдирд╣реАрдВ рд╣реИрдВ, рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореЗрд░реЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ!)

рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐

рдпрд╣ рдкрд╛рда рд╕реЗ рдкреИрдЯрд░реНрди рдХреЛ рдорд┐рд▓рд╛рдиреЗ рдФрд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИред .NET рдореЗрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд System.Text.Regex рд╡рд░реНрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдХрд┐рд╕реА рдХреЛ рдПрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдХрд╛рдлреА рд╕рд░рд▓ рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬрд▓реНрджреА рд╕реЗ рдкрдврд╝рдирд╛ рдФрд░ рдмрдирд╛рдП рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╢рд╛рдпрдж рдЙрдирдХреА рд╕рдмрд╕реЗ рдмрдбрд╝реА рдХрдореА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рд╡реНрдпрд╛рдХрд░рдг рд╣реИрдВ рдЬреЛ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ (рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдирд╛ рдЬреЛ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ)ред

рдкрд╛рд░реНрд╕рд░ рдЬрдирд░реЗрдЯрд░

рдкрд╛рд░реНрд╕рд░ рдЬрдирд░реЗрдЯрд░, "рднрд╛рд╖рд╛ рдЯреВрд▓рдХрд┐рдЯреНрд╕", рдЖрдкрдХреЛ рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рд╡реНрдпрд╛рдХрд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЯреВрд▓рдХрд┐рдЯ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рд▓рдХреНрд╖реНрдп рднрд╛рд╖рд╛ (рдЬреИрд╕реЗ C #) рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЙрдирдХреЗ рдХрд╛рдо рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдЫреЛрдЯреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдирд┐рд░рд░реНрдердХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХреЗ рд▓рд┐рдП рдпрд╛ рдЙрдЪреНрдЪ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЧрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЯреВрд▓ рдХреЛ рд╕реАрдЦрдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИред

рдкрд╛рд░реНрд╕рд░ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди-рдЖрдзрд╛рд░рд┐рдд рддрдХрдиреАрдХ рдЕрдХреНрд╕рд░ рд╣рд╕реНрдХреЗрд▓ рдФрд░ рдПрдл # рдЬреИрд╕реА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИ, рджреЛрдиреЛрдВ рдореЗрдВ рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдкрд╛рд░реНрд╕рд░ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИрдВред C # рдореЗрдВ рдЖрдкрдХреЗ рд╡рд┐рдирдореНрд░ рд╕реЗрд╡рдХ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рдмрд╛рдж рдореЗрдВ рд▓реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдпреБрд╡рд╛ рд╕реНрдкрд╛рд░реНрдХ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░рд┐рдпрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рднреА рд╣реИред рд╕реНрдкреИрдЪ рдХреЛ рдПрдХ рд╕рд░рд▓ рд╕реАрдЦрдиреЗ рдХреА рдЕрд╡рд╕реНрдерд╛ рдпрд╛ рдЕрд╕реЗрдВрдмрд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рд╕рд░рд▓ рдкрд╛рд░реНрд╕рд░ рдХреЛ рд▓рд┐рдЦрдирд╛ рдФрд░ рдмрдирд╛рдП рд░рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореМрдЬреВрджрд╛ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдХрднреА-рдХрднреА, рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ - рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЫреЛрдЯреЗ рдбреАрдПрд╕рдПрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред [ рдЕрджреНрдпрддрди: рдЪреВрдВрдХрд┐ рдпрд╣ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рд╕реНрдкрд╛рд░реНрдХ рдореЗрдВ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЧрддрд┐ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИред ]

рд╢реБрд░реБрдЖрдд рд╣реЛ рд░рд╣реА рд╣реИ


рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Sprache.dll рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред рдпрд╣ рд▓реЗрдЦ рдЗрд╕рд▓рд┐рдП рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк NUnit рдХреЗ рд╕рд╛рде Visual Studio рдореЗрдВ рдкрд╛рд░реНрд╕рд░ рдмрдирд╛рдХрд░ рдФрд░ рдЙрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдХреЗ рдкрд╛рда рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХреЗрдВред

рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдиреАрдЪреЗ рд╕реЗ рдКрдкрд░ рддрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╛рд░реНрд╕рд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдирд┐рдореНрди-рд╕реНрддрд░ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддрддреНрд╡реЛрдВ рдЬреИрд╕реЗ рдХрд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рддрд╛рд░ рдФрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдзреАрд░реЗ-рдзреАрд░реЗ рдКрдВрдЪреЗ рдЙрдарддреЗ рд╣реИрдВ, рдЗрди рд╕рд░рд▓ рднрд╛рдЧреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд▓реЛрдЧреЛрдВ рдореЗрдВ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рд╣рдореЗрдВ рдкреВрд░реА рднрд╛рд╖рд╛ рдирд╣реАрдВ рдорд┐рд▓рддреАред

рдЖрдИрдбреА рдкрд╛рд░реНрд╕рд┐рдВрдЧ


рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рднрд╛рд╖рд╛ рдореЗрдВ, рд╕рдмрд╕реЗ рдиреЗрд╕реНрдЯреЗрдб рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрддреНрд╡ рдкреНрд░рд╢реНрди рд╣реИ:

 name "Full Name" 


рдпрд╣рд╛рдБ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рдХреБрдЫ рдкрд╛рда рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ 'рдирд╛рдо'ред

 [Test] public void AnIdentifierIsASequenceOfCharacters() { var input = "name"; var id = QuestionnaireGrammar.Identifier.Parse(input); Assert.AreEqual("name", id); } 

рд╕реНрдкрд╛рд░реНрд╕ рдкрд╛рд░реНрд╕рд░ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИрдВред рдкреНрд░рд╢реНрдирд╛рд╡рд▓реАрдЧреНрд░рд╛рдордорд╛рд░.рдкрд╛рд░реНрд╕реЗрдВрдЯ рдЯрд╛рдЗрдк рдкрд╛рд░реНрд╕рд░ <string> , i.e. рдпрд╣ рдЯрд╛рдЗрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдкрд╛рд░реНрд╕рд░ рдкрд░рд┐рднрд╛рд╖рд╛:

 public static readonly Parser<string> Identifier = Parse.Letter.AtLeastOnce().Text().Token(); 

рдпрд╣ рдХреЛрдб рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ - рд╣рдо рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рдПрдХ рдЧреИрд░-рдЦрд╛рд▓реА рдЕрдиреБрдХреНрд░рдо рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рдкрд╛рдареАрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдкрд╛рд░реНрд╕рд░ рдХреЗ рддрддреНрд╡ рд╣реИрдВ:

Parse.Letter - Sparche рдореЗрдВ, Parse рд╡рд░реНрдЧ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рдФрд░ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВред рдкрддреНрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг Parser <char> parser рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рд╕реЗ рдПрдХ рдкрддреНрд░ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЪрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЗрдирдкреБрдЯ рдкреНрд░рддреАрдХ рдПрдХ рдЕрдХреНрд╖рд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдкрд╛рд░реНрд╕рд░ рдЙрд╕рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рдПрдЧрд╛ред

AtLeastOnce () - рд╕реНрдкрд╛рд░реНрд╕ рд╕рдорд░реНрдерди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЧрдП рд╕рднреА рдкрд╛рд░реНрд╕рд░ред AtLeastOnce () рдЯрд╛рдЗрдк T рдХреЗ рдПрдХ рддрддреНрд╡ рдХрд╛ рдПрдХ рдкрд╛рд░реНрд╕рд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдпрд╛ Parser рджреЗрддрд╛ рд╣реИ рдЬреЛ рдРрд╕реЗ рддрддреНрд╡реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдЧрд╛, рдЬреЛ рдПрдХ IEnumerable <T> рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдкрд╛рда () - AtLeastOnce () рд╕рдВрд╢реЛрдзрдХ рд╣рдорд╛рд░реЗ рдкрд╛рд░реНрд╕рд░ <char> рдХреЛ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ Parser <IEnumerable <char >> рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╛рд░реНрд╕рд░ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдЯреЗрдХреНрд╕реНрдЯ () рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд╛рд░реНрд╕рд░ рд▓реЗрддрд╛ рд╣реИ Parser <IEnumerable <char >> рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ Parser <string> рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИред

рдЯреЛрдХрди () рдПрдХ рд╕рдВрд╢реЛрдзрдХ рд╣реИ рдЬреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк рдХреЗ рдЕрдЧреНрд░рдгреА рдФрд░ рдЕрдиреБрдЧрд╛рдореА рдХреЛ рддреНрдпрд╛рдЧ рджреЗрддрд╛ рд╣реИред

рдмрд╕?

рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░реАрдХреНрд╖рдг рд╣реИрдВред

 [Test] public void AnIdentifierDoesNotIncludeSpace() { var input = "a b"; var parsed = QuestionnaireGrammar.Identifier.Parse(input); Assert.AreEqual(тАЬaтАЭ, parsed); } 

рд╕реНрдкреНрд░реЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рд░реНрд╕рд░ рдЬрд┐рддрдирд╛ рд╣реЛ рд╕рдХреЗ рдЙрддрдирд╛ рдЗрдирдкреБрдЯ рдкрд╛рд░реНрд╕ рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рдлрд▓ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдкреВрд░реЗ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЕрд╡рд╢реЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред (рдмрд╛рдж рдореЗрдВ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЗрдирдкреБрдЯ рдХреЗ рдЕрдВрдд рдХреА рдорд╛рдВрдЧ рдХреИрд╕реЗ рдХреА рдЬрд╛рдПрдЧреАред)

 [Test] public void AnIdentifierCannotStartWithQuote() { var input = "\"name"; Assert.Throws<ParseException>(() => QuestionnaireGrammar.Identifier.Parse(input)); } 

рдпрджрд┐ рдкрд╛рд░реНрд╕рд░ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдкрд╛рд░реНрд╕ () рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ ParseException рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИред рдЖрдк рдЧреИрд░-рдлреЗрдВрдХрдиреЗ рд╡рд╛рд▓реЗ TryParse () рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╣рдЪрд╛рдиреЗ рдЧрдП рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдЦреБрд╢ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджреНрдзреГрдд рдкрд╛рда рдкрд╛рд░реНрд╕рд┐рдВрдЧ


рдкрд╣рдЪрд╛рди рдХрд┐рдП рдЧрдП рдкрд╛рда рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХрдард┐рди рдирд╣реАрдВ рд╣реИ - рд╣рдорд╛рд░рд╛ рд╕рд░рд▓ рд╕рдВрд╕реНрдХрд░рдг рдмрдЪ рдЧрдП рд╡рд░реНрдгреЛрдВ рдпрд╛ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЖрдЗрдП рдЗрдирдкреБрдЯ рд▓рд╛рдЗрди рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВ:

 name "Full Name" 

рдЙрджреНрдзреГрдд рдкрд╛рда рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдорд┐рд▓рд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
  1. рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЛ рдЦреЛрд▓рдирд╛
  2. рдЕрдиреНрдп рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ
  3. рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдирд╛

рдЙрджреНрдзрд░рдг рд╕реНрд╡рдпрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдмреАрдЪ рдкрд╛рда рд╡рд╛рдкрд╕ рдХрд░реЗрдВрдЧреЗред

рдкрд╛рд░реНрд╕рд░ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 [Test] public void QuotedTextReturnsAValueBetweenQuotes() { var input = "\"this is text\""; var content = QuestionnaireGrammar.QuotedText.Parse(input); Assert.AreEqual("this is text", content); } 

рдЪрд▓реЛ рд╕реАрдзреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдкрд╛рд╕ рдЬрд╛рддреЗ рд╣реИрдВ:

 public static readonly Parser<string> QuotedText = (from open in Parse.Char('"') from content in Parse.CharExcept('"').Many().Text() from close in Parse.Char('"') select content).Token(); 


LINQ рдХреНрд╡реЗрд░реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ F # рдЯреАрдо рдХреЗ рд▓реНрдпреВрдХ рд╣реЛрдмрди рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд (рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рдЬрд╛рдирддрд╛ рд╣реВрдБ) рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рддреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреВрд░реЗ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рди рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред

рдкрд░рд╕рд┐рдо рдкреНрд░рд╢реНрди


рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкрд╛рд░реНрд╕рд░реНрд╕ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ: рдПрдХ рдЪрд░рд┐рддреНрд░ рд░рд┐рдЯрд░реНрди рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд░, рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рд░рд┐рдЯрд░реНрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд░ред рдкреНрд░рд╢реНрди рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд░ рдкреНрд░рд╢реНрди рд▓реМрдЯрд╛рдПрдЧрд╛!

 public class Question { public Question(string id, string prompt) { Id = id; Prompt = prompt; } public string Id { get; private set; } public string Prompt { get; private set; } } 

рдпрд╣ рд╕рдВрдпреЛрдЬрди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд▓рд╛рдн рд╣реИред рдЬреИрд╕реЗ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╢рдмреНрджрд╛рд░реНрде рдореЙрдбрд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд╛рд░реНрд╕рд░ рд╕реАрдзреЗ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

 public static readonly Parser<Question> Question = from id in Identifier from prompt in QuotedText select new Question(id, prompt); 

рдкреНрд░рд╢реНрди рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдЕрдм рдЧреБрдЬрд░рддрд╛ рд╣реИ:

 [Test] public void AQuestionIsAnIdentifierFollowedByAPrompt() { var input = "name \"Full Name\""; var question = QuestionnaireGrammar.Parse(input); Assert.AreEqual("name", question.Id); Assert.AreEqual("Full Name", question.Prompt); } 

рдзрд╛рд░рд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ


рдЕрдиреБрднрд╛рдЧ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд░рд╢реНрди рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд╕рдорд╛рди рд╣реИ: рдкрд╣рд▓реЗ рд╣рдо рдПрдХ рд╢рдмреНрджрд╛рд░реНрде рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░, рдореМрдЬреВрджрд╛ рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд╕реНрд░реЛрдд рдкрд╛рда рдХрд╛ рдЗрд╕рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВред

рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдиреБрднрд╛рдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 identification "Personal Details" [ name "Full Name" department "Department" ] 

рд╣рдо рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдореЗрдВ рджрд░реНрд╢рд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 public class Section { public Section(string id, string title, IEnumerable<Question> questions) { Id = id; Title = title; Questions = questions; } public string Id { get; private set; } public string Prompt { get; private set; } public IEnumerable<Question> Questions { get; private set; } } 

рдПрдХ рдкрд╛рд░реНрд╕рд░ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдПрдХ рд╡рд╕реНрддреБ рдореЙрдбрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рд▓ рд╣реИ:

 public static readonly Parser<Section> Section = from id in Identifier from title in QuotedText from lbracket in Parse.Char('[').Token() from questions in Question.Many() from rbracket in Parse.Char(']').Token() select new Section(id, title, questions); 

рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдореЙрдбрд▓ рд╡рд░реНрдЧ рд╣реИ:

 public class Questionnaire { public Questionnaire(IEnumerable<Section> sections) { Sections = sections; } public IEnumerable<Section> Sections { get; private set; } } 

рд╕рдВрдмрдВрдзрд┐рдд рдкрд╛рд░реНрд╕рд░ (рдЗрд╕ рд╕рдордп рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдП рдмрд┐рдирд╛):

 public static Parser<Questionnaire> Questionnaire = Section.Many().Select(sections => new Questionnaire(sections)).End(); 


.End () рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╕рднреА рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЬрд╛рдПрдВ (рдпрд╛рдиреА рдЕрдВрдд рдореЗрдВ рдХреЛрдИ рдХрдЪрд░рд╛ рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИ)ред

рдпрд╣ рд╣рдо рд╕рднреА рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рд┐рдП, рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреНрд╡рд╛рд▓реАрдлрд╛рдпрд░ рдХреЗред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди


рд╣рдорд╛рд░реЗ рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ рдЙрддреНрддрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреНрд╡рд╛рд▓рд┐рдлрд╛рдпрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реЛрдЧрд╛ред

 #months "Total Months Employed" 

рдЙрдирдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 public enum AnswerType { Natural, Number, Date, YesNo } 

рдпрд╣ рдПрдХ рдХрд╛рдлреА рд╕реАрдорд┐рдд рд╕реЗрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЧрдгрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рд╣рд░ рд╕рдВрднрд╡ рдХреНрд╡рд╛рд▓рд┐рдлрд╛рдпрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗред

 public static Parser<AnswerType> AnswerTypeIndicator = Parse.Char('#').Return(AnswerType.Natural) .Or(Parse.Char('$').Return(AnswerType.Number)) .Or(Parse.Char('%').Return(AnswerType.Date)) .Or(Parse.Char('?').Return(AnswerType.YesNo)); 


рдкреНрд░рд╢реНрди рдХрдХреНрд╖рд╛ рдХреЛ рдПрдХ рдирд┐рд░реНрдорд╛рдг рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрддрд░ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рд╢реНрди рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдПрдХ рд╕рд░рд▓ рд╕рдВрд╢реЛрдзрди рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

 public static Parser<Question> Question = from at in AnswerTypeIndicator.Or(Parse.Return(AnswerType.Text)) from id in Identifier from prompt in QuotedText select new Question(id, prompt, at); 

рд╕рд╛рд░рд╛рдВрд╢


рдПрдХ рдкреВрд░реНрдг рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛрдб рдХреЗ 25 рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрдард┐рдд рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╕рд┐рд░реНрдл рдЫрд╣ рдирд┐рдпрдо рд╣реИрдВред

рдпрджреНрдпрдкрд┐ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдиреЗ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ рдХрд┐ рд╕рд░рд▓ рд╡рд┐рд╡рд┐рдзрддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдФрд░ рднрд╛рд╖рд╛ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░рд╛рд▓ рдХреЛ рднрд░рддреА рд╣реИрдВред

Source: https://habr.com/ru/post/In127642/


All Articles