Create a Language Compiler for the .NET Framework Using C#
msdn.microsoft.com
msdn.microsoft.com
The grammar itself (which, in this case, is expressed in EBNF notation) says nothing about details such as the size of numbers. Grammars only describe what can be said, not what that means.
The C grammar, for example, has many different number types. But it's not the grammar which determines if an unsigned long is 32 or 64-bit. That's determined by parts of the language specification outside of the grammar.
If you look at the specification for any language, the grammar is the smallest part. The C++ grammar takes up less than a dozen pages, but the entire standard is over 800.
Understanding exactly what is defined by a language's grammar, though, originally comes from my undergrad courses in programming languages and compilers.
I'm completely self-taught, but I've wondered if I missed out on something valuable by not going to college.
Long answer: it's hard to know for certain. I chose Computer Science as my major having done very little programming. I didn't do any serious programming until my intro to programming course my first semester. I did some programming in a high school course, but really, my start as a programmer coincided with the start of my formal education.
But during my education, I was exposed to things I doubt I would have encountered on my own. In particular, what I learned from my programming languages, compilers and operating systems courses. In fact, if it had not been for my programming language course, I don't know if I would have realized how much I like thinking about how to express concepts in code. If it wasn't for my graduate studies, I doubt I would have become so comfortable with systems programming and performance in general.
I'm also a biases person to ask because I'm close to getting my Ph.D. I have a Bachelor's and a Master's. So I've done a decent amount of schoolin'.
The problem with being self-taught is sometimes you just don't know what you don't know. I know it sounds boring, predictable and constraining to learn a menu of concepts. But the benefit is that lots of people who came before you decided "these things are important to know to be in our field."
(Hope you see this reply, I didn't realize you replied until just now.)
Now, you too can share some of this glory by writing your own compiler for the Microsoft® .NET Framework.
Made me ready to pick up the phone and buy a "10 Steps to Making Trillions on eBay" book... or write a CLR-targeted compiler.
If you have never actually made a language from the ground up, then please do so ! It will teach you plenty and it will also help you to write better code because you understand better what a compiler will do internally with the code you wrote. Another great source of insight is the 'produce assembly output' switch for your favourite compiler. Have a look at what the compiler does when it parses your code and turns it in to assembler ready to be turned into machine language.