public Parameter(int lineNum, int colNum, int charIndex, VariableDeclaration varDec, ArgType argType) : base(lineNum, colNum, charIndex) { this.TypeMark = varDec.TypeMark; this.VariableName = varDec.VariableName; this.ArraySize = varDec.ArraySize; Type = argType; }
public VariableDeclaration ParseVariableDeclaration() { VariableDeclaration result; // Typemark Token typeMarkToken = Scanner.ConsumeTypemarkToken(); result = new VariableDeclaration(typeMarkToken.CodeLineNumber, typeMarkToken.CodeColumnNumber, typeMarkToken.CodeCharacterIndex); if (typeMarkToken.Type == Token.Types.BOOL) result.TypeMark = Lexer.TypeMarks.BOOL; else if (typeMarkToken.Type == Token.Types.FLOAT) result.TypeMark = Lexer.TypeMarks.FLOAT; else if (typeMarkToken.Type == Token.Types.INT) result.TypeMark = Lexer.TypeMarks.INT; else if (typeMarkToken.Type == Token.Types.STRING) result.TypeMark = Lexer.TypeMarks.STRING; else ErrorHandler.ParserError(Scanner, "Fatal error: unreachable code reached."); // Name result.VariableName = Scanner.ConsumeIdentifierToken().Text; // Optional array size if (NextTokenType == Token.Types.OPEN_BRACKET) { Scanner.ConsumeOperatorToken(Token.Types.OPEN_BRACKET); int arraySize = Scanner.ConsumeInt(); if (arraySize > 0) result.ArraySize = arraySize; else ErrorHandler.ParserError(Scanner, "Array size must at least 1."); Scanner.ConsumeOperatorToken(Token.Types.CLOSE_BRACKET); } return result; }