Well, as it says on the box, FreeCC is a parser generator. And unless it is horribly misnamed, this is something you can use to generate a parser. A correct answer, to be sure, but not terribly informative. (Or, to put it another way, if that is a sufficient answer for you, it means that you already knew the answer to the question.) If you tell someone that a bazbat demunger is something you use to demunge a bazbat, that can only elicit further questions, such as: "WTF is a bazbat?" and: "Why, pray tell, would I want to demunge one?" So, first things first: it seems that we should make clear what a parser is. Now, maybe most readers already know that, but many will not be so clear on why they should want to use a tool like FreeCC to generate a parser, rather than just directly coding it in Java, for example. So, in this preamble, I'll try my best to answer these questions. Then, if you're still with me, we'll jump into some working code.
A parser is a program (perhaps it would be more precise to say a "programmatic component", but we are not striving for extreme precision here) that parses: that means that it reads in text that is in a well defined language (a computer language of course, like C or Java, not a human language like English or Japanese) and breaks it down into its various subcomponents. Parsing is a central topic in computer science; parsers are a core component in countless sorts of systems. Though one may think first of the compilers and interpreters for the various programming languages, it is hardly limited to that. The web browser in which you are likely reading this is built on top of a parser that can read in and analyze HTML (as well as all the languages like CSS and javascript that are embedded in it.) This is necessarily the very first step that a browser has to do in order to display a page.
Given this, it is hardly suprising that parsing, i.e. the lexical and syntactic analysis of structured text, has been the subject of a large amount of academic research literature. I suspect that this is not only because of how useful parsers are in the real world. It likely owes as much or more to the fact that this topic is susceptible to being discussed in a rigorous mathematical language -- theorems, proofs... heavy use of greek letters such as epsilon and sigma... you get my drift... Now, I think that I may as well be clear about one thing up front: I am no theoretician. And I am pretty much completely ignorant of all of the theoretical literature. I say that without any special pride -- or any particular sense of shame either. That's just how it is. However, I am satisfied that it is pretty much completely beside the point. I do not believe that my approach to the writing of this manual, or even to FreeCC development in general, would be substantially different if I did have a stronger theoretical computer science background. Certainly, the appropriate focus of this manual would still be what it is regardless: concrete examples with working code.
Still, before diving into an initial example, I will try to answer the question I posed above, namely: what is a parser generator and why should I be interested in using such a thing? (Maybe that is really two questions, but never mind....) As I said, not only am I no theoretician, moreoever, I am not even making a serious attempt to use a rigorously defined terminology. So, you can (and probably should) take my definitions and usage of such terms as parser, grammar or language with a big grain of salt. Okay, now that I have dispensed with the caveats, here goes:
A parser generator is a tool that takes a high level description of a text's structure or language -- we refer to this description as the grammar -- and converts that into the real working code for a parser, a program that can take text written in that language and break it down into its various lexical and syntactical pieces.
Now, for the next question: why should I want to use a parser generator?
You do not absolutely have to use a parser generator such as FreeCC to create a parser. You can certainly code a parser directly in Java or the programming language of your choice. However, using a parser generator such as FreeCC will be a much more effective approach for substantially the same reason that using a higher level object-oriented programming language (Java or C# for example) will be preferable to using a lower level language (such as C) for the vast majority of programming tasks. The object-oriented language enables you to work at a level that is much closer to the actual problem domain. You can define and work with object types like Product or Customer, instead of getting hung up thinking about machine-level details, such as bytes and pointers to address offsets. Similarly, when you use a parser generator, you are working at a level that is much closer to the probem at hand, directly declaring the syntactical constructs that make up the input rather than working at the level of: "if the next character from the stream is a space or carriage return, then we scan forward past the rest of the whitespace until we hit a semicolon or colon...". You don't have to write (or, more importantly, maintain) that kind of code any more, since it is being generated from your higher-level description.