!!!Batch is another derivative of the Windows Batch programming language, its wiki is here
Your challenge is to create an compiler/translator that reads a !!!Batch program and returns a Windows Batch program.
In !!!Batch each token braced in two question marks like ?!!!?
is converted to another ASCII character, like '?!?' -> 'a' and so on below, and after decoding the whole !!!Batch program it is a Windows batch program
'?!?', 'a'
'?!!?', 'b'
'?!!!?', 'c'
'?!!!!?', 'd'
'?!!!!!?', 'e'
'?!!!!!!?', 'f'
'?!!!!!!!?', 'g'
'?!!!!!!!!?', 'h'
'?!!!!!!!!!?', 'i'
'?!!!!!!!!!!?', 'j'
'?!!!!!!!!!!!?', 'k'
'?!!!!!!!!!!!!?', 'l'
'?!!!!!!!!!!!!!?', 'm'
'?!!!!!!!!!!!!!!?', 'n'
'?!!!!!!!!!!!!!!!?', 'o'
'?!!!!!!!!!!!!!!!!?', 'p'
'?!!!!!!!!!!!!!!!!!?', 'q'
'?!!!!!!!!!!!!!!!!!!?', 'r'
'?!!!!!!!!!!!!!!!!!!!?', 's'
'?!!!!!!!!!!!!!!!!!!!!?', 't'
'?!!!!!!!!!!!!!!!!!!!!!?', 'u'
'?!!!!!!!!!!!!!!!!!!!!!!?', 'v'
'?!!!!!!!!!!!!!!!!!!!!!!!?', 'w'
'?!!!!!!!!!!!!!!!!!!!!!!!!?', 'x'
'?!!!!!!!!!!!!!!!!!!!!!!!!!?', 'y'
'?!!!!!!!!!!!!!!!!!!!!!!!!!!?', 'z'
'?!-?', '&'
'?!!-?', ' '
'?!!!-?', '?'
'?!!!!-?', '!'
'?!!!!!-?', '%'
'?!!!!!!-?', '/'
'?!!!!!!!-?', '.'
'?!!!!!!!!-?', ':'
'?!!!!!!!!!-?', '0'
'?!!!!!!!!!!-?', '1'
'?!!!!!!!!!!!-?', '2'
'?!!!!!!!!!!!!-?', '3'
'?!!!!!!!!!!!!!-?', '4'
'?!!!!!!!!!!!!!!-?', '5'
'?!!!!!!!!!!!!!!!-?', '6'
'?!!!!!!!!!!!!!!!!-?', '7'
'?!!!!!!!!!!!!!!!!!-?', '8'
'?!!!!!!!!!!!!!!!!!!-?', '9'
'?!!!!!!!!!!!!!!!!!!!-?', '='
'?!!!!!!!!!!!!!!!!!!!!-?', '+'
'?!!!!!!!!!!!!!!!!!!!!!-?', '-'
'?!!!!!!!!!!!!!!!!!!!!!!-?', '<'
'?!!!!!!!!!!!!!!!!!!!!!!!-?', '>'
'?!!!!!!!!!!!!!!!!!!!!!!!!-?', '@'
'?!!!!!!!!!!!!!!!!!!!!!!!!!-?', '*'
'?!+?', 'A'
'?!!+?', 'B'
'?!!!+?', 'C'
'?!!!!+?', 'D'
'?!!!!!+?', 'E'
'?!!!!!!+?', 'F'
'?!!!!!!!+?', 'G'
'?!!!!!!!!+?', 'H'
'?!!!!!!!!!+?', 'I'
'?!!!!!!!!!!+?', 'J'
'?!!!!!!!!!!!+?', 'K'
'?!!!!!!!!!!!!+?', 'L'
'?!!!!!!!!!!!!!+?', 'M'
'?!!!!!!!!!!!!!!+?', 'N'
'?!!!!!!!!!!!!!!!+?', 'O'
'?!!!!!!!!!!!!!!!!+?', 'P'
'?!!!!!!!!!!!!!!!!!+?', 'Q'
'?!!!!!!!!!!!!!!!!!!+?', 'R'
'?!!!!!!!!!!!!!!!!!!!+?', 'S'
'?!!!!!!!!!!!!!!!!!!!!+?', 'T'
'?!!!!!!!!!!!!!!!!!!!!!+?', 'U'
'?!!!!!!!!!!!!!!!!!!!!!!+?', 'V'
'?!!!!!!!!!!!!!!!!!!!!!!!+?', 'W'
'?!!!!!!!!!!!!!!!!!!!!!!!!+?', 'X'
'?!!!!!!!!!!!!!!!!!!!!!!!!!+?', 'Y'
'?!!!!!!!!!!!!!!!!!!!!!!!!!!+?', 'Z'
Example Input:
?!!!!!!!!!!!!!!!!??!!!!!!!!!??!!!!!!!!!!!!!!??!!!!!!!??!!-??!!!!!!!??!!!!!!!!!!!!!!!??!!!!!!!!!!!!!!!??!!!!!!!??!!!!!!!!!!!!??!!!!!??!!!!!!!-??!!!??!!!!!!!!!!!!!!!??!!!!!!!!!!!!!?
Example output:
ping google.com
**How the output?
First break down into parts:
?!!!!!!!!!!!!!!!!? -> 'p'
?!!!!!!!!!? - 'i'
and so on
For more clarification, please visit the Wiki or ask me here.
Standard loopholes apply
This is code-golf, shortest code wins
An un-golfed sample compiler in python 2, from the Wiki page
s = open(raw_input("Run Script: "), 'r').read() s = s.replace('?!?', 'a') s = s.replace('?!!?', 'b') s = s.replace('?!!!?', 'c') s = s.replace('?!!!!?', 'd') s = s.replace('?!!!!!?', 'e') s = s.replace('?!!!!!!?', 'f') s = s.replace('?!!!!!!!?', 'g') s = s.replace('?!!!!!!!!?', 'h') s = s.replace('?!!!!!!!!!?', 'i') s = s.replace('?!!!!!!!!!!?', 'j') s = s.replace('?!!!!!!!!!!!?', 'k') s = s.replace('?!!!!!!!!!!!!?', 'l') s = s.replace('?!!!!!!!!!!!!!?', 'm') s = s.replace('?!!!!!!!!!!!!!!?', 'n') s = s.replace('?!!!!!!!!!!!!!!!?', 'o') s = s.replace('?!!!!!!!!!!!!!!!!?', 'p') s = s.replace('?!!!!!!!!!!!!!!!!!?', 'q') s = s.replace('?!!!!!!!!!!!!!!!!!!?', 'r') s = s.replace('?!!!!!!!!!!!!!!!!!!!?', 's') s = s.replace('?!!!!!!!!!!!!!!!!!!!!?', 't') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!?', 'u') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!!?', 'v') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!!!?', 'w') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!!!!?', 'x') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!!!!!?', 'y') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!!!!!!?', 'z') s = s.replace('?!-?', '&') s = s.replace('?!!-?', ' ') s = s.replace('?!!!-?', '?') s = s.replace('?!!!!-?', '!') s = s.replace('?!!!!!-?', '%') s = s.replace('?!!!!!!-?', '/') s = s.replace('?!!!!!!!-?', '.') s = s.replace('?!!!!!!!!-?', ':') s = s.replace('?!!!!!!!!!-?', '0') s = s.replace('?!!!!!!!!!!-?', '1') s = s.replace('?!!!!!!!!!!!-?', '2') s = s.replace('?!!!!!!!!!!!!-?', '3') s = s.replace('?!!!!!!!!!!!!!-?', '4') s = s.replace('?!!!!!!!!!!!!!!-?', '5') s = s.replace('?!!!!!!!!!!!!!!!-?', '6') s = s.replace('?!!!!!!!!!!!!!!!!-?', '7') s = s.replace('?!!!!!!!!!!!!!!!!!-?', '8') s = s.replace('?!!!!!!!!!!!!!!!!!!-?', '9') s = s.replace('?!!!!!!!!!!!!!!!!!!!-?', '=') s = s.replace('?!!!!!!!!!!!!!!!!!!!!-?', '+') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!-?', '-') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!!-?', '<') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!!!-?', '>') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!!!!-?', '@') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!!!!!-?', '*') s = s.replace('?!+?', 'A') s = s.replace('?!!+?', 'B') s = s.replace('?!!!+?', 'C') s = s.replace('?!!!!+?', 'D') s = s.replace('?!!!!!+?', 'E') s = s.replace('?!!!!!!+?', 'F') s = s.replace('?!!!!!!!+?', 'G') s = s.replace('?!!!!!!!!+?', 'H') s = s.replace('?!!!!!!!!!+?', 'I') s = s.replace('?!!!!!!!!!!+?', 'J') s = s.replace('?!!!!!!!!!!!+?', 'K') s = s.replace('?!!!!!!!!!!!!+?', 'L') s = s.replace('?!!!!!!!!!!!!!+?', 'M') s = s.replace('?!!!!!!!!!!!!!!+?', 'N') s = s.replace('?!!!!!!!!!!!!!!!+?', 'O') s = s.replace('?!!!!!!!!!!!!!!!!+?', 'P') s = s.replace('?!!!!!!!!!!!!!!!!!+?', 'Q') s = s.replace('?!!!!!!!!!!!!!!!!!!+?', 'R') s = s.replace('?!!!!!!!!!!!!!!!!!!!+?', 'S') s = s.replace('?!!!!!!!!!!!!!!!!!!!!+?', 'T') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!+?', 'U') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!!+?', 'V') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!!!+?', 'W') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!!!!+?', 'X') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!!!!!+?', 'Y') s = s.replace('?!!!!!!!!!!!!!!!!!!!!!!!!!!+?', 'Z') print s
?!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!-??!!!!!!!!!!!!!!!!!!!!!-??!!!-?
it should output?!!!!!!!!!!!!!!!!!!!!!!!!-?
but instead it outputs@
\$\endgroup\$