Esempio n. 1
0
 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;
 }
Esempio n. 2
0
        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;
        }