When the end of the input stream of tokens is encountered and the parser is unable to parse the input token stream as a single complete Program, then a semicolon is automatically inserted at the end of the input stream.
a = b ++c // is transformed to: a = b; ++c;
x ++ y // is transformed to: x; ++y;
console.log("Hello, World") [1,2,3].join() // is transformed to: console.log("Hello, World")[(1, 2, 3)].join();
return "something"; // is transformed to return; "something";