package Ġcom . b aj dcc . LL 1 . syntax . lexer Ċ Ċ import Ġcom . b aj dcc . LL 1 . syntax . lexer . tokenizer . Comment Tokenizer Ċ import Ġcom . b aj dcc . LL 1 . syntax . lexer . tokenizer . Non Terminal Tokenizer Ċ import Ġcom . b aj dcc . LL 1 . syntax . lexer . tokenizer . Operator Tokenizer Ċ import Ġcom . b aj dcc . LL 1 . syntax . lexer . tokenizer . Terminal Tokenizer Ċ import Ġcom . b aj dcc . LL 1 . syntax . token . Token Ċ import Ġcom . b aj dcc . LL 1 . syntax . token . TokenType Ċ import Ġcom . b aj dcc . util . lexer . algorithm . I Token Algorithm Ċ import Ġcom . b aj dcc . util . lexer . algorithm . Token Algorithm Collection Ċ import Ġcom . b aj dcc . util . lexer . algorithm . impl . Whitespace Tokenizer Ċ import Ġcom . b aj dcc . util . lexer . error . Regex Exception Ċ import Ġcom . b aj dcc . util . lexer . regex . I Regex String Filter Host Ċ import Ġcom . b aj dcc . util . lexer . regex . Regex String Iterator Ċ import Ġcom . b aj dcc . util . lexer . token . Meta Type Ċ Ċ /** Ċ Ġ* Ġ è§£æŀĲ æĸĩ æ³ķ çļĦ è¯į æ³ķ åĪĨæŀĲ åĻ¨ Ċ Ġ* Ċ Ġ* Ġ@ author Ġb aj dcc Ċ Ġ*/ Ċ class ĠSyntax Lexer Ġ@ Throws ( Regex Exception :: class ) Ċ constructor () Ġ: ĠRegex String Iterator (), ĠI Regex String Filter Host Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç®Ĺæ³ķ éĽĨåĲĪ ï¼Ī æŃ£ åĪĻ è¡¨è¾¾å¼ı åĮ¹éħį ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġalgorithm Collections Ġ= ĠToken Algorithm Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġthis ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åŃĹç¬¦ è½¬æį¢ ç®Ĺæ³ķ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġtoken Algorithm : ĠI Token Algorithm ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸ ¢ å¼ĥ çļĦ ç±»åŀĭ éĽĨåĲĪ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġset Discard Token Ġ= Ġmutable Set Of < TokenType >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® è¦ģ åĪĨæŀĲ çļĦåĨħå®¹ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġ æĸĩ æ³ķ æİ¨ å¯¼ å¼ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride /* ĠåĪĿå§ĭåĮĸ Ġ*/ Ġvar Ġcontext : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsuper . context ĊĠĠĠĠĠĠĠ Ġset ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . context Ġ= Ġcontext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition . column Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition . line Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . current Ġ= Ġ'\ u 0 0 0 0 ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . meta Ġ= ĠMeta Type . END ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack Index . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack Position . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinitialize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ ä¸Ģä¸ª åįķ è¯į ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ åįķ è¯į ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext Token (): ĠToken ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= ĠToken . transfer ( algorithm Collections . scan ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( set Discard Token . contains ( token . k Token )) Ġ{// ĠéľĢè¦ģ ä¸ ¢ å¼ĥ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġtoken ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® ä¸ ¢ å¼ĥ ç¬¦ åı· ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtype Ġ è¦ģ ä¸ ¢ å¼ĥ çļĦ ç¬¦ åı· ç±»åŀĭ ï¼Ī ä¸į å»ºè®® ä¸ ¢ å¼ĥ EOF ï¼Į åĽłä¸º éľĢè¦ģ çĶ¨æĿ¥ åĪ¤æĸŃ ç»ĵæĿŁ ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdiscard ( type : ĠTokenType ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Discard Token . add ( type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Filter ( alg : ĠI Token Algorithm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtoken Algorithm Ġ= Ġalg ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtransform () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . transform () ĊĠĠĠĠĠĠĠ Ġif Ġ( token Algorithm Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġtoken Algorithm !!. meta Hash [ data . current ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . meta Ġ= Ġtype ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ ï¼Ī æ·»åĬł ç»Ħä»¶ ï¼ī ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠRegex Exception Ġ æŃ£ åĪĻ è¡¨è¾¾å¼ı éĶĻè¯¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Regex Exception :: class ) ĊĠĠĠ Ġprivate Ġfun Ġinitialize () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ### Ġ ç®Ĺæ³ķ å®¹åĻ¨ ä¸Ń è£ħ è½½ è§£æŀĲ ç»Ħä»¶ æĺ¯ æľī ä¸Ģå®ļ é¡ºåºı çļĦ Ġ### ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ ç»Ħä»¶ è°ĥçĶ¨ åİŁ çĲĨ ï¼ļ ĊĠĠĠĠĠĠĠ Ġ// Ġæ¯ı ä¸ª ç»Ħä»¶ æľī èĩªå·±çļĦ æŃ£ åĪĻ è¡¨è¾¾å¼ı åĮ¹éħį åŃĹç¬¦ä¸² ĊĠĠĠĠĠĠĠ Ġ// Ġï¼Ī åı¯ éĢī ï¼ī æľī èĩªå·±çļĦ è¿ĩæ»¤ æĸ¹æ³ķ ï¼Į å¦Ĥ åŃĹç¬¦ä¸² ä¸ŃçļĦ è½¬ ä¹ī è¿ĩæ»¤ ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ è§£æŀĲ æĹ¶ ï¼Į åĪĨåĪ« æĮī åºı è°ĥçĶ¨ è§£æŀĲ ç»Ħä»¶ ï¼Į èĭ¥ ç»Ħä»¶ è§£æŀĲ å¤±è´¥ ï¼Į åĪĻ è°ĥçĶ¨ ä¸ĭ ä¸Ģ ç»Ħä»¶ ĊĠĠĠĠĠĠĠ Ġ// Ġ èĭ¥ æŁĲ ä¸Ģ ç»Ħä»¶ è§£æŀĲ æĪĲåĬŁ ï¼Į åį³ è¿ĶåĽŀ åĮ¹éħį ç»ĵæŀľ ĊĠĠĠĠĠĠĠ Ġ// Ġ èĭ¥ åħ¨éĥ¨ è§£æŀĲ å¤±è´¥ ï¼Į åĪĻ è°ĥçĶ¨ åĩº éĶĻ å¤ĦçĲĨ ï¼Ī é»ĺè®¤ä¸º åīį è¿Ľ ä¸Ģ åŃĹç¬¦ ï¼ī ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġalgorithm Collections . attach ( Whitespace Tokenizer ()) // Ġ ç©º çĻ½ åŃĹç¬¦ è§£æŀĲ ç»Ħä»¶ ĊĠĠĠĠĠĠĠ Ġalgorithm Collections . attach ( Comment Tokenizer ()) // Ġ æ³¨éĩĬ è§£æŀĲ ç»Ħä»¶ ĊĠĠĠĠĠĠĠ Ġalgorithm Collections . attach ( Terminal Tokenizer ()) // Ġ ç»Ī ç»ĵ ç¬¦ è§£æŀĲ ç»Ħä»¶ ĊĠĠĠĠĠĠĠ Ġalgorithm Collections . attach ( Non Terminal Tokenizer ()) // Ġ éĿŀ ç»Ī ç»ĵ ç¬¦ è§£æŀĲ ç»Ħä»¶ ĊĠĠĠĠĠĠĠ Ġalgorithm Collections . attach ( Operator Tokenizer ()) // Ġæĵ įä½ľ ç¬¦ è§£æŀĲ ç»Ħä»¶ ĊĠĠĠ Ġ} Ċ } Ċ