1
我不確定標題是否清楚了我想要執行的操作。解析輸入並在解析時構建Dictionary/HashMap
我的解析器輸入包含有關C源文件的調試信息。一些輸入看起來像例如像這樣:
L:C$main.c$41$1$10:C0C5
這基本上意味着在源文件main.c
在該行10
對應與所述存儲器地址C0C5
。
這裏有一個例子就是我AST的樣子:
表示輸入:
M:main
L:C$main.c$29$1$0:C09C
L:C$main.c$30$1$10:C0A2
M:divide
L:C$divice.c$31$1$10:C5A9
我想要的是兩個散列的地圖,這樣我可以訪問這些信息在運行時很快。但是,我現在如何構建這樣的哈希映射,並且可以在parsetime處做到這一點?
這是我想用我的解析器:
public CDBFileParser getFileParser(String cdbFilePath)
{
Stream stream = File.OpenRead(cdbFilePath);
ANTLRInputStream inputStream = new ANTLRInputStream(stream);
CDBFileLexer lexer = new CDBFileLexer(inputStream);
CommonTokenStream tokens = new CommonTokenStream(lexer);
CDBFileParser parser = new CDBFileParser(tokens);
try
{
parser.TreeAdaptor = new CommonTreeAdaptor();
parser.parseCDBFile();
// All this works so far. Here comes the part I am looking for:
Modules[] modules = parser.getModules();
Dictionary<int, int> lineToAddress = modules[0].getLineToAddressMap();
Dictionary<int, int> addressToLine = modules[0].getAddressToLineMap();
int address = 0xC09C;
System.Out.WriteLine("Address 0xC09C is at line " + addressToLine.get(address) + " in " + modules[0].getName());
}
catch (Exception e)
{
printException(e);
}
return parser;
}
預期輸出:
Address 0xC09C is at line 29 in main
有人能幫忙嗎?
此致敬禮。