В классе лексером, то «положение» переменная определена как:Печать значение значения «» String.CharacterView.Index
class Lexer {
enum myError: Error {
case InvalidCharacter(Character,String.CharacterView.Index)
}
let input: String.CharacterView
var position: String.CharacterView.Index
init(input: String) {
self.input = input.characters
self.position = self.input.startIndex
}
В выходном коде:
func evaluate(input: String) {
print("Evaluating: (input)")
let lexer = Lexer(input: input)
do {
let tokens = try lexer.lex()
print("Lexer output: (tokens)")
let parser = Parser(tokens: tokens)
let result = try parser.parse()
print("Parser output: \(result)")
} catch Lexer.myError.InvalidCharacter(let character) {
print("Input contained an invalid character at index (lexer.position): (character)")
} catch Parser.myError.UnexpectedEndOfInput {
print("Unexpected end of input during parsing at index (lexer.position)")
} catch Parser.myError.InvalidToken(let token) {
print("Invalid token during parsing at index (lexer.position): (token)")
} catch { // catches any remaining errors to fulfill requirement of exhaustive handling
print("An error occurred: (error)")
}
} // end evaluate
evaluate(input: "10a + 3")
Результат это:
Оценка: 10a + 3 вход содержал недопустимый символ с индексом Index (основание: Swift.String.UnicodeScalarView.Index (позиция: 2), _countUTF16: 1): а
Я не могу найти способ распечатать значение как простое целое число. Продолжайте получать строку с ошибкой, которая даже включает значение, которое я пытаюсь получить.