// Path: language/src/com/infdot/analysis/language/expression/Identifier.java
// public class Identifier extends Expression {
// 	private String name;
// 
// 	public Identifier(String name) {
// 		this.name = name;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return name;
// 	}
// 
// 	@Override
// 	public void collectVariables(Set<Identifier> variables) {
// 		variables.add(this);
// 	}
// 
// 	@Override
// 	public <V> V visit(AbstractExpressionVisitor<V> visitor) {
// 		return visitor.visitIdentifier(this);
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 	
// }
// 
// Path: language/src/com/infdot/analysis/language/statement/visitor/AbstractStatementVisitor.java
// public abstract class AbstractStatementVisitor<T> {
// 
// 	public abstract T visitAssignment(Assignment assignment);
// 	
// 	public abstract T visitCompound(Compound compound, T s1, T s2);
// 	
// 	public abstract T visitDeclaration(Declaration declaration);
// 	
// 	public abstract T visitIf(If ifStatement, T body);
// 	
// 	public abstract T visitOutput(Output output);
// 	
// 	public abstract T visitWhile(While whileStatement, T body);
// }


import java.util.ArrayList;
import java.util.List;
import com.infdot.analysis.language.expression.Identifier;
import com.infdot.analysis.language.statement.visitor.AbstractStatementVisitor;
package com.infdot.analysis.language.statement;



public class Declaration implements Statement {
	private List<Identifier> identifiers;
	
	public Declaration(String... strings) {
		this.identifiers = new ArrayList<Identifier>();
// Path: language/src/com/infdot/analysis/language/expression/Identifier.java
// public class Identifier extends Expression {
// 	private String name;
// 
// 	public Identifier(String name) {
// 		this.name = name;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return name;
// 	}
// 
// 	@Override
// 	public void collectVariables(Set<Identifier> variables) {
// 		variables.add(this);
// 	}
// 
// 	@Override
// 	public <V> V visit(AbstractExpressionVisitor<V> visitor) {
// 		return visitor.visitIdentifier(this);
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 	
// }
// 
// Path: language/src/com/infdot/analysis/language/statement/visitor/AbstractStatementVisitor.java
// public abstract class AbstractStatementVisitor<T> {
// 
// 	public abstract T visitAssignment(Assignment assignment);
// 	
// 	public abstract T visitCompound(Compound compound, T s1, T s2);
// 	
// 	public abstract T visitDeclaration(Declaration declaration);
// 	
// 	public abstract T visitIf(If ifStatement, T body);
// 	
// 	public abstract T visitOutput(Output output);
// 	
// 	public abstract T visitWhile(While whileStatement, T body);
// }


// Path: language/src/com/infdot/analysis/language/statement/Declaration.java
import java.util.ArrayList;
import java.util.List;
import com.infdot.analysis.language.expression.Identifier;
import com.infdot.analysis.language.statement.visitor.AbstractStatementVisitor;

package com.infdot.analysis.language.statement;



public class Declaration implements Statement {
	private List<Identifier> identifiers;
	
	public Declaration(String... strings) {
		this.identifiers = new ArrayList<Identifier>();
		for (String string : strings) {