X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=ragel%2Fparsedata.cpp;h=8ce89db64687486827332ae335246c9884f8e1ec;hb=9f3c2baa91083bb5b33b4f3ec07f58d900157e32;hp=6de083e7e9824c5159e3359a2957e31275263705;hpb=176980c2b48c7284dfd634bb92f8217b4af55eb7;p=external%2Fragel.git diff --git a/ragel/parsedata.cpp b/ragel/parsedata.cpp index 6de083e..8ce89db 100644 --- a/ragel/parsedata.cpp +++ b/ragel/parsedata.cpp @@ -30,9 +30,8 @@ #include "parsedata.h" #include "parsetree.h" #include "mergesort.h" -#include "xml-codegen.h" +#include "xmlcodegen.h" #include "version.h" -#include "xmlparse.h" #include "inputdata.h" using namespace std; @@ -116,7 +115,7 @@ Key makeFsmKeyHex( char *str, const InputLoc &loc, ParseData *pd ) } if ( unusedBits && keyOps->alphType->isSigned && ul >> (size * 8 - 1) ) - ul |= (0xffffffff >> (size*8 ) ) << (size*8); + ul |= ( -1L >> (size*8) ) << (size*8); return Key( (long)ul ); } @@ -454,7 +453,8 @@ ParseData::ParseData( const char *fileName, char *sectionName, exportsRootName(0), nextEpsilonResolvedLink(0), nextLongestMatchId(1), - lmRequiresErrorState(false) + lmRequiresErrorState(false), + cgd(0) { /* Initialize the dictionary of graphs. This is our symbol table. The * initialization needs to be done on construction which happens at the @@ -829,8 +829,8 @@ void ParseData::createBuiltin( const char *name, BuiltinMachine builtin ) { Expression *expression = new Expression( builtin ); Join *join = new Join( expression ); - JoinOrLm *joinOrLm = new JoinOrLm( join ); - VarDef *varDef = new VarDef( name, joinOrLm ); + MachineDef *machineDef = new MachineDef( join ); + VarDef *varDef = new VarDef( name, machineDef ); GraphDictEl *graphDictEl = new GraphDictEl( name, varDef ); graphDict.insert( graphDictEl ); } @@ -971,7 +971,7 @@ Action *ParseData::newAction( const char *name, InlineList *inlineList ) InputLoc loc; loc.line = 1; loc.col = 1; - loc.fileName = ""; + loc.fileName = "NONE"; Action *action = new Action( loc, name, inlineList, nextCondId++ ); action->actionRefs.append( rootName ); @@ -1432,16 +1432,7 @@ void ParseData::generateReduced( InputData &inputData ) { beginProcessing(); - /* Open the definition. */ - CodeGenMapEl *mapEl = inputData.codeGenMap.find( sectionName ); - CodeGenData *cgd = 0; - if ( mapEl != 0 ) - cgd = mapEl->value; - else { - cgd = makeCodeGen( inputData.inputFileName, sectionName, - *inputData.outStream, inputData.wantComplete ); - inputData.codeGenMap.insert( sectionName, cgd ); - } + cgd = makeCodeGen( inputData.inputFileName, sectionName, *inputData.outStream ); /* Make the generator. */ BackendGen backendGen( sectionName, this, sectionGraph, cgd ); @@ -1456,32 +1447,6 @@ void ParseData::generateReduced( InputData &inputData ) } } -/* Send eof to all parsers. */ -void terminateAllParsers( ) -{ - /* FIXME: a proper token is needed here. Suppose we should use the - * location of EOF in the last file that the parser was referenced in. */ - InputLoc loc; - loc.fileName = ""; - loc.line = 0; - loc.col = 0; - for ( ParserDict::Iter pdel = parserDict; pdel.lte(); pdel++ ) - pdel->value->token( loc, Parser_tk_eof, 0, 0 ); -} - -void writeLanguage( std::ostream &out ) -{ - out << " lang=\""; - switch ( hostLang->lang ) { - case HostLang::C: out << "C"; break; - case HostLang::D: out << "D"; break; - case HostLang::Java: out << "Java"; break; - case HostLang::Ruby: out << "Ruby"; break; - case HostLang::CSharp: out << "C#"; break; - } - out << "\""; -} - void ParseData::generateXML( ostream &out ) { beginProcessing(); @@ -1499,66 +1464,3 @@ void ParseData::generateXML( ostream &out ) } } -void writeMachines( std::ostream &out, std::string hostData, const char *inputFileName ) -{ - if ( machineSpec == 0 && machineName == 0 ) { - /* No machine spec or machine name given. Generate everything. */ - for ( ParserDict::Iter parser = parserDict; parser.lte(); parser++ ) { - ParseData *pd = parser->value->pd; - if ( pd->instanceList.length() > 0 ) - pd->prepareMachineGen( 0 ); - } - - if ( gblErrorCount == 0 ) { - out << "\n"; - for ( ParserDict::Iter parser = parserDict; parser.lte(); parser++ ) { - ParseData *pd = parser->value->pd; - if ( pd->instanceList.length() > 0 ) - pd->generateXML( out ); - } - out << hostData; - out << "\n"; - } - } - else if ( parserDict.length() > 0 ) { - /* There is either a machine spec or machine name given. */ - ParseData *parseData = 0; - GraphDictEl *graphDictEl = 0; - - /* Traverse the sections, break out when we find a section/machine - * that matches the one specified. */ - for ( ParserDict::Iter parser = parserDict; parser.lte(); parser++ ) { - ParseData *checkPd = parser->value->pd; - if ( machineSpec == 0 || strcmp( checkPd->sectionName, machineSpec ) == 0 ) { - GraphDictEl *checkGdEl = 0; - if ( machineName == 0 || (checkGdEl = - checkPd->graphDict.find( machineName )) != 0 ) - { - /* Have a machine spec and/or machine name that matches - * the -M/-S options. */ - parseData = checkPd; - graphDictEl = checkGdEl; - break; - } - } - } - - if ( parseData == 0 ) - error() << "could not locate machine specified with -S and/or -M" << endl; - else { - /* Section/Machine to emit was found. Prepare and emit it. */ - parseData->prepareMachineGen( graphDictEl ); - if ( gblErrorCount == 0 ) { - out << "\n"; - parseData->generateXML( out ); - out << hostData; - out << "\n"; - } - } - } -} -