This question is too broad to put a whole answer in this box, but you probably want to start here:
http://bford.info/packrat/
"Parsing Expression Grammars" are an alternative to context-free grammars for specifying languages.
Fundamentally, a PEG grammar is a program for parsing the language... which makes it easier to understand for programmers, while a context-free grammar is a pattern for generating all the texts of a language. The translation from context-free grammar to parser is imperfect and difficult to understand, which makes CFGs difficult for beginners to use in practice.
The are many different algorithms for parsing PEG grammars, but they are all equivalent to the simple one: try the first alternative first, and if that doesn't work then try the next one.
That seems a lot easier, right? It mostly is, but there is still a lot of room for beginners to run into difficulties with PEG parsers. The difference is in how they handle ambiguity.
When you use a CFG-based parser generator, and your grammar is ambiguous, you get a bunch of errors and warnings that are tough to understand and fix.
When you use a PEG grammar that is ambiguous, everything looks fine, but if you don't actually understand that your grammar is ambiguous and why, you'll get parsing results that are different from what you expect.