Simply, a Smart Contract is a program that runs on Ethereum. Most of these Smart Contracts are financially focused: they can be cryptocurrencies, trading systems, lending protocols, and more.
ERC-20 is a standard that the community has adopted for tokens on the Ethereum Network. These tokens themselves are just Smart Contracts running on the network. You may hear someone say that you have Token XYZ "in your wallet," but Token XYZ is just a computer program. What's really happening is that the Smart Contract for Token XYZ has a record saying what each wallet balance is.
A decentralized app (dApp) is just another name for a smart contract. Usually these would refer to decentralized exchanges, lending pools, or other programs.
Smart Contracts are written in a language called Solidity. Solidity runs on the Ethereum Virtual Machine (EVM), which is distributed all over the world on miners' computers.