ãã®å Žåããã£ã¬ã¯ãã£ãã®å€ãèšç®ããã³ã³ãã€ã«ãããŠããªãã³ãŒããã©ã°ã¡ã³ããåãåããã¯ãªãŒã³ãªã³ãŒããè§£æããå¿
èŠãããããã ããªããã»ããµãã£ã¬ã¯ãã£ããå«ãããã°ã©ãã³ã°èšèªã¯åŠçãå°é£ã§ãã éåžžã®ã³ãŒãã®è§£æäžã«ãã£ã¬ã¯ãã£ãåŠçãçºçããå ŽåããããŸãã ãã®èšäºã§ã¯ãObjective-Cèšèªã«é¢ããäž¡æ¹ã®ã¢ãããŒãã«ã€ããŠè©³ãã説æãããããã®å©ç¹ã𿬠ç¹ãæããã«ããŸãã ãããã®ã¢ãããŒãã¯ãçè«äžã ãã§ãªããSwiftifyãCodebeatãªã©ã®WebãµãŒãã¹ã§ãã§ã«å®è£
ãããå®éã«äœ¿çšãããŠããŸãã

Swiftifyã¯ããœãŒã¹ãã¡ã€ã«ãObjective-CããSwiftã«å€æããããã®WebãµãŒãã¹ã§ãã çŸæç¹ã§ã¯ããµãŒãã¹ã¯åäžãã¡ã€ã«ãšãããžã§ã¯ãå
šäœã®äž¡æ¹ã®åŠçããµããŒãããŠããŸãã ããã«ãããAppleã®æ°ããèšèªãåŠã³ããéçºè
ã®æéãç¯çŽã§ããŸãã

