case QANSEL_INSTRUCTION_H: return "h";
case QANSEL_INSTRUCTION_S: return "s";
case QANSEL_INSTRUCTION_T: return "t";
+ case QANSEL_INSTRUCTION_SDG: return "sdg";
+ case QANSEL_INSTRUCTION_TDG: return "tdg";
case QANSEL_INSTRUCTION_RX: return "rx";
case QANSEL_INSTRUCTION_RY: return "ry";
case QANSEL_INSTRUCTION_RZ: return "rz";
case QANSEL_INSTRUCTION_Z: gate_ptr = PauliZ; break;
case QANSEL_INSTRUCTION_S: gate_ptr = PhaseS; break;
case QANSEL_INSTRUCTION_T: gate_ptr = PhaseT; break;
+ case QANSEL_INSTRUCTION_SDG: gate_ptr = PhaseSdg; break;
+ case QANSEL_INSTRUCTION_TDG: gate_ptr = PhaseTdg; break;
case QANSEL_INSTRUCTION_RX:
case QANSEL_INSTRUCTION_RY:
case QANSEL_INSTRUCTION_RZ:
case QANSEL_INSTRUCTION_Z: gate_ptr = PauliZ; break;
case QANSEL_INSTRUCTION_S: gate_ptr = PhaseS; break;
case QANSEL_INSTRUCTION_T: gate_ptr = PhaseT; break;
+ case QANSEL_INSTRUCTION_SDG: gate_ptr = PhaseSdg; break;
+ case QANSEL_INSTRUCTION_TDG: gate_ptr = PhaseTdg; break;
case QANSEL_INSTRUCTION_RX:
case QANSEL_INSTRUCTION_RY:
case QANSEL_INSTRUCTION_RZ:
case QANSEL_INSTRUCTION_H:
case QANSEL_INSTRUCTION_S:
case QANSEL_INSTRUCTION_T:
+ case QANSEL_INSTRUCTION_SDG:
+ case QANSEL_INSTRUCTION_TDG:
case QANSEL_INSTRUCTION_RX:
case QANSEL_INSTRUCTION_RY:
case QANSEL_INSTRUCTION_RZ:
case QANSEL_INSTRUCTION_H: return 1 + 1;
case QANSEL_INSTRUCTION_S: return 1 + 1;
case QANSEL_INSTRUCTION_T: return 1 + 1;
+ case QANSEL_INSTRUCTION_SDG: return 1 + 1;
+ case QANSEL_INSTRUCTION_TDG: return 1 + 1;
case QANSEL_INSTRUCTION_RX: return 1 + 1 + sizeof(float);
case QANSEL_INSTRUCTION_RY: return 1 + 1 + sizeof(float);
case QANSEL_INSTRUCTION_RZ: return 1 + 1 + sizeof(float);
case QANSEL_INSTRUCTION_H:
case QANSEL_INSTRUCTION_S:
case QANSEL_INSTRUCTION_T:
+ case QANSEL_INSTRUCTION_SDG:
+ case QANSEL_INSTRUCTION_TDG:
case QANSEL_INSTRUCTION_RX:
case QANSEL_INSTRUCTION_RY:
case QANSEL_INSTRUCTION_RZ:
case QANSEL_INSTRUCTION_H:
case QANSEL_INSTRUCTION_S:
case QANSEL_INSTRUCTION_T:
+ case QANSEL_INSTRUCTION_SDG:
+ case QANSEL_INSTRUCTION_TDG:
case QANSEL_INSTRUCTION_RX:
case QANSEL_INSTRUCTION_RY:
case QANSEL_INSTRUCTION_RZ:
case QANSEL_INSTRUCTION_H:
case QANSEL_INSTRUCTION_S:
case QANSEL_INSTRUCTION_T:
+ case QANSEL_INSTRUCTION_SDG:
+ case QANSEL_INSTRUCTION_TDG:
case QANSEL_INSTRUCTION_RX:
case QANSEL_INSTRUCTION_RY:
case QANSEL_INSTRUCTION_RZ:
case QANSEL_INSTRUCTION_H:
case QANSEL_INSTRUCTION_S:
case QANSEL_INSTRUCTION_T:
+ case QANSEL_INSTRUCTION_SDG:
+ case QANSEL_INSTRUCTION_TDG:
case QANSEL_INSTRUCTION_RX:
case QANSEL_INSTRUCTION_RY:
case QANSEL_INSTRUCTION_RZ:
case QANSEL_INSTRUCTION_H:
case QANSEL_INSTRUCTION_S:
case QANSEL_INSTRUCTION_T:
+ case QANSEL_INSTRUCTION_SDG:
+ case QANSEL_INSTRUCTION_TDG:
case QANSEL_INSTRUCTION_RX:
case QANSEL_INSTRUCTION_RY:
case QANSEL_INSTRUCTION_RZ:
else if (strcmp(tmp, "y") == 0) instr = QANSEL_INSTRUCTION_Y;
else if (strcmp(tmp, "z") == 0) instr = QANSEL_INSTRUCTION_Z;
else if (strcmp(tmp, "h") == 0) instr = QANSEL_INSTRUCTION_H;
+ else if (strcmp(tmp, "sdg") == 0) instr = QANSEL_INSTRUCTION_SDG;
+ else if (strcmp(tmp, "tdg") == 0) instr = QANSEL_INSTRUCTION_TDG;
else if (strcmp(tmp, "s") == 0) instr = QANSEL_INSTRUCTION_S;
else if (strcmp(tmp, "t") == 0) instr = QANSEL_INSTRUCTION_T;
}
case QANSEL_INSTRUCTION_H:
case QANSEL_INSTRUCTION_S:
case QANSEL_INSTRUCTION_T:
+ case QANSEL_INSTRUCTION_SDG:
+ case QANSEL_INSTRUCTION_TDG:
fprintf(stderr, "QAnsel on line %i: Invalid syntax.\n", line, a0);
return 0;
}
{
"^[ ]*qreg[ ]*q[ ]*\\[[ ]*([0-9][0-9]*)[ ]*\\][ ]*$",
"^[ ]*creg[ ]*c[ ]*\\[[ ]*([0-9][0-9]*)[ ]*\\][ ]*$",
- "^[ ]*(x|y|z|h|s|t|reset|barrier|born|density|print)[ ]*q[ ]*(\\[[ ]*([0-9][0-9]*)[ ]*\\][ ]*|)$",
+ "^[ ]*(x|y|z|h|sdg|tdg|s|t|reset|barrier|born|density|print)[ ]*q[ ]*(\\[[ ]*([0-9][0-9]*)[ ]*\\][ ]*|)$",
"^[ ]*(rx|ry|rz|u1)\\([ ]*([-/0-9PI.]*)[ ]*\\)[ ]*q[ ]*(\\[[ ]*([0-9][0-9]*)[ ]*\\][ ]*|)$",
"^[ ]*(u2)\\([ ]*([-/0-9PI.]*)[ ]*,[ ]*([-/0-9PI.]*)[ ]*\\)[ ]*q[ ]*(\\[[ ]*([0-9][0-9]*)[ ]*\\][ ]*|)$",
"^[ ]*(u|u3)\\([ ]*([-/0-9PI.]*)[ ]*,[ ]*([-/0-9PI.]*)[ ]*,[ ]*([-/0-9PI.]*)[ ]*\\)[ ]*q[ ]*(\\[[ ]*([0-9][0-9]*)[ ]*\\][ ]*|)$",
return 0;
}
if (!found)
- {
+ {
fprintf(stderr, "QAnsel on line %i: Invalid syntax.\n", associatedLines[i]);
free(binary);
return 0;
int qanselBuildFromSource(char* osource, unsigned char** binary, int* binarySize, QAnselContext* ctx)
{
- size_t source_len = strlen(osource);
- char* source = malloc(source_len);
+ size_t source_len = strlen(osource) + 1;
+ char* source = malloc(source_len + 1);
for (size_t i = 0; i < source_len; i++)
{
source[i] = osource[i] == '\t' ? ' ' : osource[i];
}
+ source[source_len - 1] = 0;
if (source_len > (INT_MAX/2))
{
fprintf(stderr, "QAnsel: Source file truncated.\n");