📄 dataastparser.cpp
字号:
t.SetType(BOOL_T);
#line 344 "DataASTParser.cpp"
break;
}
default:
{
throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(ANTLR_USE_NAMESPACE(antlr)RefAST(_t));
}
}
_retTree = _t;
return t;
}
TypeAttr DataASTParser::expression(RefASTNodeExt _t) {
#line 411 "syntax.g"
TypeAttr t;
#line 359 "DataASTParser.cpp"
RefASTNodeExt expression_AST_in = (_t == RefASTNodeExt(ASTNULL)) ? RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST) : _t;
RefASTNodeExt id = RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST);
#line 411 "syntax.g"
CSymbol* symb;
#line 364 "DataASTParser.cpp"
if (_t == RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST) )
_t = ASTNULL;
switch ( _t->getType()) {
case INT:
case HEX:
case DOUBLE:
case BIT:
case BITS:
case CHAR:
case STRING:
case LITERAL_true:
case LITERAL_false:
{
t=const_value(_t);
_t = _retTree;
break;
}
case IDENT:
{
id = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),IDENT);
_t = _t->getNextSibling();
#line 415 "syntax.g"
symb=symtable.GetSymb(id->getText());
bool temp=symb==NULL;
string errors="undefined identifier:"+id->getText();
ERROR_IF(temp,id->getLine(),errors);
t=symb->GetAttr();
#line 396 "DataASTParser.cpp"
break;
}
default:
{
throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(ANTLR_USE_NAMESPACE(antlr)RefAST(_t));
}
}
_retTree = _t;
return t;
}
TypeAttr DataASTParser::const_value(RefASTNodeExt _t) {
#line 295 "syntax.g"
TypeAttr t;
#line 411 "DataASTParser.cpp"
RefASTNodeExt const_value_AST_in = (_t == RefASTNodeExt(ASTNULL)) ? RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST) : _t;
RefASTNodeExt b = RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST);
RefASTNodeExt bs = RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST);
RefASTNodeExt i = RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST);
RefASTNodeExt h = RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST);
RefASTNodeExt d = RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST);
RefASTNodeExt c = RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST);
RefASTNodeExt s = RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST);
if (_t == RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST) )
_t = ASTNULL;
switch ( _t->getType()) {
case BIT:
{
b = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),BIT);
_t = _t->getNextSibling();
#line 297 "syntax.g"
t.SetType(BIT_T);
t.SetValue(b->getText());
t.BitToStr();//resolve bit to 0/1 string
#line 435 "DataASTParser.cpp"
break;
}
case BITS:
{
bs = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),BITS);
_t = _t->getNextSibling();
#line 303 "syntax.g"
t.SetType(BITS_T);
t.SetValue(bs->getText());
ERROR_IF(!t.BitsToStr(),bs->getLine(),"bits length>32!");
#line 449 "DataASTParser.cpp"
break;
}
case INT:
{
i = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),INT);
_t = _t->getNextSibling();
#line 309 "syntax.g"
t.IsInt();
t.SetValue(i->getText());
t.CalcLen();
#line 463 "DataASTParser.cpp"
break;
}
case HEX:
{
h = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),HEX);
_t = _t->getNextSibling();
#line 315 "syntax.g"
t.IsInt();
t.SetValue(h->getText());
t.HexToStr();
#line 477 "DataASTParser.cpp"
break;
}
case DOUBLE:
{
d = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),DOUBLE);
_t = _t->getNextSibling();
#line 321 "syntax.g"
t.IsDouble();
t.SetValue(d->getText());
t.CalcLen();
#line 491 "DataASTParser.cpp"
break;
}
case CHAR:
{
c = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),CHAR);
_t = _t->getNextSibling();
#line 327 "syntax.g"
t.SetType(CHAR_T);
t.SetValue(c->getText());
t.CharToStr();
#line 505 "DataASTParser.cpp"
break;
}
case STRING:
{
s = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),STRING);
_t = _t->getNextSibling();
#line 333 "syntax.g"
t.SetType(STR_T);
t.SetValue(d->getText());
t.StrToStr();
#line 519 "DataASTParser.cpp"
break;
}
case LITERAL_true:
{
RefASTNodeExt tmp15_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),LITERAL_true);
_t = _t->getNextSibling();
#line 339 "syntax.g"
t.SetType(BOOL_T);
t.SetValue("0");
#line 532 "DataASTParser.cpp"
break;
}
case LITERAL_false:
{
RefASTNodeExt tmp16_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),LITERAL_false);
_t = _t->getNextSibling();
#line 344 "syntax.g"
t.SetType(BOOL_T);
t.SetValue("1");
#line 545 "DataASTParser.cpp"
break;
}
default:
{
throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(ANTLR_USE_NAMESPACE(antlr)RefAST(_t));
}
}
_retTree = _t;
return t;
}
void DataASTParser::block(RefASTNodeExt _t) {
RefASTNodeExt block_AST_in = (_t == RefASTNodeExt(ASTNULL)) ? RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST) : _t;
RefASTNodeExt __t92 = _t;
RefASTNodeExt tmp17_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),BLOCK);
_t = _t->getFirstChild();
{ // ( ... )*
for (;;) {
if (_t == RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST) )
_t = ASTNULL;
if ((_tokenSet_0.member(_t->getType()))) {
statement(_t);
_t = _retTree;
}
else {
goto _loop94;
}
}
_loop94:;
} // ( ... )*
_t = __t92;
_t = _t->getNextSibling();
_retTree = _t;
}
void DataASTParser::assign_statement(RefASTNodeExt _t) {
RefASTNodeExt assign_statement_AST_in = (_t == RefASTNodeExt(ASTNULL)) ? RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST) : _t;
RefASTNodeExt id = RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST);
#line 423 "syntax.g"
CSymbol* symb;
TypeAttr t1,t2;
#line 592 "DataASTParser.cpp"
RefASTNodeExt __t98 = _t;
RefASTNodeExt tmp18_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),ASSIGN);
_t = _t->getFirstChild();
id = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),IDENT);
_t = _t->getNextSibling();
t2=expression(_t);
_t = _retTree;
_t = __t98;
_t = _t->getNextSibling();
#line 429 "syntax.g"
symb=symtable.GetSymb(id->getText());
if(symb==NULL)
ERROR_IF(true,id->getLine(),"undefined identifier!");
else
{
t1=symb->GetAttr();
if(t2.IsConvertable(t1))//t2 can convert to t1
{
symtable.SetSymValue(id->getText(),t2.value);
}
else
ERROR_IF(true, id->getLine(), "data type uncompatiable!");
}
#line 621 "DataASTParser.cpp"
_retTree = _t;
}
void DataASTParser::initializeASTFactory( ANTLR_USE_NAMESPACE(antlr)ASTFactory& )
{
}
const char* DataASTParser::tokenNames[] = {
"<0>",
"EOF",
"<2>",
"NULL_TREE_LOOKAHEAD",
"APOSTROPHE",
"SEMI",
"COLON",
"ASSIGN",
"DIGIT",
"an integer value",
"a hexadecimal integer value",
"an floating point value",
"WS",
"an identifer",
"BIT",
"BITS",
"SL_COMMENT",
"ML_COMMENT",
"a character literal",
"a string literal",
"ESC",
"BLOCK",
"PROGRAM",
"DEFASSIGN",
"COMMA",
"\"true\"",
"\"false\"",
"\"bit\"",
"\"bits\"",
"\"uint8\"",
"\"char\"",
"\"string\"",
"\"uint16\"",
"\"int16\"",
"\"int\"",
"\"uint\"",
"\"float\"",
"\"double\"",
"\"bool\"",
"LCURLY",
"RCURLY",
0
};
const unsigned long DataASTParser::_tokenSet_0_data_[] = { 4171235456UL, 127UL, 0UL, 0UL };
// ASSIGN BLOCK DEFASSIGN "bit" "bits" "uint8" "char" "string" "uint16"
// "int16" "int" "uint" "float" "double" "bool"
const ANTLR_USE_NAMESPACE(antlr)BitSet DataASTParser::_tokenSet_0(_tokenSet_0_data_,4);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -