diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lexer.h | 5 | ||||
| -rw-r--r-- | src/myriad.cpp | 12 | ||||
| -rw-r--r-- | src/myriad.h | 3 | ||||
| -rw-r--r-- | src/parser.cpp | 14 |
4 files changed, 27 insertions, 7 deletions
diff --git a/src/lexer.h b/src/lexer.h index e8a17b5..2cb5f51 100644 --- a/src/lexer.h +++ b/src/lexer.h | |||
| @@ -29,9 +29,10 @@ namespace Bu | |||
| 29 | 29 | ||
| 30 | template<class t> | 30 | template<class t> |
| 31 | Token( TokenType iToken, const t &v ) : | 31 | Token( TokenType iToken, const t &v ) : |
| 32 | iToken( iToken ), | 32 | iToken( iToken )//, |
| 33 | vExtra( v ) | 33 | // vExtra( v ) |
| 34 | { | 34 | { |
| 35 | vExtra = v; | ||
| 35 | } | 36 | } |
| 36 | TokenType iToken; | 37 | TokenType iToken; |
| 37 | Bu::Variant vExtra; | 38 | Bu::Variant vExtra; |
diff --git a/src/myriad.cpp b/src/myriad.cpp index 8650a1c..c3eb97e 100644 --- a/src/myriad.cpp +++ b/src/myriad.cpp | |||
| @@ -472,6 +472,18 @@ int Bu::Myriad::getStreamSize( int iId ) | |||
| 472 | return findStream( iId )->iSize; | 472 | return findStream( iId )->iSize; |
| 473 | } | 473 | } |
| 474 | 474 | ||
| 475 | bool Bu::Myriad::hasStream( int iId ) | ||
| 476 | { | ||
| 477 | try | ||
| 478 | { | ||
| 479 | findStream( iId ); | ||
| 480 | return true; | ||
| 481 | }catch(...) | ||
| 482 | { | ||
| 483 | return false; | ||
| 484 | } | ||
| 485 | } | ||
| 486 | |||
| 475 | Bu::MyriadStream Bu::Myriad::openStream( int iId ) | 487 | Bu::MyriadStream Bu::Myriad::openStream( int iId ) |
| 476 | { | 488 | { |
| 477 | //sio << "Myriad: Request to open stream: " << iId << sio.nl; | 489 | //sio << "Myriad: Request to open stream: " << iId << sio.nl; |
diff --git a/src/myriad.h b/src/myriad.h index 84f273e..79c3cda 100644 --- a/src/myriad.h +++ b/src/myriad.h | |||
| @@ -31,7 +31,7 @@ namespace Bu | |||
| 31 | invalidStreamId, | 31 | invalidStreamId, |
| 32 | protectedStream | 32 | protectedStream |
| 33 | }; | 33 | }; |
| 34 | subExceptionDeclEnd() | 34 | subExceptionDeclEnd(); |
| 35 | 35 | ||
| 36 | /** | 36 | /** |
| 37 | * Myriad block-allocated stream multiplexing system. This is a system for | 37 | * Myriad block-allocated stream multiplexing system. This is a system for |
| @@ -132,6 +132,7 @@ namespace Bu | |||
| 132 | 132 | ||
| 133 | Bu::Array<int> getStreamIds(); | 133 | Bu::Array<int> getStreamIds(); |
| 134 | int getStreamSize( int iId ); | 134 | int getStreamSize( int iId ); |
| 135 | bool hasStream( int iId ); | ||
| 135 | 136 | ||
| 136 | int getNumStreams(); | 137 | int getNumStreams(); |
| 137 | int getBlockSize(); | 138 | int getBlockSize(); |
diff --git a/src/parser.cpp b/src/parser.cpp index b563691..e4e8ae5 100644 --- a/src/parser.cpp +++ b/src/parser.cpp | |||
| @@ -26,9 +26,8 @@ void Bu::Parser::parse() | |||
| 26 | { | 26 | { |
| 27 | int iCurNt = iRootNonTerminal; | 27 | int iCurNt = iRootNonTerminal; |
| 28 | Lexer::Token *ptCur = sLexer.peek()->nextToken(); | 28 | Lexer::Token *ptCur = sLexer.peek()->nextToken(); |
| 29 | //Lexer::Token *ptNext = sLexer.peek()->nextToken(); | 29 | sio << "Token: " << sLexer.peek()->tokenToString( *ptCur ) << sio.nl; |
| 30 | selectProduction( iCurNt, ptCur ); | 30 | selectProduction( iCurNt, ptCur ); |
| 31 | sio << "Token: " << *ptCur << sio.nl; | ||
| 32 | 31 | ||
| 33 | while( !sState.isEmpty() ) | 32 | while( !sState.isEmpty() ) |
| 34 | { | 33 | { |
| @@ -43,7 +42,7 @@ void Bu::Parser::parse() | |||
| 43 | advanceState(); | 42 | advanceState(); |
| 44 | delete ptCur; | 43 | delete ptCur; |
| 45 | ptCur = sLexer.peek()->nextToken(); | 44 | ptCur = sLexer.peek()->nextToken(); |
| 46 | sio << "Token: " << *ptCur << sio.nl; | 45 | sio << "Token: " << sLexer.peek()->tokenToString( *ptCur ) << sio.nl; |
| 47 | } | 46 | } |
| 48 | else | 47 | else |
| 49 | { | 48 | { |
| @@ -60,7 +59,7 @@ void Bu::Parser::parse() | |||
| 60 | sToken.push( ptCur ); | 59 | sToken.push( ptCur ); |
| 61 | 60 | ||
| 62 | ptCur = sLexer.peek()->nextToken(); | 61 | ptCur = sLexer.peek()->nextToken(); |
| 63 | sio << "Token: " << *ptCur << sio.nl; | 62 | sio << "Token: " << sLexer.peek()->tokenToString( *ptCur ) << sio.nl; |
| 64 | } | 63 | } |
| 65 | else | 64 | else |
| 66 | { | 65 | { |
| @@ -99,12 +98,15 @@ bool Bu::Parser::selectProduction( int iNt, Lexer::Token *ptCur ) | |||
| 99 | { | 98 | { |
| 100 | if( (*i).isEmpty() ) | 99 | if( (*i).isEmpty() ) |
| 101 | continue; | 100 | continue; |
| 101 | sio << "-->(Attempting production " << iNt << ":" << j << ": " | ||
| 102 | << (*i).first() << ")" << sio.nl; | ||
| 102 | if( (*i).first().eType == State::typeTerminal || | 103 | if( (*i).first().eType == State::typeTerminal || |
| 103 | (*i).first().eType == State::typeTerminalPush ) | 104 | (*i).first().eType == State::typeTerminalPush ) |
| 104 | { | 105 | { |
| 105 | if( (*i).first().iIndex == ptCur->iToken ) | 106 | if( (*i).first().iIndex == ptCur->iToken ) |
| 106 | { | 107 | { |
| 107 | sState.push( (*i).begin() ); | 108 | sState.push( (*i).begin() ); |
| 109 | sio.incIndent(); | ||
| 108 | sio << "Pushing production " << j << " from nt " << iNt | 110 | sio << "Pushing production " << j << " from nt " << iNt |
| 109 | << sio.nl; | 111 | << sio.nl; |
| 110 | return true; | 112 | return true; |
| @@ -113,10 +115,12 @@ bool Bu::Parser::selectProduction( int iNt, Lexer::Token *ptCur ) | |||
| 113 | else if( (*i).first().eType == State::typeNonTerminal ) | 115 | else if( (*i).first().eType == State::typeNonTerminal ) |
| 114 | { | 116 | { |
| 115 | sState.push( (*i).begin() ); | 117 | sState.push( (*i).begin() ); |
| 118 | sio.incIndent(); | ||
| 116 | sio << "Pushing production " << j << " from nt " << iNt | 119 | sio << "Pushing production " << j << " from nt " << iNt |
| 117 | << " as test." << sio.nl; | 120 | << " as test." << sio.nl; |
| 118 | if( !selectProduction( (*i).first().iIndex, ptCur ) ) | 121 | if( !selectProduction( (*i).first().iIndex, ptCur ) ) |
| 119 | { | 122 | { |
| 123 | sio.decIndent(); | ||
| 120 | sState.pop(); | 124 | sState.pop(); |
| 121 | sio << "Production " << j << " from nt " << iNt | 125 | sio << "Production " << j << " from nt " << iNt |
| 122 | << " didn't work out." << sio.nl; | 126 | << " didn't work out." << sio.nl; |
| @@ -129,6 +133,7 @@ bool Bu::Parser::selectProduction( int iNt, Lexer::Token *ptCur ) | |||
| 129 | } | 133 | } |
| 130 | if( nt.bCanSkip ) | 134 | if( nt.bCanSkip ) |
| 131 | return true; | 135 | return true; |
| 136 | sio << "-->(Found nothing)" << sio.nl; | ||
| 132 | return false; | 137 | return false; |
| 133 | } | 138 | } |
| 134 | 139 | ||
| @@ -140,6 +145,7 @@ void Bu::Parser::advanceState() | |||
| 140 | sState.peek()++; | 145 | sState.peek()++; |
| 141 | if( !sState.peek() ) | 146 | if( !sState.peek() ) |
| 142 | { | 147 | { |
| 148 | sio.decIndent(); | ||
| 143 | sState.pop(); | 149 | sState.pop(); |
| 144 | sio << "State advanced, End of production." << sio.nl; | 150 | sio << "State advanced, End of production." << sio.nl; |
| 145 | return; | 151 | return; |
