本文整理汇总了C++中pANTLR3_BASE_TREE类的典型用法代码示例。如果您正苦于以下问题:C++ pANTLR3_BASE_TREE类的具体用法?C++ pANTLR3_BASE_TREE怎么用?C++ pANTLR3_BASE_TREE使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了pANTLR3_BASE_TREE类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: LiteralValueDef
IntegerLiteralValueDef::IntegerLiteralValueDef(const pANTLR3_BASE_TREE node)
: LiteralValueDef(INTEGER_LITERAL, node)
{
assert(node->getType(node) == N_INT_LITERAL);
assert(node->getChildCount(node) == 1);
pANTLR3_BASE_TREE n = (pANTLR3_BASE_TREE) node->getChild(node, 0);
assert(n->getType(n) == INTL);
wchar_t* szStr = (wchar_t*) n->getText(n)->chars;
int value;
try
{
value = boost::lexical_cast<int, wchar_t*>(szStr);
}
catch (const std::exception&)
{
boost::wformat f(L"Invalid integer value: %1% at line %2%");
f % szStr % node->getLine(node);
ParserException e(f.str());
throw e;
}
m_IntValue = value;
}
开发者ID:ernestobad,项目名称:ContainedObjects,代码行数:28,代码来源:IntegerLiteralValueDef.cpp
示例2: assert
void SCsTranslator::processSentenceAssign(pANTLR3_BASE_TREE node)
{
unsigned int nodesCount = node->getChildCount(node);
assert(nodesCount == 2);
pANTLR3_BASE_TREE node_left = (pANTLR3_BASE_TREE)node->getChild(node, 0);
pANTLR3_BASE_TREE node_right = (pANTLR3_BASE_TREE)node->getChild(node, 1);
pANTLR3_COMMON_TOKEN tok_left = node_left->getToken(node_left);
pANTLR3_COMMON_TOKEN tok_right = node_left->getToken(node_right);
assert(tok_left && tok_right);
if (tok_left->type != ID_SYSTEM)
{
THROW_EXCEPT(Exception::ERR_PARSE,
"Unsupported type of tokens at the left side of assignment sentence",
mParams.fileName,
tok_left->getLine(tok_left));
}
if (tok_right->type == ID_SYSTEM)
{
mAssignments[GET_NODE_TEXT(node_left)] = GET_NODE_TEXT(node_right);
}
else
{
String left_idtf = (GET_NODE_TEXT(node_left));
sElement *el = parseElementTree(node_right, &left_idtf);
}
}
开发者ID:rusetski-k,项目名称:sc-machine,代码行数:31,代码来源:scs_translator.cpp
示例3: label
void SCsTranslator::dumpNode(pANTLR3_BASE_TREE node, std::ofstream &stream)
{
StringStream ss;
ss << node;
String s_root = ss.str().substr(3);
pANTLR3_COMMON_TOKEN tok = node->getToken(node);
if (tok)
{
stream << s_root << " [shape=box];" << std::endl;
String label((const char*) node->getText(node)->chars);
std::replace(label.begin(), label.end(), '"', '\'');
stream << s_root << " [label=\"" << label << "\"];" << std::endl;
}
else
stream << s_root << " [shape=circle];" << std::endl;
uint32 n = node->getChildCount(node);
for (uint32 i = 0; i < n; ++i)
{
pANTLR3_BASE_TREE child = (pANTLR3_BASE_TREE) node->getChild(node, i);
StringStream s1;
s1 << child;
stream << s_root << " -> " << s1.str().substr(3) << ";" << std::endl;
dumpNode(child, stream);
}
}
开发者ID:rusetski-k,项目名称:sc-machine,代码行数:28,代码来源:scs_translator.cpp
示例4:
pANTLR3_BASE_TREE
dupTreeTT (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_BASE_TREE parent)
{
pANTLR3_BASE_TREE newTree;
pANTLR3_BASE_TREE child;
pANTLR3_BASE_TREE newSubTree;
ANTLR3_UINT32 n;
ANTLR3_UINT32 i;
if (t == NULL)
{
return NULL;
}
newTree = (pANTLR3_BASE_TREE)t->dupNode(t);
// Ensure new subtree root has parent/child index set
//
adaptor->setChildIndex (adaptor, newTree, t->getChildIndex(t));
adaptor->setParent (adaptor, newTree, parent);
n = adaptor->getChildCount (adaptor, t);
for (i=0; i < n; i++)
{
child = (pANTLR3_BASE_TREE)adaptor->getChild (adaptor, t, i);
newSubTree = (pANTLR3_BASE_TREE)adaptor->dupTreeTT (adaptor, child, t);
adaptor->addChild (adaptor, newTree, newSubTree);
}
return newTree;
}
开发者ID:Daniel1892,项目名称:tora,代码行数:29,代码来源:antlr3basetreeadaptor.c
示例5: ASTNode
ActualParamDef::ActualParamDef(const pANTLR3_BASE_TREE node)
: ASTNode(node)
{
assert(node->getType(node) == N_ACTUAL_PARAM);
assert(node->getChildCount(node) == 2);
pANTLR3_BASE_TREE n;
{
// param name
n = (pANTLR3_BASE_TREE) node->getChild(node, 0);
assert(n->getType(n) == N_PARAM_NAME);
assert(n->getChildCount(n) == 1);
n = (pANTLR3_BASE_TREE) n->getChild(n, 0);
m_ParamName = (wchar_t*) n->getText(n)->chars;
}
{
// value
n = (pANTLR3_BASE_TREE) node->getChild(node, 1);
assert(n->getType(n) == N_VALUE);
createValueDef(n, m_pValue);
}
}
开发者ID:ernestobad,项目名称:ContainedObjects,代码行数:27,代码来源:ActualParamDef.cpp
示例6: ValueDef
ArrayInitValueDef::ArrayInitValueDef(const pANTLR3_BASE_TREE node)
: ValueDef(ARRAY_INIT, node)
{
assert(node->getType(node) == N_ARRAY_INIT_VAL);
assert(node->getChildCount(node) == 2);
pANTLR3_BASE_TREE n, c;
{
// type
n = (pANTLR3_BASE_TREE) node->getChild(node, 0);
assert(n->getType(n) == N_ARRAY_TYPE);
m_pDeclaredType = boost::shared_ptr<Type>(static_cast<Type*>(new ArrayType(n)));
}
{
// array values
n = (pANTLR3_BASE_TREE) node->getChild(node, 1);
assert(n->getType(n) == N_ARRAY_VALUES);
m_Values.clear();
int childCount = n->getChildCount(n);
for (int i = 0; i < childCount; i++)
{
c = (pANTLR3_BASE_TREE) n->getChild(n, i);
boost::shared_ptr<ValueDef> pValueDef;
createValueDef(c, pValueDef);
m_Values.push_back(pValueDef);
}
}
}
开发者ID:ernestobad,项目名称:ContainedObjects,代码行数:35,代码来源:ArrayInitValueDef.cpp
示例7:
/** Transform ^(nil x) to x
*/
static pANTLR3_BASE_TREE
rulePostProcessing (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE root)
{
if (root != NULL && root->isNil(root) && root->getChildCount(root) == 1)
{
root = root->getChild(root, 0);
}
return root;
}
开发者ID:UIKit0,项目名称:mclab,代码行数:13,代码来源:antlr3basetreeadaptor.c
示例8: emerson_printAST
pANTLR3_STRING emerson_printAST(pANTLR3_BASE_TREE tree, pANTLR3_UINT8* parserTokenNames)
{
pANTLR3_STRING string;
ANTLR3_UINT32 i;
ANTLR3_UINT32 n;
pANTLR3_BASE_TREE t;
if(tree->children == NULL || tree->children->size(tree->children) == 0)
{
return tree->toString(tree);
}
// THis is how you get a new string. The string is blank
string = tree->strFactory->newRaw(tree->strFactory);
if(tree->isNilNode(tree) == ANTLR3_FALSE)
{
string->append8 (string, "(");
pANTLR3_COMMON_TOKEN token = tree->getToken(tree);
ANTLR3_UINT32 type = token->type;
string->append(string, (const char*)parserTokenNames[type]);
string->append8(string, " ");
}
if(tree->children != NULL)
{
n = tree->children->size(tree->children);
for (i = 0; i < n; i++)
{
t = (pANTLR3_BASE_TREE) tree->children->get(tree->children, i);
if (i > 0)
{
string->append8(string, " ");
}
string->appendS(string, emerson_printAST(t,parserTokenNames));
}
}
if(tree->isNilNode(tree) == ANTLR3_FALSE)
{
string->append8(string,")");
}
return string;
}
开发者ID:LittleForker,项目名称:sirikata,代码行数:49,代码来源:Util.cpp
示例9:
/** If oldRoot is a nil root, just copy or move the children to newRoot.
* If not a nil root, make oldRoot a child of newRoot.
*
* \code
* old=^(nil a b c), new=r yields ^(r a b c)
* old=^(a b c), new=r yields ^(r ^(a b c))
* \endcode
*
* If newRoot is a nil-rooted single child tree, use the single
* child as the new root node.
*
* \code
* old=^(nil a b c), new=^(nil r) yields ^(r a b c)
* old=^(a b c), new=^(nil r) yields ^(r ^(a b c))
* \endcode
*
* If oldRoot was null, it's ok, just return newRoot (even if isNilNode).
*
* \code
* old=null, new=r yields r
* old=null, new=^(nil r) yields ^(nil r)
* \endcode
*
* Return newRoot. Throw an exception if newRoot is not a
* simple node or nil root with a single child node--it must be a root
* node. If newRoot is <code>^(nil x)</endcode> return x as newRoot.
*
* Be advised that it's ok for newRoot to point at oldRoot's
* children; i.e., you don't have to copy the list. We are
* constructing these nodes so we should have this control for
* efficiency.
*/
static pANTLR3_BASE_TREE
becomeRoot (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE newRootTree, pANTLR3_BASE_TREE oldRootTree)
{
/* Protect against tree rewrites if we are in some sort of error
* state, but have tried to recover. In C we can end up with a null pointer
* for a tree that was not produced.
*/
if (newRootTree == NULL)
{
return oldRootTree;
}
/* root is just the new tree as is if there is no
* current root tree.
*/
if (oldRootTree == NULL)
{
return newRootTree;
}
/* Produce ^(nil real-node)
*/
if (newRootTree->isNilNode(newRootTree))
{
if (newRootTree->getChildCount(newRootTree) > 1)
{
/* TODO: Handle tree exceptions
*/
ANTLR3_FPRINTF(stderr, "More than one node as root! TODO: Create tree exception hndling\n");
return newRootTree;
}
/* The new root is the first child
*/
newRootTree = newRootTree->getChild(newRootTree, 0);
}
/* Add old root into new root. addChild takes care of the case where oldRoot
* is a flat list (nill rooted tree). All children of oldroot are added to
* new root.
*/
newRootTree->addChild(newRootTree, oldRootTree);
/* Always returns new root structure
*/
return newRootTree;
}
开发者ID:aslakhellesoy,项目名称:antlr-3,代码行数:80,代码来源:antlr3basetreeadaptor.c
示例10: addChild
/** Add a child to the tree t. If child is a flat tree (a list), make all
* in list children of t. Warning: if t has no children, but child does
* and child isNilNode then it is ok to move children to t via
* t.children = child.children; i.e., without copying the array. This
* is for construction and I'm not sure it's completely general for
* a tree's addChild method to work this way. Make sure you differentiate
* between your tree's addChild and this parser tree construction addChild
* if it's not ok to move children to t with a simple assignment.
*/
static void
addChild (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_BASE_TREE child)
{
if (t != NULL && child != NULL)
{
t->addChild(t, child);
}
}
开发者ID:Daniel1892,项目名称:tora,代码行数:17,代码来源:antlr3basetreeadaptor.c
示例11:
static pANTLR3_STRING
toStringTree (pANTLR3_BASE_TREE tree)
{
pANTLR3_STRING string;
ANTLR3_UINT32 i;
ANTLR3_UINT32 n;
pANTLR3_BASE_TREE t;
if (tree->children == NULL || tree->children->size(tree->children) == 0)
{
return tree->toString(tree);
}
/* Need a new string with nothing at all in it.
*/
string = tree->strFactory->newRaw(tree->strFactory);
if (tree->isNilNode(tree) == ANTLR3_FALSE)
{
string->append8 (string, "(");
string->appendS (string, tree->toString(tree));
string->append8 (string, " ");
}
if (tree->children != NULL)
{
n = tree->children->size(tree->children);
for (i = 0; i < n; i++)
{
t = (pANTLR3_BASE_TREE) tree->children->get(tree->children, i);
if (i > 0)
{
string->append8(string, " ");
}
string->appendS(string, t->toStringTree(t));
}
}
if (tree->isNilNode(tree) == ANTLR3_FALSE)
{
string->append8(string,")");
}
return string;
}
开发者ID:10114395,项目名称:android-5.0.0_r5,代码行数:45,代码来源:antlr3basetree.c
示例12: dbgAddChild
static void
dbgAddChild (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_BASE_TREE child)
{
if (t != NULL && child != NULL)
{
t->addChild(t, child);
adaptor->debugger->addChild(adaptor->debugger, t, child);
}
}
开发者ID:Daniel1892,项目名称:tora,代码行数:9,代码来源:antlr3basetreeadaptor.c
示例13:
static void
replaceChildren
(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE parent, ANTLR3_INT32 startChildIndex, ANTLR3_INT32 stopChildIndex, pANTLR3_BASE_TREE t)
{
if (parent != NULL)
{
parent->replaceChildren(parent, startChildIndex, stopChildIndex, t);
}
}
开发者ID:jariba,项目名称:europa-pso,代码行数:9,代码来源:antlr3commontreeadaptor.c
示例14: if
static ANTLR3_UINT32 getCharPositionInLine (pANTLR3_BASE_TREE tree)
{
pANTLR3_COMMON_TOKEN token;
token = ((pANTLR3_COMMON_TREE)(tree->super))->token;
if (token == NULL || token->getCharPositionInLine(token) == -1)
{
if (tree->getChildCount(tree) > 0)
{
pANTLR3_BASE_TREE child;
child = (pANTLR3_BASE_TREE)tree->getChild(tree, 0);
return child->getCharPositionInLine(child);
}
return 0;
}
return token->getCharPositionInLine(token);
}
开发者ID:166MMX,项目名称:antlr3,代码行数:20,代码来源:antlr3commontree.c
示例15:
ASTNode::ASTNode(const pANTLR3_BASE_TREE node)
{
m_LineNumber = node->getLine(node);
m_CharPosition = node->getCharPositionInLine(node);
pANTLR3_BASE_TREE n = node;
while ((n != NULL) && (n->u == NULL))
{
if (n->u != NULL)
{
m_FileName = (wchar_t*) n->u;
node->u = n->u;
break;
}
else
{
n = n->getParent(n);
}
}
}
开发者ID:ernestobad,项目名称:ContainedObjects,代码行数:20,代码来源:ASTNode.cpp
示例16: GET_NODE_TEXT
void SCsTranslator::processSentenceLevel2_7(pANTLR3_BASE_TREE node)
{
String connector = GET_NODE_TEXT(node);
// determine object
pANTLR3_BASE_TREE node_obj = (pANTLR3_BASE_TREE)node->getChild(node, 0);
sElement *el_obj = _createElement(GET_NODE_TEXT(node_obj), 0);
// no we need to parse attributes and predicates
processAttrsIdtfList(true, node, el_obj, connector, false);
}
开发者ID:rusetski-k,项目名称:sc-machine,代码行数:12,代码来源:scs_translator.cpp
示例17: emerson_createTreeMirrorImage2
void emerson_createTreeMirrorImage2(pANTLR3_BASE_TREE ptr)
{
if(ptr!= NULL && ptr->children != NULL)
{
ANTLR3_UINT32 n = ptr->getChildCount(ptr);
if(n == 1)
{
//emerson_createTreeMirrorImage((pANTLR3_BASE_TREE)(ptr->getChild(ptr, 0)));
}
if(n == 2) // should it be checked
{
pANTLR3_BASE_TREE right = (pANTLR3_BASE_TREE)(ptr->getChild(ptr, 1));
//emerson_createTreeMirrorImage( (pANTLR3_BASE_TREE)(ptr->getChild(ptr, 0)));
//emerson_createTreeMirrorImage( (pANTLR3_BASE_TREE)(ptr->getChild(ptr, 1)) );
ptr->setChild(ptr, 1, ptr->getChild(ptr, 0));
ptr->setChild(ptr, 0, right);
}
}
}
开发者ID:LittleForker,项目名称:sirikata,代码行数:21,代码来源:Util.cpp
示例18: _getTypeByConnector
void SCsTranslator::processAttrsIdtfList(bool ignore_first, pANTLR3_BASE_TREE node, sElement *el_obj, const String &connector, bool generate_order)
{
sc_type type_connector = _getTypeByConnector(connector);
tElementSet var_attrs, const_attrs;
tElementSet subjects;
uint32 n = node->getChildCount(node);
uint32 idx = 1;
for (uint32 i = ignore_first ? 1 : 0; i < n; ++i)
{
pANTLR3_BASE_TREE child = (pANTLR3_BASE_TREE)node->getChild(node, i);
pANTLR3_COMMON_TOKEN tok = child->getToken(child);
assert(tok);
// skip internal sentences
if (tok->type == SEP_LINT) continue;
if (tok->type == SEP_ATTR_CONST || tok->type == SEP_ATTR_VAR)
{
if (!subjects.empty())
{
GENERATE_ATTRS(idx)
subjects.clear();
const_attrs.clear();
var_attrs.clear();
}
pANTLR3_BASE_TREE nd = (pANTLR3_BASE_TREE)child->getChild(child, 0);
sElement *el = _addNode(GET_NODE_TEXT(nd));
if (tok->type == SEP_ATTR_CONST)
const_attrs.insert(el);
else
var_attrs.insert(el);
} else
{
subjects.insert(parseElementTree(child));
}
}
GENERATE_ATTRS(idx)
}
开发者ID:rusetski-k,项目名称:sc-machine,代码行数:40,代码来源:scs_translator.cpp
示例19: ValueDef
ObjectInitValueDef::ObjectInitValueDef(const pANTLR3_BASE_TREE node)
: ValueDef(OBJECT_INIT, node)
{
assert(node->getType(node) == N_OBJECT_INIT_VAL);
assert(node->getChildCount(node) == 2);
pANTLR3_BASE_TREE n, c;
{
// class name
n = (pANTLR3_BASE_TREE) node->getChild(node, 0);
assert(n->getType(n) == N_CLASS_NAME);
assert(n->getChildCount(n) == 1);
n = (pANTLR3_BASE_TREE) n->getChild(n, 0);
assert(n->getType(n) == ID);
wchar_t* szClassName = (wchar_t*) n->getText(n)->chars;
m_ClassName = szClassName;
}
{
m_ActualParamsMap.clear();
// actual params
n = (pANTLR3_BASE_TREE) node->getChild(node, 1);
assert(n->getType(n) == N_ACTUAL_PARAMS);
int childCount = n->getChildCount(n);
for (int i = 0; i < childCount; i++)
{
c = (pANTLR3_BASE_TREE) n->getChild(n, i);
assert(c->getType(c) == N_ACTUAL_PARAM);
ActualParamDefPtr pActualParamDef(new ActualParamDef(c));
m_ActualParamsMap[pActualParamDef->getParamName()] = pActualParamDef;
}
}
}
开发者ID:ernestobad,项目名称:ContainedObjects,代码行数:39,代码来源:ObjectInitValueDef.cpp
示例20:
static pANTLR3_STRING toString (pANTLR3_BASE_TREE tree)
{
if (tree->isNilNode(tree) == ANTLR3_TRUE)
{
pANTLR3_STRING nilNode;
nilNode = tree->strFactory->newPtr(tree->strFactory, (pANTLR3_UINT8)"nil", 3);
return nilNode;
}
return ((pANTLR3_COMMON_TREE)(tree->super))->token->getText(((pANTLR3_COMMON_TREE)(tree->super))->token);
}
开发者ID:166MMX,项目名称:antlr3,代码行数:13,代码来源:antlr3commontree.c
注:本文中的pANTLR3_BASE_TREE类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论