Что вы можете сделать, это:
- расширить
DOTTreeGenerator
и изменить (статический) узел-шаблон в конструкторе
- переопределить его
getNodeST
и добавить пользовательский атрибут (ы) в шаблоне
демо, которое показывает, как добавить счетчик ребенка каждого дерева:
// Original source of DOTTreeGenerator:
// https://github.com/antlr/antlr3/blob/master/runtime/Java/src/main/java/org/antlr/runtime/tree/DOTTreeGenerator.java
class MyDOTTreeGenerator extends DOTTreeGenerator {
public MyDOTTreeGenerator() {
// added ", childCount=$childCount$"
DOTTreeGenerator._nodeST = new StringTemplate("$name$ [label=\"text=$text$, childCount=$childCount$\"];\n");
}
@Override
protected StringTemplate getNodeST(TreeAdaptor adaptor, Object t) {
// cast "t" to your own tree implementation
CommonTree tree = (CommonTree)t;
String text = adaptor.getText(t);
StringTemplate nodeST = _nodeST.getInstanceOf();
String uniqueName = "n"+getNodeNumber(t);
nodeST.setAttribute("name", uniqueName);
// set the "childCount" attribute
nodeST.setAttribute("childCount", tree.getChildCount());
nodeST.setAttribute("text", fixString(text));
return nodeST;
}
}
Использовать его следующим образом:
Thanks Bart. Однако я использую C#, и соответствующий класс C# не имеет ни одного из полей, которые имеет версия Java. Weird. –
Затем я предлагаю вам посмотреть исходный код [C#] (https://github.com/antlr/antlr3/blob/master/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/DotTreeGenerator.cs) для 'DotTreeGenerator' и внести соответствующие изменения. –