Codebeatã¯ãã³ãŒãã¡ããªãã¯ãèšç®ããObjective-Cãå«ãããŸããŸãªããã°ã©ãã³ã°èšèªãåæããããã®èªååãããã·ã¹ãã ã§ãã
å
容
ã¯ããã«
ããªããã»ããµãã£ã¬ã¯ãã£ãã¯ãã³ãŒãè§£æäžã«åŠçãããŸãã è§£æã®åºæ¬æŠå¿µã«ã€ããŠã¯èª¬æããŸããããããã§ã¯ãANTLRãšRoslynã䜿çšãããœãŒã¹ã³ãŒãã®çè«ãšè§£æã«é¢ããèšäºã®çšèªã䜿çšããŸãã äž¡æ¹ã®ãµãŒãã¹ã¯ãããŒãµãŒãžã§ãã¬ãŒã¿ãŒãšããŠANTLRã䜿çšããObjective-Cææ³ã¯ãå
¬åŒã®ANTLRææ³ãªããžããªïŒ Objective-Cææ³ ïŒã«é
眮ãããŸãã
ããªããã»ããµãã£ã¬ã¯ãã£ããåŠçãã2ã€ã®æ¹æ³ãç¹å®ããŸããã
- ã¯ã³ã¹ãããåŠç;
- 2段éåŠçã
ã¯ã³ã¹ãããåŠç
ã¯ã³ã¹ãããåŠçã«ã¯ãã¡ã€ã³èšèªã®ãã£ã¬ã¯ãã£ããšããŒã¯ã³ã®åæè§£æãå«ãŸããŸãã ANTLRã«ã¯ãããŸããŸãªã¿ã€ãã®ããŒã¯ã³ãåé¢ã§ãããã£ãã«ã¡ã«ããºã ããããŸããããšãã°ãã¡ã€ã³èšèªã®ããŒã¯ã³ãšé ãããããŒã¯ã³ïŒã³ã¡ã³ããšã¹ããŒã¹ïŒã§ãã ãã£ã¬ã¯ãã£ãããŒã¯ã³ã¯ãå¥ã®ååä»ããã€ãã«é
眮ããããšãã§ããŸãã
éåžžããã£ã¬ã¯ãã£ãããŒã¯ã³ã¯ãã³ãèšå·ïŒ #
ãŸãã¯ã·ã£ãŒãïŒã§å§ãŸããæ¹è¡æåïŒ \r\n
ïŒã§çµãããŸãã ãããã£ãŠããã®ãããªããŒã¯ã³ããã£ããã£ããã«ã¯ãç°ãªãããŒã¯ã³èªèã¢ãŒãã䜿çšããããšããå§ãããŸãã ANTLRã¯ãã®ãããªã¢ãŒãããµããŒãããŸãããããã¯æ¬¡ã®ããã«èª¬æããmode DIRECTIVE_MODE;
ã ããªããã»ããµãã£ã¬ã¯ãã£ãã®ã¢ãŒãã»ã¯ã·ã§ã³ãæã€ã¬ã¯ãµãŒã®ãã©ã°ã¡ã³ãã¯æ¬¡ã®ãšããã§ãã
SHARP: '#' -> channel(DIRECTIVE_CHANNEL), mode(DIRECTIVE_MODE); mode DIRECTIVE_MODE; DIRECTIVE_IMPORT: 'import' [ \t]+ -> channel(DIRECTIVE_CHANNEL), mode(DIRECTIVE_TEXT_MODE); DIRECTIVE_INCLUDE: 'include' [ \t]+ -> channel(DIRECTIVE_CHANNEL), mode(DIRECTIVE_TEXT_MODE); DIRECTIVE_PRAGMA: 'pragma' -> channel(DIRECTIVE_CHANNEL), mode(DIRECTIVE_TEXT_MODE);
Objective-Cããªããã»ããµãã£ã¬ã¯ãã£ãã®äžéšã¯ãç¹å®ã®Swiftã³ãŒãã«å€æãããŸãïŒããšãã°ã letæ§æã䜿çšïŒãäžéšã¯å€æŽãããã«æ®ããæ®ãã¯ã³ã¡ã³ãã«å€æãããŸãã æ¬¡ã®è¡šã«äŸã瀺ããŸãã
Objective-c | ã¹ã€ãã |
---|
#define SERVICE_UUID @ "c381de0d-32bb-8224-c540-e8ba9a620152" | let SERVICE_UUID = "c381de0d-32bb-8224-c540-e8ba9a620152" |
#define ApplicationDelegate ((AppDelegate *)[UIApplication sharedApplication].delegate) | let ApplicationDelegate = (UIApplication.shared.delegate as? AppDelegate) |
#define DEGREES_TO_RADIANS(degrees) (M_PI * (degrees) / 180) | func DEGREES_TO_RADIANS(degrees: Double) -> Double { return (.pi * degrees)/180; } |
#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) | #if __IPHONE_OS_VERSION_MIN_REQUIRED |
#pragma mark - Directive between comments. | // MARK: - Directive between comments. |
ã³ã¡ã³ãã¯ãçµæã®Swiftã³ãŒãã®æ£ããäœçœ®ã«ãé
眮ããå¿
èŠããããŸãã ãã ããæ¢ã«è¿°ã¹ãããã«ãé衚瀺ããŒã¯ã³èªäœã¯è§£æããªãŒã«ãããŸããã
è§£æããªãŒã«é衚瀺ã®ããŒã¯ã³ãå«ãããšã©ããªããŸããïŒå®éãé ãããããŒã¯ã³ã¯ææ³ã«å«ããããšãã§ããŸããããã®ãããè€éãããŠåé·ã«ãªããŸãã COMMENT
ããã³DIRECTIVE
ããŒã¯ã³ã¯ãéèŠãªããŒã¯ã³ã®éã®åã«ãŒã«ã«å«ãŸããŸãã
declaration: property COMMENT* COLON COMMENT* expr COMMENT* prio?;
ãããã£ãŠããã®ã¢ãããŒããããã«å¿ããããšãã§ããŸãã
質åãçºçããŸãïŒè§£æããªãŒãèµ°æ»ãããšãã«ãã©ã®ããã«ããŠãã®ãããªããŒã¯ã³ãæœåºã§ããŸããïŒ
倿ããããã«ããã®åé¡ã解決ããããã®ãªãã·ã§ã³ãããã€ããããŸãããã®ãªãã·ã§ã³ã§ã¯ãé衚瀺ã®ããŒã¯ã³ãè§£æããªãŒã®éçµç«¯ããŒããŸãã¯çµç«¯ïŒçµç«¯ïŒããŒãã«é¢é£ä»ããããŸãã
é ãããããŒã¯ã³ãšéçµç«¯ããŒãã®é¢é£ä»ã
ãã®æ¹æ³ã¯ãæ¯èŒçå€ã2012 ANTLR 3ã®èšäºããåŒçšãããŠããŸãã
ãã®å Žåããã¹ãŠã®é衚瀺ããŒã¯ã³ã¯æ¬¡ã®ã¿ã€ãã®ã»ããã«åå²ãããŸãã
- åã®ããŒã¯ã³ïŒ å
è¡ ïŒ;
- åŸç¶ã®ããŒã¯ã³ïŒ ä»¥äž ïŒ;
- å€ç«ããŒã¯ã³ã
ãããã®ã¿ã€ãã®æå³ãããããçè§£ããã«ã¯ãäžæ¬åŒ§ãçµç«¯æåã§ããã statement
ãæ«å°Ÿã«ã»ãã³ãã³ãå«ãä»»æã®åŒã§ãããšããåçŽãªã«ãŒã«ãèãa = b;
äŸãã°ã a = b;
ã
root : '{' statement* '}' ;
ãã®å Žåãæ¬¡ã®ã³ãŒããã©ã°ã¡ã³ãã®ãã¹ãŠã®ã³ã¡ã³ããå
é ã®ãªã¹ãã«å«ãŸããŸãã ãã¡ã€ã«å
ã®æåã®ããŒã¯ã³ããŸãã¯è§£æããªãŒã®éçµç«¯ããŒãã®åã®ããŒã¯ã³ã
'{' a = b; b = c; '}'
ã³ã¡ã³ãããã¡ã€ã«ã®æåŸã®å ŽåããŸãã¯ã³ã¡ã³ãããã¹ãŠã®statement
åŸã«æ¿å
¥ãããå ŽåïŒãã®åŸã«ç«¯æ«æ¬åŒ§ãç¶ãïŒãã³ã¡ã³ãã¯æ¬¡ã®ãªã¹ãã«åé¡ãããŸãã
'{' a = b; b = c; '}'
ãã®ä»ã®ã³ã¡ã³ãã¯ãã¹ãŠå€ç«ãªã¹ãã«å«ãŸããŸãïŒãããã¯åºæ¬çã«ããŒã¯ã³ã§åºåããããã®å Žåã¯äžæ¬åŒ§ã§å²ãŸããŠããŸãïŒã
'{' '}'
ãã®åå²ã®ãããã§ããã¹ãŠã®é ãããããŒã¯ã³ã¯äžè¬çãªVisit
ã¡ãœããã§åŠçã§ããŸãã ãã®ã¡ãœããã¯ãŸã Swiftifyã§äœ¿çšãããŠããŸãããéåžžã«è€éã§ãããããã䜿çšããŠå¿ å®åºŠè§£æããªãŒãæ§ç¯ããã®ã¯åé¡ã§ãã ããªãŒã®ä¿¡é Œæ§ã¯ãã¹ããŒã¹ãã³ã¡ã³ããããªããã»ããµãã£ã¬ã¯ãã£ããªã©ãæåããæåãžã®ã³ãŒãã«å€æã§ãããšããäºå®ã«ãããŸãã å°æ¥çã«ã¯ãããªããã»ããµãã£ã¬ã¯ãã£ããšä»ã®é ãããããŒã¯ã³ãåŠçããæ¹æ³ã®äœ¿çšã«åãæ¿ããäºå®ã§ããããã«ã€ããŠã¯ã以äžã§èª¬æããŸãã
é ãããããŒã¯ã³ãšã¿ãŒããã«ããŒãã®é¢é£ä»ã
ãã®å Žåãé衚瀺ããŒã¯ã³ã¯ç¹å®ã®éèŠãªããŒã¯ã³ã«é¢é£ä»ããããŸãã åæã«ãé ãããããŒã¯ã³ã¯å
é ïŒLeadingTriviaïŒãšæ«å°Ÿ ïŒTrailingTriviaïŒã«ãªããŸãã ãã®ã¡ãœããã¯çŸåšãRoslynããŒãµãŒïŒCïŒããã³Visual BasicçšïŒã§äœ¿çšãããŠããããã®äžã®é ãããããŒã¯ã³ã¯ããªãã¢ïŒããªãã¢ïŒãšåŒã°ããŠããŸãã
éèŠãªããŒã¯ã³ããæ¬¡ã®éèŠãªããŒã¯ã³ãŸã§ã®åãè¡ã®ãã¹ãŠã®ããªãã¢ã¯ãåŸç¶ã®ããŒã¯ã³ã®ã»ããã«åé¡ãããŸãã ä»ã®ãã¹ãŠã®é衚瀺ããŒã¯ã³ã¯ãå€ãã®å
è¡ããŒã¯ã³ã«åé¡ãããæ¬¡ã®éèŠãªããŒã¯ã³ã«é¢é£ä»ããããŸãã æåã®éèŠãªããŒã¯ã³ã«ã¯ããã¡ã€ã«ã®æåã®ããªãã¢ãå«ãŸããŠããŸãã ãã¡ã€ã«ãéããé ãããŒã¯ã³ã¯ãé·ãããŒãã®æåŸã®ç¹å¥ãªãã¡ã€ã«ã®çµããããŒã¯ã³ã«é¢é£ä»ããããŸãã ããªãŒã¿ã€ããšããªãã¢ã®è§£æã®è©³çްã«ã€ããŠã¯ã Roslynã®å
¬åŒããã¥ã¡ã³ããåç
§ããŠãã ããã
ANTLRã§ã¯ãã€ã³ããã¯ã¹iã®ããŒã¯ã³ã«å¯ŸããŠãå·ŠãŸãã¯å³ããç¹å®ã®ãã£ãã«ãããã¹ãŠã®ããŒã¯ã³ãè¿ãã¡ãœããããããŸãïŒ getHiddenTokensToLeft(int tokenIndex, int channel)
ã getHiddenTokensToRight(int tokenIndex, int channel)
ã ãããã£ãŠãANTLRã«åºã¥ããããŒãµãŒããRoslynæ§æè§£æããªãŒãšåæ§ã®ä¿¡é Œã§ããæ§æè§£æããªãŒã«ããããšãã§ããŸãã
ç¡èŠããããã¯ã
ãã¯ãã¯åäžæ®µéã®åŠçäžã«Objective-Cã³ãŒããã©ã°ã¡ã³ãã«çœ®ãæããããªããããç¡èŠããããç¬ç«ããåé¢ãã£ãã«ã«é
眮ãããã§ããŸãã ããã«ãããéåžžã®Objective-Cã³ãŒãã®è§£æã®åé¡ããææ³ããŒãã«ãã¯ããå«ããå¿
èŠããªããªããŸãïŒã³ã¡ã³ããšåæ§ïŒã ããã¯ã NS_ASSUME_NONNULL_BEGIN
ã NS_AVAILABLE_IOS(3_0)
ãªã©ã®ããã©ã«ããã¯ãã«ãé©çšãããŸãã
NS_ASSUME_NONNULL_BEGIN : 'NS_ASSUME_NONNULL_BEGIN' ~[\r\n]* -> channel(IGNORED_MACROS); IOS_SUFFIX : [_A-Z]+ '_IOS(' ~')'+ ')' -> channel(IGNORED_MACROS);
äºæ®µéåŠç
2段éåŠçã¢ã«ãŽãªãºã ã¯ã次ã®äžé£ã®ã¹ããããšããŠè¡šãããšãã§ããŸãã
- ããªããã»ããµãã£ã¬ã¯ãã£ãã®ããŒã¯ã³åãšã³ãŒãè§£æã ãã®ã¹ãããã§ã®éåžžã®ã³ãŒããã©ã°ã¡ã³ãã¯ããã¬ãŒã³ããã¹ããšããŠèªèãããŸãã
- æ¡ä»¶ãã£ã¬ã¯ãã£ãã®èšç®ïŒ
#if
ã #if
#elif
ã #if
#else
ïŒããã³ã³ã³ãã€ã«ãããã³ãŒããããã¯ã®å®çŸ©ã - ã³ã³ãã€ã«ãããã³ãŒããããã¯ã®é©åãªå Žæã§ã®
#define
ãã£ã¬ã¯ãã£ãã®å€ã®èšç®ãšçœ®æã - ãœãŒã¹ã®ãã£ã¬ã¯ãã£ããã¹ããŒã¹æåã«çœ®ãæããŸãïŒãœãŒã¹ã³ãŒãå
ã®ããŒã¯ã³ã®æ£ããäœçœ®ãä¿æããããïŒã
- åé€ããããã£ã¬ã¯ãã£ãã䜿çšããçµæã®ããã¹ãã®ããŒã¯ã³åãšè§£æã
3çªç®ã®ã¹ãããã¯ã¹ãããã§ããå°ãªããšãäžéšã¯ãã¯ããçŽæ¥ææ³ã«å«ããããšãã§ããŸãã ãã ãããã®æ¹æ³ã¯ãã·ã³ã°ã«ã¹ããŒãžåŠçãããå®è£
ãããã«å°é£ã§ãããã®å Žåãæåã®ã¹ãããã®åŸãéåžžã®ãœãŒã¹ã³ãŒãã®æ£ããããŒã¯ã³äœçœ®ãç¶æããå¿
èŠãããå Žåã¯ãããªããã»ããµãã£ã¬ã¯ãã£ãã®ã³ãŒããã¹ããŒã¹ã«çœ®ãæããå¿
èŠããããŸãã ããã«ãããããããããªããã»ããµãã£ã¬ã¯ãã£ããåŠçããããã®ãã®ã¢ã«ãŽãªãºã ãäžåºŠã«å®è£
ãããçŸåšã¯Codebeatã§äœ¿çšãããŠããŸãã ææ³ã¯ã蚪åè
åŠçããªããã»ããµãã£ã¬ã¯ãã£ããšå
±ã«GitHubã«ã¢ããããŒããããŸã ã ãã®æ¹æ³ã®ãã1ã€ã®å©ç¹ã¯ãããæ§é åããã圢åŒã§ææ³ã衚瀺ã§ããããšã§ãã
次ã®ã³ã³ããŒãã³ãã¯ã2段éåŠçã«äœ¿çšãããŸãã
- ããªããã»ããµã¬ã¯ãµãŒ;
- ããªããã»ããµããŒãµãŒã
- ããªããã»ããµ;
- åå¥è§£æåš;
- ããŒãµãŒã
ã¬ã¯ãµãŒã¯ããœãŒã¹ã³ãŒãã®ã·ã³ãã«ãããŒã¯ã³ãŸãã¯ããŒã¯ã³ãšåŒã°ããæå³ã®ããã·ãŒã±ã³ã¹ã«ã°ã«ãŒãåããããšãæãåºããŠãã ããã ãããŠã ããŒãµãŒã¯ãããŒã¯ã³ã¹ããªãŒã ããè§£æããªãŒãšåŒã°ããæ¥ç¶ãããããªãŒã®ãããªæ§é ãæ§ç¯ããŸãã 蚪åè
-åããªãŒããŒãã®åŠçããžãã¯ãåå¥ã®ã¡ãœããã«é
眮ã§ãããã¶ã€ã³ãã¿ãŒã³ã
ããªããã»ããµã¬ã¯ãµãŒ
ããªããã»ããµãã£ã¬ã¯ãã£ããšéåžžã®Objective-Cã³ãŒãããããŒã¯ã³ãåé¢ããã¬ã¯ãµãŒã DEFAULT_MODE
éåžžã®ã³ãŒãããŒã¯ã³ã«äœ¿çšããã DIRECTIVE_MODE
ã¯ãã£ã¬ã¯ãã£ãã³ãŒãã«äœ¿çšãããŸãã 以äžã¯DEFAULT_MODE
ããã®ããŒã¯ã³ã§ãã
SHARP: '#' -> mode(DIRECTIVE_MODE); COMMENT: '/*' .*? '*/' -> type(CODE); LINE_COMMENT: '//' ~[\r\n]* -> type(CODE); SLASH: '/' -> type(CODE); CHARACTER_LITERAL: '\'' (EscapeSequence | ~('\''|'\\')) '\'' -> type(CODE); QUOTE_STRING: '\'' (EscapeSequence | ~('\''|'\\'))* '\'' -> type(CODE); STRING: StringFragment -> type(CODE); CODE: ~[#'"/]+;
ãã®ã³ãŒãã®æçãèŠããšã远å ã®ããŒã¯ã³ïŒ COMMENT
ã QUOTE_STRING
ãªã©ïŒã®å¿
èŠæ§ã«é¢ãã質åãçºçããå ŽåããããŸãããObjective-Cã³ãŒãã®å Žåã䜿çšãããããŒã¯ã³ã¯CODE
ã®ã¿ã§ãã å®éã«ã¯ã #
æåã¯éåžžã®è¡ãšã³ã¡ã³ãå
ã«é ãããšãã§ããŸãã ãããã£ãŠããã®ãããªããŒã¯ã³ã¯åå¥ã«å²ãåœãŠãå¿
èŠããããŸãã ãã ãããããã®ã¿ã€ãã¯ãŸã CODE
ã«å€æŽãããŠãããããŒã¯ã³ãåé¢ããããã®ããªããã»ããµããŒãµãŒã«ã¯æ¬¡ã®ã«ãŒã«ãååšãããããããã¯åé¡ã§ã¯ãããŸããã
text : code | SHARP directive (NEW_LINE | EOF) ; code : CODE+ ;
ããªããã»ããµããŒãµãŒ
Objective-Cã³ãŒãããŒã¯ã³ãåé¢ããããªããã»ããµãã£ã¬ã¯ãã£ãããŒã¯ã³ãåŠçããããŒãµãŒã çµæã®è§£æããªãŒã¯ãããªããã»ããµã«æž¡ãããŸãã
ããªããã»ããµ
ããªããã»ããµãã£ã¬ã¯ãã£ãã®å€ãèšç®ãã蚪åè
ã åããŒããã©ããŒãµã«ã¡ãœããã¯æååãè¿ããŸãã èšç®ããããã£ã¬ã¯ãã£ãå€ãtrue
å ŽåãåŸç¶ã®Objective-Cã³ãŒããã©ã°ã¡ã³ããè¿ãããŸãã ãã以å€ã®å ŽåãObjective-Cã³ãŒãã¯ã¹ããŒã¹ã«çœ®ãæããããŸãã åè¿°ã®ããã«ãããã¯ã¡ã€ã³ã³ãŒãã®ããŒã¯ã³ã®æ£ããäœçœ®ãç¶æããããã«å¿
èŠã§ãã çè§£ã容æã«ããããã«ã次ã®Objective-Cã³ãŒãã¹ããããã®äŸã瀺ããŸãã
BOOL trueFlag = #if DEBUG YES #else arc4random_uniform(100) > 95 ? YES : NO #endif ;
ãã®ãã©ã°ã¡ã³ãã¯ã2段éåŠçã䜿çšããŠãæå®ãããæ¡ä»¶ã·ã³ãã«DEBUG
ã䜿çšããŠæ¬¡ã®Objective-Cã³ãŒãã«å€æãããŸãã
BOOL trueFlag = YES ;
ãã¹ãŠã®ãã£ã¬ã¯ãã£ããšã³ã³ãã€ã«ãããŠããªãã³ãŒããã¹ããŒã¹ã«å€ãã£ãããšã«æ³šæãã䟡å€ããããŸãã ãã£ã¬ã¯ãã£ãã¯ãã¹ãããããšãã§ããŸãïŒ
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000 #define MBLabelAlignmentCenter NSTextAlignmentCenter #else #define MBLabelAlignmentCenter UITextAlignmentCenter #endif
ã¬ã¯ãµãŒ
ããªããã»ããµãã£ã¬ã¯ãã£ããèªèããããŒã¯ã³ãªãã®éåžžã®Objective-Cã¬ã¯ãµãŒã ãœãŒã¹ãã¡ã€ã«ã«ãã£ã¬ã¯ãã£ãããªãå Žåãåãå
ã®ãã¡ã€ã«ãå
¥åãå
¥åããŸãã
ããŒãµãŒ
éåžžã®Objective-Cã³ãŒãã®ããŒãµãŒã ãã®ããŒãµãŒã®ææ³ã¯ãã¯ã³ã¹ãããåŠçã®ããŒãµãŒã®ææ³ãšäžèŽããŠããŸãã
ãã®ä»ã®åŠçæ¹æ³
ããªããã»ããµãã£ã¬ã¯ãã£ããåŠçããæ¹æ³ã¯ä»ã«ããããŸããããšãã°ã lexlessããŒãµãŒã䜿çšã§ããŸãã çè«çã«ã¯ããã®ãããªããŒãµãŒã§ã¯ã1段éåŠçãš2段éåŠçã®äž¡æ¹ã®å©ç¹ãçµã¿åãããããšãã§ããŸããã€ãŸããããŒãµãŒã¯ãã£ã¬ã¯ãã£ãã®å€ãèšç®ããæªã³ã³ãã€ã«ã®ã³ãŒããããã¯ã1åã®ãã¹ã§æ±ºå®ããŸãã ãã ãããã®ãããªããŒãµãŒã«ã¯æ¬ ç¹ããããŸããçè§£ããã³ãããã°ãããå°é£ã§ãã
ANTLRã¯ããŒã¯ã³åããã»ã¹ã«éåžžã«é¢ä¿ããŠããããããã®ãããªãœãªã¥ãŒã·ã§ã³ã¯èæ
®ãããŸããã§ããã ãã ããã¬ã¯ãµãŒä»¥å€ã®ææ³ãäœæããå¯èœæ§ã¯ãã§ã«ååšããŠãããå°æ¥ããã«éçºãããäºå®ã§ãïŒ èª¬æãåç
§ïŒã
ãããã«
ãã®èšäºã§ã¯ãCã©ã€ã¯ãªèšèªã®è§£æã«äœ¿çšã§ããããªããã»ããµãã£ã¬ã¯ãã£ããåŠçããæ¹æ³ãæ€èšããŸããã ãããã®ã¢ãããŒãã¯ãObjective-Cã³ãŒããåŠçããããã«æ¢ã«å®è£
ãããŠãããSwiftifyãCodebeatãªã©ã®åçšãµãŒãã¹ã§äœ¿çšãããŠããŸãã 2段éåŠçã®ããŒãµãŒã¯ããšã©ãŒã®ãªããã¡ã€ã«ã®æ°ãå
šäœã®95ïŒ
ãè¶
ãã20ã®ãããžã§ã¯ãã§ãã¹ããããŠããŸãã ããã«ãã¯ã³ã¹ãããåŠçã¯CïŒã®è§£æã«ãå®è£
ãããŠããããªãŒãã³ãœãŒã¹ïŒ CïŒgrammarã§å©çšã§ããŸãã
Swiftifyã¯ãããªããã»ããµãã£ã¬ã¯ãã£ãã®ã¯ã³ã¹ãããåŠçã䜿çšããŸããããã¯ãè§£æãšã©ãŒã®å¯èœæ§ãããã«ãããããããããªããã»ããµãå®è¡ããã®ã§ã¯ãªããããªããã»ããµãã£ã¬ã¯ãã£ãã察å¿ããSwiftèšèªæ§æã«å€æããããã§ãã ããšãã°ãObjective-Cã®#define
ãã£ã¬ã¯ãã£ãã¯ãäžè¬çã«ã°ããŒãã«å®æ°ãšãã¯ãã宣èšããããã«äœ¿çšãããŸãã Swiftã§ã¯ã宿°ïŒ let ïŒãšé¢æ°ïŒ func ïŒãåãç®çã§äœ¿çšãããŸãã