рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ Vala рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Netbeans рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдПрдВ

рд╡реЗрд▓рд╛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЧреНрдиреЛрдо рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕реА рднрд╛рд╖рд╛ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрд╕реА рд╕рдордп, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рднрд╛рд╖рд╛ рдПрдХ рд╕рдлрд▓рддрд╛ рдереА; рдЕрдкрдиреЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ, рдЗрд╕рдиреЗ рдмрд╣реБрдд рд╕реА # рдФрд░ рдЬрд╛рд╡рд╛ рд▓рд┐рдпрд╛ред рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Habr├й рдпрд╛ рд╕реВрдХреНрддрд┐ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЖрдЬрдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рдЗрд╕ рддрдереНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдлрд┐рд▓рд╣рд╛рд▓ рдЖрдИрдбреАрдИ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓рд╛ рдЖрдИрдбреАрдИ рдпрд╛ рдкреНрд▓рдЧ-рдЗрди рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЖрд░рд╛рдо рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдирддреАрдЬрддрди, NetBeans IDE рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдХрд┐ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдУрдкрди рд╕реЛрд░реНрд╕ IDE (рдЧреНрд░рд╣рдг рдХреЗ рд╕рд╛рде) рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдлрд┐рд░ рднреА, NetBeans Plaform рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдФрд░ рдкреНрд▓рдЧ-рдЗрди рдХреЛ рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдмрд┐рдЦрд░реА рд╣реБрдИ рд╣реИ, рдФрд░ рд░реВрд╕реА рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред



рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд░


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


рдкреНрд▓рдЧрдЗрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ ANTLR рдХреЛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛, рдЕрд░реНрдерд╛рддреН ANTLRv3 ред рдпрд╣ рдЬрд╛рд╡рд╛ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдиреЗрдЯрдмреАрдиреНрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
ANTLR рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ LL рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднрд╛рд╖рд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рднрд╛рд╖рд╛ RBNF рдХреЗ рдХрд░реАрдм рд╣реИ рдФрд░ рдХрд╛рдлреА рд╣рдж рддрдХ рд╕рд╣рдЬ рд╣реИред

рд╕рд░рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ANTLR рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рдпрдо рд╣реЛрддреЗ рд╣реИрдВ - рд▓реЗрдХреНрд╕рд░ рдФрд░ рд╡реНрдпрд╛рдХрд░рдгред рд▓реЗрдХреНрд╕рд░ рдирд┐рдпрдо рдЙрди рдЯреЛрдХрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд▓реЗрдХреНрд╕рд┐рдХрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рдЪрд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХреНрд╕рд░ рдирд┐рдпрдо рдХреЗ рдирд╛рдо рдЕрдкрд░рдХреЗрд╕ рдФрд░ рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рдирд┐рдпрдо рдХрдо рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рд▓реЗрд╕рд░ рдирд┐рдпрдо:
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
рдпрд╣ рдирд┐рдпрдо рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдРрд╕реЗ рд╢рдмреНрдж рдЬреЛ рд▓реИрдЯрд┐рди рдЕрдХреНрд╖рд░ рдпрд╛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХреНрд░рдорд╢рдГ рд╕рдВрдЦреНрдпрд╛, рд▓реИрдЯрд┐рди рд╡рд░реНрдг рдпрд╛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЪрд░рд┐рддреНрд░ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рдорд┐рд▓рд╛рди рдХреЗ рд╕рднреА рд▓реЗрд╕рд░ рдирд┐рдпрдо рдЯреЛрдХрди рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

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

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╡реНрдпрд╛рдХрд░рдг рдирд┐рдпрдо:
try_statement : TRY block (catch_clause)* (finally_clause)?;
рдЗрд╕ рдирд┐рдпрдо рдореЗрдВ рдХреЛрд╢рд┐рд╢ ... рдХреИрдЪ рдмреНрд▓реЙрдХ рдХрд╛ рд╡рд░реНрдгрди рд╣реИред рдПрдХ рдирд┐рдпрдо рдореЗрдВ рдЯреЛрдХрди рдФрд░ / рдпрд╛ рдЕрдиреНрдп рд╡реНрдпрд╛рдХрд░рдг рдирд┐рдпрдо рдХреЗ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рддреАрдХ '*' рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкрдХрдбрд╝_рдХреНрд▓реЙрдЬ рдмреНрд░реИрдХреЗрдЯреНрд╕ рдореЗрдВ рдмреНрд▓реЙрдХ рдХреЛ рдХрдИ рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪрд░рд┐рддреНрд░ '?' - рдЕрдВрддрддрдГ_рдХреНрд▓реЙрдЬ рдмреНрд▓реЙрдХ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдпрд╣ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

рдиреЗрдЯрдмреАрдиреНрд╕ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓


1) рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдБ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ New Project рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ NetBeans рдореЙрдбреНрдпреВрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдиреЗрдЯрдмреАрдВрд╕ рдореЙрдбреНрдпреВрд▓ | рдореЙрдбреНрдпреВрд▓ред "рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдореЙрдбреНрдпреВрд▓" рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рд╣реА рдирд╛рдо, рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рдФрд░ "рдЬреЗрдирд░реЗрдЯ XML рд▓реЗрдпрд░" рдмреЙрдХреНрд╕ рдХреЛ рдЪреЗрдХ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЕрдВрддрд┐рдо рдХреНрд░рд┐рдпрд╛ рдПрдХ рд▓реЗрдпрд░ .xml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдЧреА рдЬрд┐рд╕рдореЗрдВ рдЙрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рдирд╛рдо рд╣реЛрдВрдЧреЗ рдЬреЛ рдкреНрд▓рдЧ-рдЗрди рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рдЖрдкрдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдиреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

2) .vala рдФрд░ .vapi рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВ


NetBeans Datasystems API рдФрд░ Filesystems API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдореВрд▓ рддрддреНрд╡ рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ рдирдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдирдпрд╛ | рдЕрдиреНрдп | рдореЙрдбреНрдпреВрд▓ рд╡рд┐рдХрд╛рд╕ | рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░ред

рдЗрди рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рд╕реЗ DataObject рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрдЧрд╛, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ ValaDataObject рд╣реИ , рдФрд░ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдПрдХ .vala рдлрд╝рд╛рдЗрд▓ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ layer.xml рдореЗрдВ рднреА рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

< filesystem >
< folder name ="Loaders" >
< folder name ="text" >
< folder name ="x-vala" >
< folder name ="Actions" >
...
</ folder >
< folder name ="Factories" >
< file name ="ValaDataLoader.instance" >
< attr name ="SystemFileSystem.icon" urlvalue ="nbresloc:/org/carbonfx/valaproject/vala.png" />
< attr name ="dataObjectClass" stringvalue ="org.carbonfx.valaproject.ValaDataObject" />
< attr name ="instanceCreate" methodvalue ="org.openide.loaders.DataLoaderPool.factory" />
< attr name ="mimeType" stringvalue ="text/x-vala" />
</ file >
</ folder >
</ folder >
...


* This source code was highlighted with Source Code Highlighter .


рд╕рд┐рдВрдЯреЗрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ


рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирдИ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд╣реИред

1) рд╣рдо ANTLR рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдкрд╛рд░реНрд╕рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ


рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ANTLR рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ рдкрд╛рд░реНрд╕рд░ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдиреЗрдЯрдмреАрди рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ANTLRWorks рдореЗрдВ рд▓реЗрдХреНрд╕рд░ рдФрд░ рдкрд╛рд░реНрд╕рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдЖрдк рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

@header { package org.carbonfx.valaproject.antlr; }
@lexer::header { package org.carbonfx.valaproject.antlr; }


* This source code was highlighted with Source Code Highlighter .


2) рд╣рдо рдиреЗрдЯрдмреАрдиреНрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдПрдирдЯреАрдПрд▓рдЖрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддреЗ рд╣реИрдВ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рд╕рд╛рд░ рд╡рд░реНрдЧ org.netbeans.spi.lexer.LanguageHierarchy рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╡рд░реНрдЧ рднрд╛рд╖рд╛ рдХреЛ рдЯреЛрдХрди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЯреЛрдХрди рдХреЛ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

public class ValaLanguageHierarchy extends LanguageHierarchy<ValaTokenId> {

@Override
protected Collection<ValaTokenId> createTokenIds() {
return Arrays.asList(tokens);
}

@Override
protected Lexer<ValaTokenId> createLexer(LexerRestartInfo<ValaTokenId> lri) {
return new org.carbonfx.valaproject.lexer.ValaLexer(lri);
}

@Override
protected String mimeType() {
return "text/x-vala" ;
}

static synchronized ValaTokenId getToken( int id) {
return idToToken. get (id);
}

private static final Map<Integer, ValaTokenId> idToToken = new HashMap<Integer, ValaTokenId>();
private static final ValaTokenId[] tokens = new ValaTokenId[] {
token(ValaLexer.AND, "operator" ),
token(ValaLexer.AND_ASSIGN, "operator" ),
token(ValaLexer.BACKSLASH, "operator" ),
// ...
token(ValaLexer.UNICODE_CHAR, "error" ),
token(ValaLexer.OTHER_CHAR, "error" ),
token(ValaLexer.UNKNOWN_CHAIN, "error" ),
};

static {
for (ValaTokenId token : tokens) {
idToToken.put(token.ordinal(), token);
}
}

private static ValaTokenId token( int antlrToken, String category) {
return new ValaTokenId (ValaParser.tokenNames[antlrToken], category, antlrToken);
}
}

* This source code was highlighted with Source Code Highlighter .


рдореБрдЭреЗ рдпрд╣рд╛рдВ ValaTokenId рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╛рдж рдЖрдпрд╛, рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ
рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ ValaLexer ValaLexer , рдЬреЛ Lexer<ValaTokenId> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

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

рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЙрди рдкрд╛рддреНрд░реЛрдВ рдХреА рдзрд╛рд░рд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ NetBeans рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рджреЗрддрд╛ рд╣реИ рдЬреЛ ANTLR рдХреНрд▓рд╛рд╕реЗрд╕ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛, рдЕрд░реНрдерд╛рддреН, CharStream рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рд╕рдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ ред

3) рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди


рд╣рдо FontAndColors.xml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рддрддреНрд╡реЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХреА рдЧрдИ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЯреЛрдХрди рдХреА рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реА рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

<? xml version ="1.0" encoding ="UTF-8" ? >
<! DOCTYPE fontscolors PUBLIC "-//NetBeans//DTD Editor Fonts and Colors settings 1.1//EN" "http://www.netbeans.org/dtds/EditorFontsColors-1_1.dtd" >
< fontscolors >
< fontcolor name ="character" default ="character" />
< fontcolor name ="error" default ="error" />
< fontcolor name ="identifier" default ="identifier" />
< fontcolor name ="keyword" default ="keyword" />
< fontcolor name ="comment" default ="comment" />
< fontcolor name ="number" default ="number" />
< fontcolor name ="operator" default ="operator" />
< fontcolor name ="string" default ="string" />
< fontcolor name ="separator" default ="separator" />
< fontcolor name ="whitespace" default ="whitespace" />
< fontcolor name ="method" default ="method" />
< fontcolor name ="javadoc" default ="javadoc" foreColor ="ff006666" />
< fontcolor name ="regex" default ="regex" foreColor ="ff660066" />
< fontcolor name ="command" default ="command" foreColor ="ff006633" />
</ fontscolors >

* This source code was highlighted with Source Code Highlighter .


Bund.properties рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдо рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╡ рдирд╛рдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
operator=Operator
string=String
separator=Separator
whitespace=Whitespace
method=Method
regex=Regular Expression
command=Command
...


* This source code was highlighted with Source Code Highlighter .


рдЗрд╕рдХреЗ рдмрд╛рдж, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб ValaExample.vala рдХреЗ рд╕рд╛рде рдПрдХ рдирдореВрдирд╛ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВред рдпрд╣ рдиреЗрдЯрдмреАрдВрд╕ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рд░рдВрдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рдВрд╡рд╛рдж рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЕрдВрддрд┐рдо рдЪрд░рдг - рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП layer.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реЗрдВ:
< filesystem >
< folder name ="Editors" >
< folder name ="text" >
< folder name ="x-vala" >
< file name ="language.instance" >
< attr name ="instanceCreate" methodvalue ="org.carbonfx.valaproject.lexer.ValaTokenId.getLanguage" />
< attr name ="instanceOf" stringvalue ="org.netbeans.api.lexer.Language" />
</ file >
< attr name ="SystemFileSystem.localizingBundle" stringvalue ="org.carbonfx.valaproject.Bundle" />
< folder name ="FontsColors" >
< folder name ="NetBeans" >
< folder name ="Defaults" >
< file name ="FontAndColors.xml" url ="FontAndColors.xml" >
< attr name ="SystemFileSystem.localizingBundle" stringvalue ="org.carbonfx.valaproject.Bundle" />
</ file >
</ folder >
</ folder >
</ folder >
</ folder >
</ folder >
</ folder >
< folder name ="OptionsDialog" >
< folder name ="PreviewExamples" >
< folder name ="text" >
< file name ="x-vala" url ="ValaExample.vala" />
</ folder >
</ folder >
</ folder >
</ filesystem >

* This source code was highlighted with Source Code Highlighter .


рдпрджрд┐ рдЖрдкрдиреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдХреБрдЫ рднреА рдпрд╛рдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред .Vala рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓реЗрдВ рдЦреЛрд▓рддреЗ рд╕рдордп, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреАрд╡рд░реНрдб рд╡рд╛рдВрдЫрд┐рдд рд░рдВрдЧ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред Vala рднрд╛рд╖рд╛ рд╕реЗрдЯрд┐рдВрдЧ рдбрд╛рдпрд▓реЙрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕реЗ рдЖрдк ValaExample.vala рдлрд╝рд╛рдЗрд▓ рдХреА рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЪрдпрди рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ

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


рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо рдмрд╕ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЬреЛ ANTLR рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН:
  1. рдХреЛрдб рд╕рддреНрдпрд╛рдкрди рдФрд░ рдЧрд▓рдд рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛;
  2. рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЗрдВрдбреЗрдВрдЯреЗрд╢рди;
  3. рдЯреВрд▓рдЯрд┐рдк рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо, рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдХреЗ рд▓рд┐рдПред


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

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

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


  1. рдЧрд┐рдердм рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб , рдЖрдк рд╡рд╣рд╛рдВ рд╕рдВрдХрд▓рд┐рдд рдореЙрдбреНрдпреВрд▓ рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  2. ANTLR рдФрд░ ANTLRWorks рд╡реЗрдмрд╕рд╛рдЗрдЯ
  3. NetBeans + ANTLR рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢
  4. рдиреЗрдЯрдмреАрди + рдЬрд╛рд╡рд╛рд╕реАрд╕реА рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рд▓реЗрдЦрди рдирд┐рд░реНрджреЗрд╢

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


All Articles