int main(int argc, char *argv[]) { FILE *fin; Shell shell = Shell(argc, argv); if (shell.getSourceFilename()[0] == '\0') { fin = stdin; shell.getMessage().print(NORMAL, "compiler: No source file provided. Reading from standard input"); } else { if (shell.isStandardInput()) { shell.getMessage().print(WARNING, "compiler: ignoring option --stdin: using source file \"%s\"", shell.getSourceFilename()); } fin = fopen(shell.getSourceFilename(), "r"); if (!fin) { shell.getMessage().print(PANIC, "compiler: file \"%s\" not found", shell.getSourceFilename()); } shell.getMessage().print(VERBOSE, "compiler: reading from source file \"%s\"", shell.getSourceFilename()); } SymbolTable symbolTable = SymbolTable(shell.getMessage()); Parser parser = Parser(fin, shell.getTabWidthParam(), &symbolTable, shell.getMessage()); if (parser.read()) { shell.getMessage().print(NORMAL, "%i line%c processed: compile successful", parser.getScanner().getLinesRead(), parser.getScanner().getLinesRead() > 1 ? 's' : ' ' ); } else { shell.getMessage().print(NORMAL, "%i errors: %i warnings: compile failed", parser.getMessage().getErrorCount(), parser.getMessage().getWarningCount()); } return 0; }
//===----------------------------------------------------------------------===// // Interpret nodes and call functions // Only delete pointers to Program, Block, ProcDecl, Assign, Call, // Sequence, IfThen, IfThenElse, While, Print, ExprItem, BinOp, UnOp //===----------------------------------------------------------------------===// Value* Program::interpret() { SymbolTable t = SymbolTable(); t.enterTable( name, line, column ); block->interpret( t ); t.exitTable(); return NULL; }
void LSRClassTable::add(std::string className) { if (contains(className)) { std::cout << "Classname " << className << " is already defined!" << std::endl; return; } else { SymbolTable temp = SymbolTable(); classDefs[className] = temp; return; } }
int main( int /* argc */, char** /* argv */ ) { Scanner scanner = Scanner(); SymbolTable st = SymbolTable(); Token *currTok; currTok = scanner.nextToken(); while( 1 ) { std::cout << currTok->tokenCodeToString(); if( currTok->getDataType() == dt_OP ) std::cout << "(" << currTok->opCodeToString() << ")"; else if( currTok->getDataType() != dt_KEYWORD && currTok->getDataType() != dt_NONE ) { std::cout << "(" << currTok->getDataValue().lexeme << ")"; } std::cout << " "; //symtab if( currTok->getTokenCode() == tc_ID || currTok->getTokenCode() == tc_NUMBER ) { SymbolTableEntry *entry = st.lookup( currTok->getDataValue().lexeme ); if(!entry) { entry = st.insert( currTok->getDataValue().lexeme ); currTok->setSymTabEntry( entry ); } currTok->setSymTabEntry( entry ); } if(currTok->getTokenCode() == tc_EOF) break; currTok = scanner.nextToken(); } std::cout << "\n\n"; st.print(); return 0; }
DEFINE_THIS_FILE /*********************************************************************************************** Forward declarations ***********************************************************************************************/ /*********************************************************************************************** Local Constants and static variables ***********************************************************************************************/ /*********************************************************************************************** Methods ***********************************************************************************************/ bool GrcManager::PostParse() { // Add the system-defined "lang" feature whose values are 4-byte language ID codes. // This feature always has an ID = 1 (kfidStdLang). Symbol psymFeat = SymbolTable()->AddFeatureSymbol(GrcStructName("lang"), GrpLineAndFile(0, 0, "")); GdlFeatureDefn * pfeat = psymFeat->FeatureDefnData(); Assert(pfeat); pfeat->SetName("lang"); pfeat->MarkAsLanguageFeature(); m_prndr->AddFeature(pfeat); g_cman.ProcessMasterTables(); if (!m_prndr->ReplaceAliases()) return false; if (!m_prndr->HandleOptionalItems()) return false; if (!m_prndr->CheckSelectors()) return false; return true; }