Пример #1
0
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;

}
Пример #2
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;
}
Пример #3
0
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;
    }
}
Пример #4
0
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;
}
Пример #5
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;
}