Background: I'm making a compiler, the scanner and parser is already done. We have our formal grammar, which defines a program as:
program =
declarations
procedureDeclarations
main ( ){
declarations
statementSequence
}
So you can notice that declarations can be either global or local to the main method. So as I parse, I need a way of storing these three things: Whether the identifier coming in is a: Constant or Variable (I can tell by which parsing method I'm in, parseConst() or parseVar()), global or local, its actual name, and it's value (if I know it yet).
I'm kind of confused how to store all this. In my data structures class we really only 2 things needed to store, a key and a value. So would I have something like:
identHashMap<String, String> // where the first string is the ident's name, and the second is if it's a constant or var (this could be a boolean also)
constantIdentifiers<String, String> // first string is the ident's name, second is whether it's local/global (could be a string)
varIdentifiers<String, String> // first string is the ident's name, second is whether it's local/global (could be a string)
identifierValues<String, Integer> // ident's name, Ident's value
it seems like wayyy too many data structures for a simple task. Should I make a class, Identifier, and have a Global/local boolean field, aswell as a constant/var boolean? And then put them all in one identifiers hashmap?
Thanks!