Avatar
Kishikawa Katsumi 12/17/2018 3:37 PM
Parserの話、 効率とかを置いておくと、Swiftの場合は for character in source { switch character { case "{": tokens.append(.leftBrace(...)) case "(": tokens.append(.leftParen(...)) case "'": tokens.append(.singleQuote(...)) ... case " ". "\t", "\n": tokens.append(.whitespace(...)) ... default: tokens.append(.character(...)) } } ^ みたいにして先読みもバックトラックもせずに一気にループで一回 String[Token] にして、その後 [Token] をもう一度頭からループして今度は先読みしたり戻ったりをしながら意味のある構造に区切っていくのがシンプルじゃないかな。 [Token] だったら String を行ったり来たりするよりもよほど簡単。