рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг

.. рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ HTML рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдЧреАрдЬрд╝ рд╕реЗ рдкреВрдЫрдирд╛ рдкреЗрд░рд┐рд╕ рд╣рд┐рд▓реНрдЯрди рд╕реЗ рдПрдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдЬреИрд╕рд╛ рд╣реИред


рдиреЗрдореЗрд░реНрд▓реЗ рдХреЗ рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╡реНрдпрд╛рдХрд░рдг рдЦреВрдВрдЯреА рд╡рд░реНрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред



рдЦреВрдВрдЯреА рдХреНрдпрд╛ рд╣реИ?



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



рдЗрд╕ рддрд░рд╣ рд╡рд░реНрдгрд┐рдд рдкрд╛рд░реНрд╕рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╡рд░реНрдЧ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C #) рдФрд░ рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред



RegExp рд╣реЛрдиреЗ рдкрд░ рдЖрдкрдХреЛ рдХреБрдЫ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?



рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕ рдЪрд▓рдиреЗ рдХреА рдкрд╣реБрдВрдЪ рдХреЗ рдХрд╛рд░рдг, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдЙрдкрдпреБрдХреНрдд рд╣реИ (рдирд┐рдпрдорд┐рдд рд╡реНрдпрд╛рдХрд░рдгреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛), рдФрд░ рдЬрд╣рд╛рдВ рдирд╣реАрдВ (HTML рдФрд░ рдЕрдиреНрдп рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛)ред



рд╕реНрдЯреИрдХрдУрд╡рд░рдлрд╝реНрд▓реЛ рд╕реЗ рдЙрджреНрдзрд░рдг:

.. рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ HTML рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдЧреАрдЬрд╝ рд╕реЗ рдкреВрдЫрдирд╛ рдкреЗрд░рд┐рд╕ рд╣рд┐рд▓реНрдЯрди рд╕реЗ рдПрдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдЬреИрд╕рд╛ рд╣реИред


рджреВрд╕рд░рд╛ рдЪрд░рдо yacc рдФрд░ antlr рдЬреИрд╕реЗ рдкрд╛рд░реНрд╕рд░ рдЬрдирд░реЗрдЯрд░ рд╣реИрдВред рд╡реЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЦреБрдж рдХреЛ рдПрдХ рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрдирд╛ "рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди" рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рднреА, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреЛ рдИрдбреАрдПрд╕рдПрд▓ рд╣реИрдВ, рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкреАрдврд╝реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдХреЛрдб рдкреАрдврд╝реА рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред



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



TeX рднрд╛рд╖рд╛ рдХреЗ рдЧрдгрд┐рддреАрдп рдорд╛рд░реНрдХрдЕрдк рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг



рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ TeX рдЧрдгрд┐рддреАрдп рдорд╛рд░реНрдХрдЕрдк рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреАрдИрдЬреА рд╡реНрдпрд╛рдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╣рдо рдЗрд╕ рддрд╕реНрд╡реАрд░ рдХреЗ рд╕реНрд░реЛрдд рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ

рдЫрд╡рд┐






рдпрд╣рд╛рдБ рд╡рд╣ рд╣реИ



\int_{-\frac{\pi}{2}}^{\frac{\pi}{2}} \cos x \; dx = 2
      
      





рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХрдорд╛рдВрдбреНрд╕ (\ int, \ pi, \ cos), рдПрд╕реНрдХреЗрдк рд╕реАрдХреНрд╡реЗрдВрд╕ (\); рдиреЗрд╕реНрдЯреЗрдб рдмреНрд░реИрдХреЗрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░ ({.. {..} ..}) рдФрд░ рд╕рдм рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реИред



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЙрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдкрд╛рда рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:



  public variant WordTexAst { | Command { name : string } //  | Escape { symbol : string } // escape  | Group { data : WordTexAst.Sequence } //    | Data { data : string } //   | Sequence { words : list[WordTexAst]} }
      
      





рдореИрдВрдиреЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдмреАрдЬрдЧрдгрд┐рддреАрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдпрд╛ рд▓реЗрдмрд▓ рдпреВрдирд┐рдпрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред



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



  [PegGrammar(ast, grammar { commandName = ['a'..'z','A'..'Z']+; escapeLetter = ';' / ','; letter = ['a'..'z','A'..'Z','0'..'9'] / '^' / '_' / '=' / ' ' / '-' / '+' / '/' / '(' / ')' / '[' / ']'; command : WordTexAst = '\\' commandName; escape : WordTexAst = '\\' escapeLetter; group : WordTexAst = '{' ast '}'; data : WordTexAst = letter+; word : WordTexAst = command / escape / group / data; ast : WordTexAst.Sequence = word+; })]
      
      





рдореИрдХреНрд░реЛ рдХрд╛ рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд╣ рдирд┐рдпрдо рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред рдлрд┐рд░ - рд╡реНрдпрд╛рдХрд░рдг (рд░рдгрдиреАрддрд┐) рдХрд╛ рд╡рд┐рд╡рд░рдг, рдЬреЛ рдмреИрдХрд╕ - рдиреМрд░ рдХреЗ рд░реВрдк рдХреЗ рд╕рдорд╛рди рд╣реИред рдмрд╛рдПрдВ рдХреЙрд▓рдо рдореЗрдВ - рдирд┐рдпрдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж - рдЗрд╕ рдирд┐рдпрдо рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░реНрд╕ рдХреА рдЧрдИ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ред рдкрд╣рд▓реЗ рддреАрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдЫреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдирд┐рдпрдо рд╢реЗрд╖ рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред рд╕рдорд╛рди рд╕рдВрдХреЗрдд рдХреЗ рдмрд╛рдж, рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЧрдП рдкрд╛рда рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ рд╕реНрдерд╛рди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╕реНрдерд┐рд░рд╛рдВрдХ рдФрд░ рдЕрдиреНрдп рдирд┐рдпрдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, '+' - рдирд┐рдпрдо рдХреЛ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдмрд╛рд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, 'рдП / рдмреА' рдХрд╛ рдЕрд░реНрде рд╣реИ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдирд┐рдпрдо 'рдП', рдпрджрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдирд┐рдпрдо 'рдмреА' рд╣реИред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ 'рдпрд╛' рдСрдкрд░реЗрдЯрд░ рд╕рд░рд╛рд╣рдиреАрдп рдирд╣реАрдВ рд╣реИ, рдпрджрд┐ рдкрд╣рд▓реЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдирд┐рдпрдо рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



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



рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдкрд╛рд░реНрд╕рд░ рдХреЛрдб:

  [PegGrammar(ast, grammar { commandName = ['a'..'z','A'..'Z']+; escapeLetter = ';' / ','; letter = ['a'..'z','A'..'Z','0'..'9'] / '^' / '_' / '=' / ' ' / '-' / '+' / '/' / '(' / ')' / '[' / ']'; command : WordTexAst = '\\' commandName; escape : WordTexAst = '\\' escapeLetter; group : WordTexAst = '{' ast '}'; data : WordTexAst = letter+; word : WordTexAst = command / escape / group / data; ast : WordTexAst.Sequence = word+; })] public class TexParser { private escape(_ : NToken, symbol : NToken) : WordTexAst { WordTexAst.Escape(GetText(symbol)) } private command(_ : NToken, commandName : NToken) : WordTexAst { WordTexAst.Command(GetText(commandName)) } private group(_ : NToken, ast : WordTexAst.Sequence, _ : NToken) : WordTexAst { WordTexAst.Group(ast) } private data(arg : NToken) : WordTexAst { WordTexAst.Data(GetText(arg)) } private word(arg : WordTexAst) : WordTexAst { arg } private ast(data : List[WordTexAst]) : WordTexAst.Sequence { WordTexAst.Sequence(data.ToList()) } }
      
      





NToken рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдЕрднреА рддрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рдРрд╕рд╛ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ "рд╕реНрдерд┐рд░" рдирд┐рдпрдо рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЧрдП рдкрд╛рда рдХреЗ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдЖрдк рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдпрд╣ рдкрд╛рд░реНрд╕рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:



  def parser = TexParser(); def text = @"\int_{-\frac{\pi}{2}}^{\frac{\pi}{2}} \cos x \; dx = 2"; def (pos,ast) = parser.TryParse(text); when (pos == text.Length) Console.WriteLine("success");
      
      





TryParse рдкрджреНрдзрддрд┐ рдкрд╛рда рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреА рд╣реИ, рдкреЙрдЬрд╝ рдореЗрдВ рдкрд╛рд░реНрд╕ рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИ, рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреЙрдЬрд╝ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ, рдпрджрд┐ рдХреЗрд╡рд▓ рдЙрдкрд╕рд░реНрдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреЙрдЬрд╝ рдореЗрдВ рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рдХреА рд▓рдВрдмрд╛рдИ рд╣реЛрддреА рд╣реИред



рдирд┐рд╖реНрдХрд░реНрд╖



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



рдпрд╣ рдИрдбреАрдПрд╕рдПрд▓ рдПрдХ рдореИрдХреНрд░реЛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдПрдХ рдкреНрд░рднрд╛рд╡реА рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдореА dll рдХрд┐рд╕реА рднреА .net рднрд╛рд╖рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рднрд╛рд╖рд╛ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред



рд╕рдВрджрд░реНрдн



рд╡рд░реНрддрдорд╛рди рдирд┐рдореЗрд░рд▓ рд╕рдВрд╕реНрдХрд░рдг

Rsdn.ru (рд░реВрд╕реА) рдкрд░ рдлреЛрд░рдо

Google рд╕рдореВрд╣ (рдЕрдВрдЧреНрд░реЗрдЬреА)



All Articles