我正在使用ANTLR4框架,这是我语言的一个片段:
#ifndef TRANSACTION_H
#define TRANSACTION_H
#include <string>
using namespace std;
#include "defs.h"
class Transaction
{
public:
Transaction(TransType = TTERROR, TransState = TSERROR,int = 0 ,float = 0);
int getTransID();
TransType getTType();
TransState getTState();
string getDate();
int getTAcctNum();
void setDate(string);
float getAmount();
private:
static int nextTransID;
int transID;
TransType tType;
TransState tState;
string date;
int tAcctNum;
float tAmount;
};
#endif
如您所见,RN是一个终端节点,因此我可以轻松处理它。但是r是非终端节点,因此它可能非常复杂,如DLRRelationUnionOf(RN1,DLRRelationIntersectionOf(RN2,RN3))。 我的目标是处理 r 节点并递归查找RN。 问题是,一旦在代码中重新执行规则r,如:
#include "Transaction.h"
#include "defs.h"
#include <string>
using namespace std;
int Transaction::nextTransID = 2001;
Transaction::Transaction(TransType t, TransState s, int acct, float amount)
{
transID = nextTransID++;
tType = t;
tState = s;
tAcctNum = acct;
tAmount = amount;
}
int getTransID() { return transID; }
TransType getTType() { return tType; }
TransState getTState() { return tState; }
string getDate() { return date; }
int getTAcctNum() { return tAcctNum; }
float getTAmount() { return tAmount; }
void setDate(string d)
{
date = d;
}
如何查看recursiveRule以找出RN?
答案 0 :(得分:1)
在运行期间,解析器会创建一个解析树(如果启用,则为默认值)。解析树是匹配项的树表示。此树由ParserRuleContext
个实例组成,每个实例都有子项,这些子项以匹配顺序表示该规则中的匹配项。因此,对于r
上下文,当匹配第二个alt时,您可以找到6个子节点(一个用于文字,一个用于LPAREN,一个用于第一个子r
等)。您可以使用这些子上下文来访问子条目。如果匹配RN
,则第一个子条目中有一个终端节点。