1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package parser.elements.declarations 18 19 import lexer.Token 20 import lexer.TokenGrammar 21 22 class TypedefDeclarationParser(iter: ListIterator<Token>, var shouldResetIterator: Boolean = false) : AbstractDeclarationParser(iter) { 23 lateinit override var name: String //synonym 24 lateinit var type: String //type declarationParser 25 26 init { 27 parseTokens(scanTokens(iter)) 28 if (shouldResetIterator) resetIterator(iter) 29 } 30 parseTokensnull31 override fun parseTokens(tokens: List<Token>) { 32 assert(tokens.isNotEmpty()) 33 assert(tokens.first().identifier == TokenGrammar.TYPEDEF) 34 assert(tokens.last().identifier == TokenGrammar.SEMICOLON) 35 36 this.name = tokens.get(tokens.size - 2).value 37 this.type = tokens.subList(1, tokens.size - 2).map { it.value }.joinToString("") 38 } 39 }