LeafSourceParser.java

package edu.udel.cis.vsl.tass.ast.parser;

import edu.udel.cis.vsl.tass.util.Source;

class LeafSourceParser extends LeafParser {

    public LeafSourceParser(NodeTypes nodeTypes, RefMappers refMappers) {
        super(nodeTypes,refMappers);
    }
    
    @Override
    public NodeParserIF makeInstance() {
        return new LeafSourceParser(nodeTypes, refMappers);
    }

    @Override
    public SourceEltWrapper node() {
        String region = this.attrs.getValue("","region");
        String fileRef = this.attrs.getValue("","fileRef");
        
        assert region != null;
        assert fileRef != null;
        
        String[] regionElements = region.split(",");
        assert regionElements.length == 4;
        
        int intFileRef, startColumn, startLine, endColumn, endLine;
        try {
            intFileRef = Integer.valueOf(fileRef);
            startLine = Integer.valueOf(regionElements[0]);
            startColumn = Integer.valueOf(regionElements[1]);
            endLine = Integer.valueOf(regionElements[2]);
            endColumn = Integer.valueOf(regionElements[3]);
        } catch (NumberFormatException e) {
            throw new ParserException("Malformed source attribute");
        }
        SourceEltWrapper retVal =
            new SourceEltWrapper(startColumn,startLine,endColumn,endLine);

        refMappers.addRef(retVal,intFileRef,SourceEltWrapper.FILE_FIELD);

        return retVal;
    }

}