📄 dataastparser.cpp
字号:
/* $ANTLR 2.7.7 (2006-11-01): "syntax.g" -> "DataASTParser.cpp"$ */
#include "DataASTParser.hpp"
#include <antlr/Token.hpp>
#include <antlr/AST.hpp>
#include <antlr/NoViableAltException.hpp>
#include <antlr/MismatchedTokenException.hpp>
#include <antlr/SemanticException.hpp>
#include <antlr/BitSet.hpp>
#line 1 "syntax.g"
#line 11 "DataASTParser.cpp"
DataASTParser::DataASTParser()
: ANTLR_USE_NAMESPACE(antlr)TreeParser() {
}
void DataASTParser::program(RefASTNodeExt _t) {
RefASTNodeExt program_AST_in = (_t == RefASTNodeExt(ASTNULL)) ? RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST) : _t;
RefASTNodeExt __t80 = _t;
RefASTNodeExt tmp1_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),PROGRAM);
_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 _loop82;
}
}
_loop82:;
} // ( ... )*
_t = __t80;
_t = _t->getNextSibling();
#line 255 "syntax.g"
symtable.SaveData("test.data");
#line 44 "DataASTParser.cpp"
_retTree = _t;
}
void DataASTParser::statement(RefASTNodeExt _t) {
RefASTNodeExt statement_AST_in = (_t == RefASTNodeExt(ASTNULL)) ? RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST) : _t;
if (_t == RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST) )
_t = ASTNULL;
switch ( _t->getType()) {
case DEFASSIGN:
case LITERAL_bit:
case LITERAL_bits:
case 29:
case LITERAL_char:
case LITERAL_string:
case 32:
case 33:
case LITERAL_int:
case LITERAL_uint:
case LITERAL_float:
case LITERAL_double:
case LITERAL_bool:
{
definition(_t);
_t = _retTree;
break;
}
case ASSIGN:
{
assign_statement(_t);
_t = _retTree;
break;
}
case BLOCK:
{
block(_t);
_t = _retTree;
break;
}
default:
{
throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(ANTLR_USE_NAMESPACE(antlr)RefAST(_t));
}
}
_retTree = _t;
}
void DataASTParser::definition(RefASTNodeExt _t) {
RefASTNodeExt definition_AST_in = (_t == RefASTNodeExt(ASTNULL)) ? RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST) : _t;
var_def(_t);
_t = _retTree;
_retTree = _t;
}
void DataASTParser::var_def(RefASTNodeExt _t) {
RefASTNodeExt var_def_AST_in = (_t == RefASTNodeExt(ASTNULL)) ? RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST) : _t;
RefASTNodeExt id = RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST);
RefASTNodeExt ids = RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST);
#line 264 "syntax.g"
TypeAttr t1,t2;
#line 108 "DataASTParser.cpp"
if (_t == RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST) )
_t = ASTNULL;
switch ( _t->getType()) {
case DEFASSIGN:
{
RefASTNodeExt __t85 = _t;
RefASTNodeExt tmp2_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),DEFASSIGN);
_t = _t->getFirstChild();
t1=type_name(_t);
_t = _retTree;
id = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),IDENT);
_t = _t->getNextSibling();
t2=expression(_t);
_t = _retTree;
#line 272 "syntax.g"
if(t2.IsConvertable(t1))//t2 can convert to t1
{
if(symtable.GetSymb(id->getText())==NULL)
symtable.AddSymb(t1,id->getText(),t2.value);
else
ERROR_IF(true, id->getLine(), "Identifier redefined!");
}
else
ERROR_IF(true, id->getLine(), "Data assign type error!");
#line 138 "DataASTParser.cpp"
_t = __t85;
_t = _t->getNextSibling();
break;
}
case LITERAL_bit:
case LITERAL_bits:
case 29:
case LITERAL_char:
case LITERAL_string:
case 32:
case 33:
case LITERAL_int:
case LITERAL_uint:
case LITERAL_float:
case LITERAL_double:
case LITERAL_bool:
{
{
t1=type_name(_t);
_t = _retTree;
{ // ( ... )*
for (;;) {
if (_t == RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST) )
_t = ASTNULL;
if ((_t->getType() == IDENT)) {
ids = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),IDENT);
_t = _t->getNextSibling();
#line 286 "syntax.g"
if(symtable.GetSymb(id->getText())!=NULL)
ERROR_IF(false, id->getLine(), "Identifier redefined!");
else
symtable.AddSymb(t1,ids->getText(),"");
#line 174 "DataASTParser.cpp"
}
else {
goto _loop88;
}
}
_loop88:;
} // ( ... )*
}
break;
}
default:
{
throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(ANTLR_USE_NAMESPACE(antlr)RefAST(_t));
}
}
_retTree = _t;
}
TypeAttr DataASTParser::type_name(RefASTNodeExt _t) {
#line 350 "syntax.g"
TypeAttr t;
#line 197 "DataASTParser.cpp"
RefASTNodeExt type_name_AST_in = (_t == RefASTNodeExt(ASTNULL)) ? RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST) : _t;
if (_t == RefASTNodeExt(ANTLR_USE_NAMESPACE(antlr)nullAST) )
_t = ASTNULL;
switch ( _t->getType()) {
case LITERAL_bit:
{
RefASTNodeExt tmp3_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),LITERAL_bit);
_t = _t->getNextSibling();
#line 352 "syntax.g"
t.SetType(BIT_T);
#line 212 "DataASTParser.cpp"
break;
}
case LITERAL_bits:
{
RefASTNodeExt tmp4_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),LITERAL_bits);
_t = _t->getNextSibling();
#line 356 "syntax.g"
t.SetType(BITS_T);
#line 224 "DataASTParser.cpp"
break;
}
case 29:
{
RefASTNodeExt tmp5_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),29);
_t = _t->getNextSibling();
#line 360 "syntax.g"
t.SetType(UCHAR_T);
#line 236 "DataASTParser.cpp"
break;
}
case LITERAL_char:
{
RefASTNodeExt tmp6_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),LITERAL_char);
_t = _t->getNextSibling();
#line 364 "syntax.g"
t.SetType(CHAR_T);
#line 248 "DataASTParser.cpp"
break;
}
case LITERAL_string:
{
RefASTNodeExt tmp7_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),LITERAL_string);
_t = _t->getNextSibling();
#line 368 "syntax.g"
t.SetType(STR_T);
#line 260 "DataASTParser.cpp"
break;
}
case 32:
{
RefASTNodeExt tmp8_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),32);
_t = _t->getNextSibling();
#line 372 "syntax.g"
t.SetType(UINT16_T);
#line 272 "DataASTParser.cpp"
break;
}
case 33:
{
RefASTNodeExt tmp9_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),33);
_t = _t->getNextSibling();
#line 376 "syntax.g"
t.SetType(INT16_T);
#line 284 "DataASTParser.cpp"
break;
}
case LITERAL_int:
{
RefASTNodeExt tmp10_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),LITERAL_int);
_t = _t->getNextSibling();
#line 380 "syntax.g"
t.SetType(INT_T);
#line 296 "DataASTParser.cpp"
break;
}
case LITERAL_uint:
{
RefASTNodeExt tmp11_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),LITERAL_uint);
_t = _t->getNextSibling();
#line 384 "syntax.g"
t.SetType(UINT_T);
#line 308 "DataASTParser.cpp"
break;
}
case LITERAL_float:
{
RefASTNodeExt tmp12_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),LITERAL_float);
_t = _t->getNextSibling();
#line 388 "syntax.g"
t.SetType(FLOOT_T);
#line 320 "DataASTParser.cpp"
break;
}
case LITERAL_double:
{
RefASTNodeExt tmp13_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),LITERAL_double);
_t = _t->getNextSibling();
#line 392 "syntax.g"
t.SetType(DOUBLE_T);
#line 332 "DataASTParser.cpp"
break;
}
case LITERAL_bool:
{
RefASTNodeExt tmp14_AST_in = _t;
match(ANTLR_USE_NAMESPACE(antlr)RefAST(_t),LITERAL_bool);
_t = _t->getNextSibling();
#line 396 "syntax.g"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -