package circdesignagui.util;
import java.util.Scanner;
import circdesigna.DomainDefinitions;
import circdesigna.config.CircDesigNAConfig;
public class DomainBNFToDotParens {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String lineEnd = "\n";
StringBuffer DomainDefs = new StringBuffer();
StringBuffer Molecule = new StringBuffer();
while(in.hasNextLine()){
String line = in.nextLine();
if (line.startsWith("[")){
Molecule.append(line);
break;
} else {
DomainDefs.append(line);
DomainDefs.append(lineEnd);
}
}
CircDesigNAConfig config = new CircDesigNAConfig();
DomainDefinitions dsd = new DomainDefinitions(config);
DomainDefinitions.readDomainDefs(DomainDefs.toString(), dsd);
for(String q : Molecule.toString().split("(\\||}|\\[)+")){
if (q.length()>0){
StringBuffer namePart = new StringBuffer();
boolean upParen = false;
boolean downParen = false;
for(char d : q.toCharArray()){
if (d == '('){
upParen = true;
} else
if (d == ')'){
downParen = true;
} else
if (d == '.' || d == '*'){
} else {
namePart.append(d);
}
}
//System.out.println(namePart);
final Integer i = dsd.getDomainFromName(namePart.toString());
//System.out.println(i);
int num = dsd.domainLengths[i];
for(int k = 0; k < num; k++){
if (upParen){
System.out.print("(");
} else if (downParen){
System.out.print(")");
} else {
System.out.print(".");
}
}
}
}
}
}