00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #line 17 "Parser.yy"
00040
00041
00042 #include <algorithm>
00043 #include <cstdio>
00044 #include <cstdarg>
00045 #include <iterator>
00046 #include <string>
00047 #include <vector>
00048 #include "torc/generic/parser/EdifContext.hpp"
00049 #include "torc/generic/parser/ParserHelpers.hpp"
00050 #include "torc/generic/util/Log.hpp"
00051 #include "torc/generic/om/PointerTypes.hpp"
00052 #include "torc/generic/om/PortAttributes.hpp"
00053 #include "torc/generic/om/NetAttributes.hpp"
00054 #include "torc/generic/om/PortRefCreator.hpp"
00055 #include "torc/generic/om/TimeStamp.hpp"
00056 #include "torc/generic/om/Written.hpp"
00057 #include "torc/generic/om/InterfaceAttributes.hpp"
00058 #include "torc/generic/om/LogicValueAttributes.hpp"
00059
00060
00061
00062
00063 #line 64 "Parser.cc"
00064
00065
00066 #include "torc/generic/parser/y.tab.h"
00067
00068
00069
00070
00071 #line 580 "Parser.yy"
00072
00073
00074 #include "torc/generic/parser/Driver.hpp"
00075 #include "torc/generic/parser/Scanner.hpp"
00076 #include "torc/generic/om/Root.hpp"
00077 #include "torc/generic/om/ObjectFactory.hpp"
00078 #include "torc/generic/om/Library.hpp"
00079 #include "torc/generic/parser/Linker.hpp"
00080 #include "torc/generic/om/VisitorApplier.hpp"
00081
00082
00083
00084
00085 #undef yylex
00086 #define yylex inDriver.getLexer()->lex
00087
00088 namespace {
00089
00090 std::string
00091 constructErrorMessage( const char *fmt, ... )
00092 {
00093 char msg[BUFSIZ];
00094 va_list args;
00095 va_start( args, fmt );
00096 int nbytes = vsnprintf( msg, BUFSIZ, fmt, args );
00097 va_end( args );
00098 if( BUFSIZ <= nbytes )
00099 {
00100 return std::string();
00101 }
00102 return std::string( msg );
00103 }
00104
00105 using namespace torc::generic;
00106
00107 class AssignedParamCreator
00108 :public SingleParameter::Visitor,
00109 public ParameterArrayElement::Visitor,
00110 public ParameterArray::Visitor {
00111 public:
00112 void
00113 visit( SingleParameter &single ) throw(Error)
00114 try
00115 {
00116 SingleParameterSharedPtr singleP;
00117 mFactory->create( singleP );
00118 singleP->setName( single.getName() );
00119 singleP->setValue( mValues[0] );
00120 mMap->set( mContext, single.getName(), singleP );
00121 }
00122 catch( Error &e )
00123 {
00124 e.setCurrentLocation(
00125 __FUNCTION__, __FILE__, __LINE__ );
00126 throw;
00127 }
00128
00129 void
00130 visit( ParameterArrayElement &element ) throw(Error)
00131 try
00132 {
00133 ParameterSharedPtr array
00134 = element.getParentCollection();
00135 if( array == mMap->get( mContext, array->getName() ))
00136 {
00137 AssignedParamCreator creator(
00138 mInstance, mContext, mMap, mFactory, mValues );
00139 array->accept( creator );
00140 }
00141 std::vector<size_t> indices = element.getIndices();
00142 ParameterSharedPtr arrayP
00143 = mMap->get( mContext, array->getName() );
00144 ParameterSharedPtr bit = arrayP->get( indices );
00145 bit->setValue( mValues[0] );
00146 }
00147 catch( Error &e )
00148 {
00149 e.setCurrentLocation(
00150 __FUNCTION__, __FILE__, __LINE__ );
00151 throw;
00152 }
00153
00154 void
00155 visit( ParameterArray &array ) throw(Error)
00156 try
00157 {
00158 std::vector<size_t> limits;
00159 array.getLimits( limits );
00160 ParameterArraySharedPtr arrayP;
00161 mFactory->create( arrayP );
00162 arrayP->setName( array.getName() );
00163 std::vector<size_t> dimensions;
00164 array.getLimits( dimensions );
00165 arrayP->constructChildren( mFactory, limits );
00166 std::vector< ParameterSharedPtr > children;
00167 arrayP->getChildren( children );
00168 std::vector< ParameterSharedPtr >::iterator
00169 it = children.begin();
00170 std::vector< ParameterSharedPtr >::iterator
00171 end = children.end();
00172 size_t i = 0;
00173 for(; it != end; ++it, i++ )
00174 {
00175 (*it)->setValue( mValues[i] );
00176 }
00177 mMap->set( mContext, array.getName(), arrayP );
00178 }
00179 catch( Error &e )
00180 {
00181 e.setCurrentLocation(
00182 __FUNCTION__, __FILE__, __LINE__ );
00183 throw;
00184 }
00185
00186 AssignedParamCreator(
00187 const InstanceSharedPtr &inInstance,
00188 ParameterContext inContext,
00189 const ParameterMapSharedPtr &inMap,
00190 const ObjectFactorySharedPtr &inFactory,
00191 std::vector<Value> &inValues )
00192 :mInstance( inInstance ),
00193 mContext( inContext ),
00194 mMap( inMap ),
00195 mFactory( inFactory ),
00196 mValues( inValues ) {
00197 }
00198
00199 ~AssignedParamCreator() throw() {
00200 }
00201
00202 private:
00203 InstanceSharedPtr mInstance;
00204 ParameterContext mContext;
00205 ParameterMapSharedPtr mMap;
00206 ObjectFactorySharedPtr mFactory;
00207 std::vector<Value> &mValues;
00208 };
00209
00210 template<typename _Connectable>
00211 void
00212 connectibleFinder( std::vector< std::string > &nestedNames,
00213 boost::shared_ptr<_Connectable> &conn ) throw(Error)
00214 {
00215 std::vector< std::string >::reverse_iterator name
00216 = nestedNames.rbegin();
00217 std::vector< std::string >::reverse_iterator end
00218 = nestedNames.rend();
00219 ++name;
00220 if( !conn )
00221 {
00222 std::string message = constructErrorMessage(
00223 "Nested connectible name %s not found",
00224 (*name).c_str() );
00225 log("%s\n", message.c_str());
00226 Error e( eMessageIdErrorNullPointer,
00227 __FUNCTION__, __FILE__, __LINE__ );
00228 throw e;
00229 }
00230 for( ;name != end; ++name )
00231 {
00232 if( eCompositionTypeBundle
00233 != conn->getCompositionType() )
00234 {
00235 log("Item is not a bundle .. invalid nesting\n");
00236 Error e( eMessageIdErrorUnsupoortedOperation,
00237 __FUNCTION__, __FILE__, __LINE__ );
00238 e.saveContextData("Name", *name );
00239 e.saveContextData("Operation",
00240 std::string( "Find child" ) );
00241 throw e;
00242 }
00243 std::vector< boost::shared_ptr<_Connectable> > children;
00244 conn->getChildren( children );
00245 bool found = false;
00246 for( typename
00247 std::vector< boost::shared_ptr<_Connectable> >::iterator
00248 it = children.begin(); it != children.end(); ++it )
00249 {
00250 if( (*it)->getName() == *name )
00251 {
00252 conn = (*it);
00253 found = true;
00254 break;
00255 }
00256 }
00257 if( !found )
00258 {
00259 std::string message = constructErrorMessage(
00260 "Nested connectible %s not found",
00261 (*name).c_str() );
00262 log("%s\n", message.c_str());
00263 Error e( eMessageIdErrorItemNotFound,
00264 __FUNCTION__, __FILE__, __LINE__ );
00265 e.saveContextData("Name", (*name));
00266 throw e;
00267 }
00268 }
00269 }
00270
00271 template<typename _Connectable>
00272 void
00273 portJoiner( NameData *inPortNameData,
00274 const boost::shared_ptr<_Connectable> &inConn,
00275 const NetSharedPtr &inNet ) throw(Error)
00276 {
00277 try
00278 {
00279 if( inPortNameData->mIndices.empty() )
00280 {
00281
00282 inConn->connect( inNet );
00283 }
00284 else
00285 {
00286 boost::shared_ptr<_Connectable> bit
00287 = inConn->get( inPortNameData->mIndices);
00288 bit->connect( inNet );
00289 }
00290 log( "Net %s connected with connectible %s\n",
00291 inNet->getName().c_str(), inConn->getName().c_str() );
00292 }
00293 catch( Error &e )
00294 {
00295 e.setCurrentLocation( __FUNCTION__, __FILE__, __LINE__ );
00296 throw;
00297 }
00298 }
00299
00300 void
00301 connectElementToNet( PortRefData *inPortData,
00302 const EdifContextSharedPtr &inContext,
00303 Parser::location_type& inLocation,
00304 std::string &outErrorMessage ) throw(Error)
00305 {
00306 PortRefData *portData = inPortData;
00307 std::vector< std::string > nestedNames;
00308 PortRefData *currPortRef = inPortData;
00309 PortRefData *nextPortRef = portData->mParentPort;
00310 nestedNames.push_back(currPortRef->mPortName->mName);
00311 while( nextPortRef )
00312 {
00313 currPortRef = nextPortRef;
00314 nestedNames.push_back( nextPortRef->mPortName->mName );
00315 nextPortRef = currPortRef->mParentPort;
00316 }
00317 bool isPort = ( NULL == currPortRef->mInstanceName );
00318 NameData *portNameData = currPortRef->mPortName;
00319 std::string topName = *(nestedNames.rbegin());
00320 EdifContextSharedPtr ctx = inContext;
00321 ViewSharedPtr view = ctx->getCurrentView();
00322 if( isPort )
00323 {
00324 PortSharedPtr port = view->findPort( topName );
00325 if( !port )
00326 {
00327 std::string message = constructErrorMessage(
00328 "No port %s found",
00329 portNameData->mName.c_str());
00330 log("%s\n", message.c_str());
00331 Error e( eMessageIdParserError,
00332 __FUNCTION__, __FILE__, __LINE__ );
00333 e.saveContextData( "Parser error message", message );
00334 e.saveContextData( "Filename", inLocation.begin.filename );
00335 e.saveContextData( "StartLine", inLocation.begin.line );
00336 e.saveContextData( "EndLine", inLocation.end.line );
00337 outErrorMessage = message;
00338 throw e;
00339 }
00340 try
00341 {
00342 NetSharedPtr net = ctx->getCurrentNet();
00343 connectibleFinder( nestedNames, port );
00344 portJoiner( portData->mPortName, port, net );
00345 }
00346 catch( Error &e )
00347 {
00348 std::string message = constructErrorMessage(
00349 "Unable to connect port : %s", port->getName().c_str());
00350 log("%s\n", message.c_str());
00351 e.setCurrentLocation( __FUNCTION__,
00352 __FILE__, __LINE__ );
00353 e.saveContextData( "Parser error message", message );
00354 e.saveContextData( "Filename", inLocation.begin.filename );
00355 e.saveContextData( "StartLine", inLocation.begin.line );
00356 e.saveContextData( "EndLine", inLocation.end.line );
00357 outErrorMessage = message;
00358 throw e;
00359 }
00360 }
00361 else
00362 {
00363 NameData *instanceName
00364 = currPortRef->mInstanceName;
00365 InstanceSharedPtr instance
00366 = view->findInstance(
00367 instanceName->mName );
00368 if( !instance )
00369 {
00370 std::string message = constructErrorMessage(
00371 "Instance %s not known",
00372 instanceName->mName.c_str() );
00373 log("%s\n", message.c_str());
00374 Error e( eMessageIdParserError,
00375 __FUNCTION__, __FILE__, __LINE__ );
00376 e.saveContextData( "Parser error message", message );
00377 e.saveContextData( "Filename", inLocation.begin.filename );
00378 e.saveContextData( "StartLine", inLocation.begin.line );
00379 e.saveContextData( "EndLine", inLocation.end.line );
00380 outErrorMessage = message;
00381 throw e;
00382 }
00383 if( !instanceName->mIndices.empty() )
00384 {
00385 InstanceSharedPtr bit
00386 = instance->get( instanceName->mIndices );
00387 instance = bit;
00388 }
00389 PortReferenceSharedPtr portRef
00390 = instance->findPortReference( topName );
00391 if( !portRef )
00392 {
00393 std::string message = constructErrorMessage(
00394 "No port ref %s found",
00395 portNameData->mName.c_str());
00396 log("%s\n", message.c_str());
00397 Error e( eMessageIdParserError,
00398 __FUNCTION__, __FILE__, __LINE__ );
00399 e.saveContextData( "Parser error message", message );
00400 e.saveContextData( "Filename", inLocation.begin.filename );
00401 e.saveContextData( "StartLine", inLocation.begin.line );
00402 e.saveContextData( "EndLine", inLocation.end.line );
00403 outErrorMessage = message;
00404 throw e;
00405 }
00406 try
00407 {
00408 connectibleFinder( nestedNames, portRef );
00409 portJoiner( portData->mPortName, portRef,
00410 ctx->getCurrentNet() );
00411 }
00412 catch( Error &e )
00413 {
00414 std::string message = constructErrorMessage(
00415 "Unable to connect port ref : %s", portRef->getName().c_str());
00416 log("%s\n", message.c_str());
00417 e.setCurrentLocation( __FUNCTION__,
00418 __FILE__, __LINE__ );
00419 e.saveContextData( "Parser error message", message );
00420 e.saveContextData( "Filename", inLocation.begin.filename );
00421 e.saveContextData( "StartLine", inLocation.begin.line );
00422 e.saveContextData( "EndLine", inLocation.end.line );
00423 outErrorMessage = message;
00424 throw e;
00425 }
00426 }
00427 }
00428
00429 }
00430
00431
00432
00433
00434 #line 435 "Parser.cc"
00435
00436 #ifndef YY_
00437 # if YYENABLE_NLS
00438 # if ENABLE_NLS
00439 # include <libintl.h>
00440 # define YY_(msgid) dgettext ("bison-runtime", msgid)
00441 # endif
00442 # endif
00443 # ifndef YY_
00444 # define YY_(msgid) msgid
00445 # endif
00446 #endif
00447
00448
00449 #define YYUSE(e) ((void) (e))
00450
00451
00452 #if YYDEBUG
00453
00454
00455 # define YYCDEBUG if (yydebug_) (*yycdebug_)
00456
00457 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
00458 do { \
00459 if (yydebug_) \
00460 { \
00461 *yycdebug_ << Title << ' '; \
00462 yy_symbol_print_ ((Type), (Value), (Location)); \
00463 *yycdebug_ << std::endl; \
00464 } \
00465 } while (false)
00466
00467 # define YY_REDUCE_PRINT(Rule) \
00468 do { \
00469 if (yydebug_) \
00470 yy_reduce_print_ (Rule); \
00471 } while (false)
00472
00473 # define YY_STACK_PRINT() \
00474 do { \
00475 if (yydebug_) \
00476 yystack_print_ (); \
00477 } while (false)
00478
00479 #else
00480
00481 # define YYCDEBUG if (false) std::cerr
00482 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
00483 # define YY_REDUCE_PRINT(Rule)
00484 # define YY_STACK_PRINT()
00485
00486 #endif
00487
00488 #define yyerrok (yyerrstatus_ = 0)
00489 #define yyclearin (yychar = yyempty_)
00490
00491 #define YYACCEPT goto yyacceptlab
00492 #define YYABORT goto yyabortlab
00493 #define YYERROR goto yyerrorlab
00494 #define YYRECOVERING() (!!yyerrstatus_)
00495
00496
00497
00498 #line 58 "Parser.yy"
00499 namespace torc { namespace generic {
00500
00501
00502 #line 503 "Parser.cc"
00503 #if YYERROR_VERBOSE
00504
00505
00506
00507
00508
00509
00510 std::string
00511 Parser::yytnamerr_ (const char *yystr)
00512 {
00513 if (*yystr == '"')
00514 {
00515 std::string yyr = "";
00516 char const *yyp = yystr;
00517
00518 for (;;)
00519 switch (*++yyp)
00520 {
00521 case '\'':
00522 case ',':
00523 goto do_not_strip_quotes;
00524
00525 case '\\':
00526 if (*++yyp != '\\')
00527 goto do_not_strip_quotes;
00528
00529 default:
00530 yyr += *yyp;
00531 break;
00532
00533 case '"':
00534 return yyr;
00535 }
00536 do_not_strip_quotes: ;
00537 }
00538
00539 return yystr;
00540 }
00541
00542 #endif
00543
00544
00545 Parser::Parser (class Driver& inDriver_yyarg)
00546 :
00547 #if YYDEBUG
00548 yydebug_ (false),
00549 yycdebug_ (&std::cerr),
00550 #endif
00551 inDriver (inDriver_yyarg)
00552 {
00553 }
00554
00555 Parser::~Parser ()
00556 {
00557 }
00558
00559 #if YYDEBUG
00560
00561
00562
00563
00564 inline void
00565 Parser::yy_symbol_value_print_ (int yytype,
00566 const semantic_type* yyvaluep, const location_type* yylocationp)
00567 {
00568 YYUSE (yylocationp);
00569 YYUSE (yyvaluep);
00570 switch (yytype)
00571 {
00572 default:
00573 break;
00574 }
00575 }
00576
00577
00578 void
00579 Parser::yy_symbol_print_ (int yytype,
00580 const semantic_type* yyvaluep, const location_type* yylocationp)
00581 {
00582 *yycdebug_ << (yytype < yyntokens_ ? "token" : "nterm")
00583 << ' ' << yytname_[yytype] << " ("
00584 << *yylocationp << ": ";
00585 yy_symbol_value_print_ (yytype, yyvaluep, yylocationp);
00586 *yycdebug_ << ')';
00587 }
00588 #endif
00589
00590 void
00591 Parser::yydestruct_ (const char* yymsg,
00592 int yytype, semantic_type* yyvaluep, location_type* yylocationp)
00593 {
00594 YYUSE (yylocationp);
00595 YYUSE (yymsg);
00596 YYUSE (yyvaluep);
00597
00598 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
00599
00600 switch (yytype)
00601 {
00602 case 4:
00603
00604
00605 #line 578 "Parser.yy"
00606 { delete (yyvaluep->stringVal); };
00607
00608
00609 #line 610 "Parser.cc"
00610 break;
00611 case 5:
00612
00613
00614 #line 573 "Parser.yy"
00615 { };
00616
00617
00618 #line 619 "Parser.cc"
00619 break;
00620 case 6:
00621
00622
00623 #line 574 "Parser.yy"
00624 { };
00625
00626
00627 #line 628 "Parser.cc"
00628 break;
00629 case 7:
00630
00631
00632 #line 578 "Parser.yy"
00633 { delete (yyvaluep->stringVal); };
00634
00635
00636 #line 637 "Parser.cc"
00637 break;
00638 case 300:
00639
00640
00641 #line 575 "Parser.yy"
00642 { };
00643
00644
00645 #line 646 "Parser.cc"
00646 break;
00647 case 301:
00648
00649
00650 #line 573 "Parser.yy"
00651 { };
00652
00653
00654 #line 655 "Parser.cc"
00655 break;
00656 case 302:
00657
00658
00659 #line 576 "Parser.yy"
00660 { };
00661
00662
00663 #line 664 "Parser.cc"
00664 break;
00665 case 303:
00666
00667
00668 #line 578 "Parser.yy"
00669 { delete (yyvaluep->valueData); };
00670
00671
00672 #line 673 "Parser.cc"
00673 break;
00674 case 304:
00675
00676
00677 #line 578 "Parser.yy"
00678 { delete (yyvaluep->valueData); };
00679
00680
00681 #line 682 "Parser.cc"
00682 break;
00683 case 313:
00684
00685
00686 #line 575 "Parser.yy"
00687 { };
00688
00689
00690 #line 691 "Parser.cc"
00691 break;
00692 case 314:
00693
00694
00695 #line 578 "Parser.yy"
00696 { delete (yyvaluep->arrayDimensions); };
00697
00698
00699 #line 700 "Parser.cc"
00700 break;
00701 case 315:
00702
00703
00704 #line 578 "Parser.yy"
00705 { delete (yyvaluep->arrayDimensions); };
00706
00707
00708 #line 709 "Parser.cc"
00709 break;
00710 case 322:
00711
00712
00713 #line 578 "Parser.yy"
00714 { delete (yyvaluep->stringVal); };
00715
00716
00717 #line 718 "Parser.cc"
00718 break;
00719 case 330:
00720
00721
00722 #line 578 "Parser.yy"
00723 { delete (yyvaluep->valueData); };
00724
00725
00726 #line 727 "Parser.cc"
00727 break;
00728 case 331:
00729
00730
00731 #line 578 "Parser.yy"
00732 { delete (yyvaluep->valueData); };
00733
00734
00735 #line 736 "Parser.cc"
00736 break;
00737 case 332:
00738
00739
00740 #line 573 "Parser.yy"
00741 { };
00742
00743
00744 #line 745 "Parser.cc"
00745 break;
00746 case 333:
00747
00748
00749 #line 573 "Parser.yy"
00750 { };
00751
00752
00753 #line 754 "Parser.cc"
00754 break;
00755 case 334:
00756
00757
00758 #line 573 "Parser.yy"
00759 { };
00760
00761
00762 #line 763 "Parser.cc"
00763 break;
00764 case 335:
00765
00766
00767 #line 573 "Parser.yy"
00768 { };
00769
00770
00771 #line 772 "Parser.cc"
00772 break;
00773 case 342:
00774
00775
00776 #line 575 "Parser.yy"
00777 { };
00778
00779
00780 #line 781 "Parser.cc"
00781 break;
00782 case 343:
00783
00784
00785 #line 578 "Parser.yy"
00786 { delete (yyvaluep->cellRefData); };
00787
00788
00789 #line 790 "Parser.cc"
00790 break;
00791 case 344:
00792
00793
00794 #line 578 "Parser.yy"
00795 { delete (yyvaluep->cellRefData); };
00796
00797
00798 #line 799 "Parser.cc"
00799 break;
00800 case 345:
00801
00802
00803 #line 578 "Parser.yy"
00804 { delete (yyvaluep->viewRefData); };
00805
00806
00807 #line 808 "Parser.cc"
00808 break;
00809 case 346:
00810
00811
00812 #line 578 "Parser.yy"
00813 { delete (yyvaluep->viewRefData); };
00814
00815
00816 #line 817 "Parser.cc"
00817 break;
00818 case 347:
00819
00820
00821 #line 575 "Parser.yy"
00822 { };
00823
00824
00825 #line 826 "Parser.cc"
00826 break;
00827 case 348:
00828
00829
00830 #line 575 "Parser.yy"
00831 { };
00832
00833
00834 #line 835 "Parser.cc"
00835 break;
00836 case 350:
00837
00838
00839 #line 573 "Parser.yy"
00840 { };
00841
00842
00843 #line 844 "Parser.cc"
00844 break;
00845 case 357:
00846
00847
00848 #line 578 "Parser.yy"
00849 { delete (yyvaluep->stringVal); };
00850
00851
00852 #line 853 "Parser.cc"
00853 break;
00854 case 358:
00855
00856
00857 #line 578 "Parser.yy"
00858 { delete (yyvaluep->stringVal); };
00859
00860
00861 #line 862 "Parser.cc"
00862 break;
00863 case 361:
00864
00865
00866 #line 578 "Parser.yy"
00867 { delete (yyvaluep->logicListData); };
00868
00869
00870 #line 871 "Parser.cc"
00871 break;
00872 case 362:
00873
00874
00875 #line 578 "Parser.yy"
00876 { delete (yyvaluep->logicListData); };
00877
00878
00879 #line 880 "Parser.cc"
00880 break;
00881 case 369:
00882
00883
00884 #line 573 "Parser.yy"
00885 { };
00886
00887
00888 #line 889 "Parser.cc"
00889 break;
00890 case 370:
00891
00892
00893 #line 573 "Parser.yy"
00894 { };
00895
00896
00897 #line 898 "Parser.cc"
00898 break;
00899 case 371:
00900
00901
00902 #line 578 "Parser.yy"
00903 { delete (yyvaluep->valueData); };
00904
00905
00906 #line 907 "Parser.cc"
00907 break;
00908 case 375:
00909
00910
00911 #line 577 "Parser.yy"
00912 { };
00913
00914
00915 #line 916 "Parser.cc"
00916 break;
00917 case 376:
00918
00919
00920 #line 578 "Parser.yy"
00921 { delete (yyvaluep->pairStrData); };
00922
00923
00924 #line 925 "Parser.cc"
00925 break;
00926 case 377:
00927
00928
00929 #line 578 "Parser.yy"
00930 { delete (yyvaluep->stringVal); };
00931
00932
00933 #line 934 "Parser.cc"
00934 break;
00935 case 378:
00936
00937
00938 #line 577 "Parser.yy"
00939 { };
00940
00941
00942 #line 943 "Parser.cc"
00943 break;
00944 case 379:
00945
00946
00947 #line 577 "Parser.yy"
00948 { };
00949
00950
00951 #line 952 "Parser.cc"
00952 break;
00953 case 380:
00954
00955
00956 #line 577 "Parser.yy"
00957 { };
00958
00959
00960 #line 961 "Parser.cc"
00961 break;
00962 case 381:
00963
00964
00965 #line 577 "Parser.yy"
00966 { };
00967
00968
00969 #line 970 "Parser.cc"
00970 break;
00971 case 382:
00972
00973
00974 #line 577 "Parser.yy"
00975 { };
00976
00977
00978 #line 979 "Parser.cc"
00979 break;
00980 case 383:
00981
00982
00983 #line 577 "Parser.yy"
00984 { };
00985
00986
00987 #line 988 "Parser.cc"
00988 break;
00989 case 384:
00990
00991
00992 #line 577 "Parser.yy"
00993 { };
00994
00995
00996 #line 997 "Parser.cc"
00997 break;
00998 case 385:
00999
01000
01001 #line 577 "Parser.yy"
01002 { };
01003
01004
01005 #line 1006 "Parser.cc"
01006 break;
01007 case 386:
01008
01009
01010 #line 578 "Parser.yy"
01011 { delete (yyvaluep->portDelay); };
01012
01013
01014 #line 1015 "Parser.cc"
01015 break;
01016 case 387:
01017
01018
01019 #line 578 "Parser.yy"
01020 { delete (yyvaluep->portDelay); };
01021
01022
01023 #line 1024 "Parser.cc"
01024 break;
01025 case 392:
01026
01027
01028 #line 573 "Parser.yy"
01029 { };
01030
01031
01032 #line 1033 "Parser.cc"
01033 break;
01034 case 393:
01035
01036
01037 #line 573 "Parser.yy"
01038 { };
01039
01040
01041 #line 1042 "Parser.cc"
01042 break;
01043 case 396:
01044
01045
01046 #line 578 "Parser.yy"
01047 { delete (yyvaluep->cellRefData); };
01048
01049
01050 #line 1051 "Parser.cc"
01051 break;
01052 case 399:
01053
01054
01055 #line 578 "Parser.yy"
01056 { delete (yyvaluep->stringVal); };
01057
01058
01059 #line 1060 "Parser.cc"
01060 break;
01061 case 400:
01062
01063
01064 #line 578 "Parser.yy"
01065 { delete (yyvaluep->stringVal); };
01066
01067
01068 #line 1069 "Parser.cc"
01069 break;
01070 case 401:
01071
01072
01073 #line 575 "Parser.yy"
01074 { };
01075
01076
01077 #line 1078 "Parser.cc"
01078 break;
01079 case 407:
01080
01081
01082 #line 573 "Parser.yy"
01083 { };
01084
01085
01086 #line 1087 "Parser.cc"
01087 break;
01088 case 411:
01089
01090
01091 #line 578 "Parser.yy"
01092 { delete (yyvaluep->logicListData); };
01093
01094
01095 #line 1096 "Parser.cc"
01096 break;
01097 case 412:
01098
01099
01100 #line 578 "Parser.yy"
01101 { delete (yyvaluep->logicListData); };
01102
01103
01104 #line 1105 "Parser.cc"
01105 break;
01106 case 415:
01107
01108
01109 #line 577 "Parser.yy"
01110 { };
01111
01112
01113 #line 1114 "Parser.cc"
01114 break;
01115 case 465:
01116
01117
01118 #line 575 "Parser.yy"
01119 { };
01120
01121
01122 #line 1123 "Parser.cc"
01123 break;
01124 case 474:
01125
01126
01127 #line 578 "Parser.yy"
01128 { delete (yyvaluep->instanceInfo); };
01129
01130
01131 #line 1132 "Parser.cc"
01132 break;
01133 case 477:
01134
01135
01136 #line 578 "Parser.yy"
01137 { delete (yyvaluep->instanceRef); };
01138
01139
01140 #line 1141 "Parser.cc"
01141 break;
01142 case 478:
01143
01144
01145 #line 578 "Parser.yy"
01146 { delete (yyvaluep->instanceRef); };
01147
01148
01149 #line 1150 "Parser.cc"
01150 break;
01151 case 485:
01152
01153
01154 #line 575 "Parser.yy"
01155 { };
01156
01157
01158 #line 1159 "Parser.cc"
01159 break;
01160 case 487:
01161
01162
01163 #line 575 "Parser.yy"
01164 { };
01165
01166
01167 #line 1168 "Parser.cc"
01168 break;
01169 case 488:
01170
01171
01172 #line 573 "Parser.yy"
01173 { };
01174
01175
01176 #line 1177 "Parser.cc"
01177 break;
01178 case 489:
01179
01180
01181 #line 573 "Parser.yy"
01182 { };
01183
01184
01185 #line 1186 "Parser.cc"
01186 break;
01187 case 490:
01188
01189
01190 #line 578 "Parser.yy"
01191 { delete (yyvaluep->valueData); };
01192
01193
01194 #line 1195 "Parser.cc"
01195 break;
01196 case 491:
01197
01198
01199 #line 578 "Parser.yy"
01200 { delete (yyvaluep->valueData); };
01201
01202
01203 #line 1204 "Parser.cc"
01204 break;
01205 case 492:
01206
01207
01208 #line 578 "Parser.yy"
01209 { delete (yyvaluep->interfaceAttributes); };
01210
01211
01212 #line 1213 "Parser.cc"
01213 break;
01214 case 493:
01215
01216
01217 #line 578 "Parser.yy"
01218 { delete (yyvaluep->interfaceAttributes); };
01219
01220
01221 #line 1222 "Parser.cc"
01222 break;
01223 case 518:
01224
01225
01226 #line 575 "Parser.yy"
01227 { };
01228
01229
01230 #line 1231 "Parser.cc"
01231 break;
01232 case 520:
01233
01234
01235 #line 575 "Parser.yy"
01236 { };
01237
01238
01239 #line 1240 "Parser.cc"
01240 break;
01241 case 525:
01242
01243
01244 #line 575 "Parser.yy"
01245 { };
01246
01247
01248 #line 1249 "Parser.cc"
01249 break;
01250 case 530:
01251
01252
01253 #line 578 "Parser.yy"
01254 { delete (yyvaluep->portDelay); };
01255
01256
01257 #line 1258 "Parser.cc"
01258 break;
01259 case 531:
01260
01261
01262 #line 578 "Parser.yy"
01263 { delete (yyvaluep->valueData); };
01264
01265
01266 #line 1267 "Parser.cc"
01267 break;
01268 case 545:
01269
01270
01271 #line 578 "Parser.yy"
01272 { delete (yyvaluep->logicRefData); };
01273
01274
01275 #line 1276 "Parser.cc"
01276 break;
01277 case 546:
01278
01279
01280 #line 578 "Parser.yy"
01281 { delete (yyvaluep->logicRefData); };
01282
01283
01284 #line 1285 "Parser.cc"
01285 break;
01286 case 547:
01287
01288
01289 #line 575 "Parser.yy"
01290 { };
01291
01292
01293 #line 1294 "Parser.cc"
01294 break;
01295 case 548:
01296
01297
01298 #line 575 "Parser.yy"
01299 { };
01300
01301
01302 #line 1303 "Parser.cc"
01303 break;
01304 case 559:
01305
01306
01307 #line 578 "Parser.yy"
01308 { delete (yyvaluep->logicRefData); };
01309
01310
01311 #line 1312 "Parser.cc"
01312 break;
01313 case 560:
01314
01315
01316 #line 578 "Parser.yy"
01317 { delete (yyvaluep->logicRefData); };
01318
01319
01320 #line 1321 "Parser.cc"
01321 break;
01322 case 563:
01323
01324
01325 #line 578 "Parser.yy"
01326 { delete (yyvaluep->logicValueAttributes); };
01327
01328
01329 #line 1330 "Parser.cc"
01330 break;
01331 case 573:
01332
01333
01334 #line 575 "Parser.yy"
01335 { };
01336
01337
01338 #line 1339 "Parser.cc"
01339 break;
01340 case 574:
01341
01342
01343 #line 578 "Parser.yy"
01344 { delete (yyvaluep->arrayDimensions); };
01345
01346
01347 #line 1348 "Parser.cc"
01348 break;
01349 case 577:
01350
01351
01352 #line 578 "Parser.yy"
01353 { delete (yyvaluep->valueData); };
01354
01355
01356 #line 1357 "Parser.cc"
01357 break;
01358 case 578:
01359
01360
01361 #line 578 "Parser.yy"
01362 { delete (yyvaluep->valueData); };
01363
01364
01365 #line 1366 "Parser.cc"
01366 break;
01367 case 579:
01368
01369
01370 #line 578 "Parser.yy"
01371 { delete (yyvaluep->valueData); };
01372
01373
01374 #line 1375 "Parser.cc"
01375 break;
01376 case 580:
01377
01378
01379 #line 578 "Parser.yy"
01380 { delete (yyvaluep->valueData); };
01381
01382
01383 #line 1384 "Parser.cc"
01384 break;
01385 case 581:
01386
01387
01388 #line 578 "Parser.yy"
01389 { delete (yyvaluep->valueData); };
01390
01391
01392 #line 1393 "Parser.cc"
01393 break;
01394 case 582:
01395
01396
01397 #line 578 "Parser.yy"
01398 { delete (yyvaluep->valueData); };
01399
01400
01401 #line 1402 "Parser.cc"
01402 break;
01403 case 583:
01404
01405
01406 #line 577 "Parser.yy"
01407 { };
01408
01409
01410 #line 1411 "Parser.cc"
01411 break;
01412 case 589:
01413
01414
01415 #line 575 "Parser.yy"
01416 { };
01417
01418
01419 #line 1420 "Parser.cc"
01420 break;
01421 case 590:
01422
01423
01424 #line 575 "Parser.yy"
01425 { };
01426
01427
01428 #line 1429 "Parser.cc"
01429 break;
01430 case 592:
01431
01432
01433 #line 575 "Parser.yy"
01434 { };
01435
01436
01437 #line 1438 "Parser.cc"
01438 break;
01439 case 593:
01440
01441
01442 #line 575 "Parser.yy"
01443 { };
01444
01445
01446 #line 1447 "Parser.cc"
01447 break;
01448 case 594:
01449
01450
01451 #line 575 "Parser.yy"
01452 { };
01453
01454
01455 #line 1456 "Parser.cc"
01456 break;
01457 case 597:
01458
01459
01460 #line 578 "Parser.yy"
01461 { delete (yyvaluep->netAttributes); };
01462
01463
01464 #line 1465 "Parser.cc"
01465 break;
01466 case 603:
01467
01468
01469 #line 578 "Parser.yy"
01470 { delete (yyvaluep->netDelay); };
01471
01472
01473 #line 1474 "Parser.cc"
01474 break;
01475 case 604:
01476
01477
01478 #line 578 "Parser.yy"
01479 { delete (yyvaluep->netDelay); };
01480
01481
01482 #line 1483 "Parser.cc"
01483 break;
01484 case 605:
01485
01486
01487 #line 578 "Parser.yy"
01488 { delete (yyvaluep->netDelay); };
01489
01490
01491 #line 1492 "Parser.cc"
01492 break;
01493 case 606:
01494
01495
01496 #line 578 "Parser.yy"
01497 { delete (yyvaluep->netDelay); };
01498
01499
01500 #line 1501 "Parser.cc"
01501 break;
01502 case 614:
01503
01504
01505 #line 575 "Parser.yy"
01506 { };
01507
01508
01509 #line 1510 "Parser.cc"
01510 break;
01511 case 616:
01512
01513
01514 #line 575 "Parser.yy"
01515 { };
01516
01517
01518 #line 1519 "Parser.cc"
01519 break;
01520 case 619:
01521
01522
01523 #line 578 "Parser.yy"
01524 { delete (yyvaluep->netRefData); };
01525
01526
01527 #line 1528 "Parser.cc"
01528 break;
01529 case 620:
01530
01531
01532 #line 578 "Parser.yy"
01533 { delete (yyvaluep->netRefData); };
01534
01535
01536 #line 1537 "Parser.cc"
01537 break;
01538 case 629:
01539
01540
01541 #line 578 "Parser.yy"
01542 { delete (yyvaluep->valueData); };
01543
01544
01545 #line 1546 "Parser.cc"
01546 break;
01547 case 630:
01548
01549
01550 #line 578 "Parser.yy"
01551 { delete (yyvaluep->valueData); };
01552
01553
01554 #line 1555 "Parser.cc"
01555 break;
01556 case 631:
01557
01558
01559 #line 577 "Parser.yy"
01560 { };
01561
01562
01563 #line 1564 "Parser.cc"
01564 break;
01565 case 632:
01566
01567
01568 #line 577 "Parser.yy"
01569 { };
01570
01571
01572 #line 1573 "Parser.cc"
01573 break;
01574 case 637:
01575
01576
01577 #line 577 "Parser.yy"
01578 { };
01579
01580
01581 #line 1582 "Parser.cc"
01582 break;
01583 case 649:
01584
01585
01586 #line 578 "Parser.yy"
01587 { delete (yyvaluep->stringVal); };
01588
01589
01590 #line 1591 "Parser.cc"
01591 break;
01592 case 656:
01593
01594
01595 #line 573 "Parser.yy"
01596 { };
01597
01598
01599 #line 1600 "Parser.cc"
01600 break;
01601 case 657:
01602
01603
01604 #line 578 "Parser.yy"
01605 { delete (yyvaluep->paramAssignInfo); };
01606
01607
01608 #line 1609 "Parser.cc"
01609 break;
01610 case 664:
01611
01612
01613 #line 578 "Parser.yy"
01614 { delete (yyvaluep->valueData); };
01615
01616
01617 #line 1618 "Parser.cc"
01618 break;
01619 case 671:
01620
01621
01622 #line 578 "Parser.yy"
01623 { delete (yyvaluep->valueData); };
01624
01625
01626 #line 1627 "Parser.cc"
01627 break;
01628 case 672:
01629
01630
01631 #line 578 "Parser.yy"
01632 { delete (yyvaluep->valueData); };
01633
01634
01635 #line 1636 "Parser.cc"
01636 break;
01637 case 673:
01638
01639
01640 #line 577 "Parser.yy"
01641 { };
01642
01643
01644 #line 1645 "Parser.cc"
01645 break;
01646 case 674:
01647
01648
01649 #line 577 "Parser.yy"
01650 { };
01651
01652
01653 #line 1654 "Parser.cc"
01654 break;
01655 case 677:
01656
01657
01658 #line 577 "Parser.yy"
01659 { };
01660
01661
01662 #line 1663 "Parser.cc"
01663 break;
01664 case 682:
01665
01666
01667 #line 578 "Parser.yy"
01668 { delete (yyvaluep->portAttributes); };
01669
01670
01671 #line 1672 "Parser.cc"
01672 break;
01673 case 685:
01674
01675
01676 #line 578 "Parser.yy"
01677 { delete (yyvaluep->portAttributes); };
01678
01679
01680 #line 1681 "Parser.cc"
01681 break;
01682 case 689:
01683
01684
01685 #line 578 "Parser.yy"
01686 { delete (yyvaluep->portDelay); };
01687
01688
01689 #line 1690 "Parser.cc"
01690 break;
01691 case 690:
01692
01693
01694 #line 578 "Parser.yy"
01695 { delete (yyvaluep->portDelay); };
01696
01697
01698 #line 1699 "Parser.cc"
01699 break;
01700 case 698:
01701
01702
01703 #line 578 "Parser.yy"
01704 { delete (yyvaluep->portInst); };
01705
01706
01707 #line 1708 "Parser.cc"
01708 break;
01709 case 699:
01710
01711
01712 #line 578 "Parser.yy"
01713 { delete (yyvaluep->portInst); };
01714
01715
01716 #line 1717 "Parser.cc"
01717 break;
01718 case 702:
01719
01720
01721 #line 578 "Parser.yy"
01722 { delete (yyvaluep->portListData); };
01723
01724
01725 #line 1726 "Parser.cc"
01726 break;
01727 case 703:
01728
01729
01730 #line 578 "Parser.yy"
01731 { delete (yyvaluep->portListData); };
01732
01733
01734 #line 1735 "Parser.cc"
01735 break;
01736 case 708:
01737
01738
01739 #line 575 "Parser.yy"
01740 { };
01741
01742
01743 #line 1744 "Parser.cc"
01744 break;
01745 case 710:
01746
01747
01748 #line 575 "Parser.yy"
01749 { };
01750
01751
01752 #line 1753 "Parser.cc"
01753 break;
01754 case 713:
01755
01756
01757 #line 578 "Parser.yy"
01758 { delete (yyvaluep->portRefData); };
01759
01760
01761 #line 1762 "Parser.cc"
01762 break;
01763 case 714:
01764
01765
01766 #line 578 "Parser.yy"
01767 { delete (yyvaluep->portRefData); };
01768
01769
01770 #line 1771 "Parser.cc"
01771 break;
01772 case 715:
01773
01774
01775 #line 578 "Parser.yy"
01776 { delete (yyvaluep->pairStrData); };
01777
01778
01779 #line 1780 "Parser.cc"
01780 break;
01781 case 716:
01782
01783
01784 #line 578 "Parser.yy"
01785 { delete (yyvaluep->stringVal); };
01786
01787
01788 #line 1789 "Parser.cc"
01789 break;
01790 case 722:
01791
01792
01793 #line 575 "Parser.yy"
01794 { };
01795
01796
01797 #line 1798 "Parser.cc"
01798 break;
01799 case 733:
01800
01801
01802 #line 575 "Parser.yy"
01803 { };
01804
01805
01806 #line 1807 "Parser.cc"
01807 break;
01808 case 734:
01809
01810
01811 #line 575 "Parser.yy"
01812 { };
01813
01814
01815 #line 1816 "Parser.cc"
01816 break;
01817 case 735:
01818
01819
01820 #line 578 "Parser.yy"
01821 { delete (yyvaluep->stringVal); };
01822
01823
01824 #line 1825 "Parser.cc"
01825 break;
01826 case 736:
01827
01828
01829 #line 578 "Parser.yy"
01830 { delete (yyvaluep->logicListData); };
01831
01832
01833 #line 1834 "Parser.cc"
01834 break;
01835 case 737:
01836
01837
01838 #line 578 "Parser.yy"
01839 { delete (yyvaluep->logicListData); };
01840
01841
01842 #line 1843 "Parser.cc"
01843 break;
01844 case 740:
01845
01846
01847 #line 577 "Parser.yy"
01848 { };
01849
01850
01851 #line 1852 "Parser.cc"
01852 break;
01853 case 747:
01854
01855
01856 #line 575 "Parser.yy"
01857 { };
01858
01859
01860 #line 1861 "Parser.cc"
01861 break;
01862 case 768:
01863
01864
01865 #line 578 "Parser.yy"
01866 { delete (yyvaluep->stringVal); };
01867
01868
01869 #line 1870 "Parser.cc"
01870 break;
01871 case 769:
01872
01873
01874 #line 578 "Parser.yy"
01875 { delete (yyvaluep->valueData); };
01876
01877
01878 #line 1879 "Parser.cc"
01879 break;
01880 case 770:
01881
01882
01883 #line 578 "Parser.yy"
01884 { delete (yyvaluep->valueData); };
01885
01886
01887 #line 1888 "Parser.cc"
01888 break;
01889 case 771:
01890
01891
01892 #line 578 "Parser.yy"
01893 { delete (yyvaluep->stringVal); };
01894
01895
01896 #line 1897 "Parser.cc"
01897 break;
01898 case 772:
01899
01900
01901 #line 575 "Parser.yy"
01902 { };
01903
01904
01905 #line 1906 "Parser.cc"
01906 break;
01907 case 788:
01908
01909
01910 #line 578 "Parser.yy"
01911 { delete (yyvaluep->timeStamp); };
01912
01913
01914 #line 1915 "Parser.cc"
01915 break;
01916 case 800:
01917
01918
01919 #line 578 "Parser.yy"
01920 { delete (yyvaluep->valueData); };
01921
01922
01923 #line 1924 "Parser.cc"
01924 break;
01925 case 805:
01926
01927
01928 #line 573 "Parser.yy"
01929 { };
01930
01931
01932 #line 1933 "Parser.cc"
01933 break;
01934 case 806:
01935
01936
01937 #line 573 "Parser.yy"
01938 { };
01939
01940
01941 #line 1942 "Parser.cc"
01942 break;
01943 case 808:
01944
01945
01946 #line 573 "Parser.yy"
01947 { };
01948
01949
01950 #line 1951 "Parser.cc"
01951 break;
01952 case 809:
01953
01954
01955 #line 578 "Parser.yy"
01956 { delete (yyvaluep->stringVal); };
01957
01958
01959 #line 1960 "Parser.cc"
01960 break;
01961 case 812:
01962
01963
01964 #line 575 "Parser.yy"
01965 { };
01966
01967
01968 #line 1969 "Parser.cc"
01969 break;
01970 case 814:
01971
01972
01973 #line 575 "Parser.yy"
01974 { };
01975
01976
01977 #line 1978 "Parser.cc"
01978 break;
01979 case 815:
01980
01981
01982 #line 578 "Parser.yy"
01983 { delete (yyvaluep->stringVal); };
01984
01985
01986 #line 1987 "Parser.cc"
01987 break;
01988 case 823:
01989
01990
01991 #line 575 "Parser.yy"
01992 { };
01993
01994
01995 #line 1996 "Parser.cc"
01996 break;
01997 case 825:
01998
01999
02000 #line 575 "Parser.yy"
02001 { };
02002
02003
02004 #line 2005 "Parser.cc"
02005 break;
02006 case 828:
02007
02008
02009 #line 578 "Parser.yy"
02010 { delete (yyvaluep->viewRefData); };
02011
02012
02013 #line 2014 "Parser.cc"
02014 break;
02015 case 829:
02016
02017
02018 #line 578 "Parser.yy"
02019 { delete (yyvaluep->viewRefData); };
02020
02021
02022 #line 2023 "Parser.cc"
02023 break;
02024 case 831:
02025
02026
02027 #line 573 "Parser.yy"
02028 { };
02029
02030
02031 #line 2032 "Parser.cc"
02032 break;
02033 case 833:
02034
02035
02036 #line 578 "Parser.yy"
02037 { delete (yyvaluep->valueData); };
02038
02039
02040 #line 2041 "Parser.cc"
02041 break;
02042 case 836:
02043
02044
02045 #line 575 "Parser.yy"
02046 { };
02047
02048
02049 #line 2050 "Parser.cc"
02050 break;
02051 case 845:
02052
02053
02054 #line 578 "Parser.yy"
02055 { delete (yyvaluep->stringVal); };
02056
02057
02058 #line 2059 "Parser.cc"
02059 break;
02060 case 846:
02061
02062
02063 #line 578 "Parser.yy"
02064 { delete (yyvaluep->stringVal); };
02065
02066
02067 #line 2068 "Parser.cc"
02068 break;
02069 case 847:
02070
02071
02072 #line 573 "Parser.yy"
02073 { };
02074
02075
02076 #line 2077 "Parser.cc"
02077 break;
02078
02079 default:
02080 break;
02081 }
02082 }
02083
02084 void
02085 Parser::yypop_ (unsigned int n)
02086 {
02087 yystate_stack_.pop (n);
02088 yysemantic_stack_.pop (n);
02089 yylocation_stack_.pop (n);
02090 }
02091
02092 #if YYDEBUG
02093 std::ostream&
02094 Parser::debug_stream () const
02095 {
02096 return *yycdebug_;
02097 }
02098
02099 void
02100 Parser::set_debug_stream (std::ostream& o)
02101 {
02102 yycdebug_ = &o;
02103 }
02104
02105
02106 Parser::debug_level_type
02107 Parser::debug_level () const
02108 {
02109 return yydebug_;
02110 }
02111
02112 void
02113 Parser::set_debug_level (debug_level_type l)
02114 {
02115 yydebug_ = l;
02116 }
02117 #endif
02118
02119 int
02120 Parser::parse ()
02121 {
02122
02123 int yychar = yyempty_;
02124 int yytoken = 0;
02125
02126
02127 int yyn;
02128 int yylen = 0;
02129 int yystate = 0;
02130
02131
02132 int yynerrs_ = 0;
02133 int yyerrstatus_ = 0;
02134
02135
02136 semantic_type yylval;
02137
02138 location_type yylloc;
02139
02140 location_type yyerror_range[2];
02141
02142
02143 semantic_type yyval;
02144
02145 location_type yyloc;
02146
02147 int yyresult;
02148
02149 YYCDEBUG << "Starting parse" << std::endl;
02150
02151
02152
02153
02154
02155 #line 66 "Parser.yy"
02156 {
02157
02158 yylloc.begin.filename = yylloc.end.filename = &inDriver.getStreamName();
02159 }
02160
02161
02162 #line 2163 "Parser.cc"
02163
02164
02165
02166
02167
02168 yystate_stack_ = state_stack_type (0);
02169 yysemantic_stack_ = semantic_stack_type (0);
02170 yylocation_stack_ = location_stack_type (0);
02171 yysemantic_stack_.push (yylval);
02172 yylocation_stack_.push (yylloc);
02173
02174
02175 yynewstate:
02176 yystate_stack_.push (yystate);
02177 YYCDEBUG << "Entering state " << yystate << std::endl;
02178
02179
02180 if (yystate == yyfinal_)
02181 goto yyacceptlab;
02182
02183 goto yybackup;
02184
02185
02186 yybackup:
02187
02188
02189 yyn = yypact_[yystate];
02190 if (yyn == yypact_ninf_)
02191 goto yydefault;
02192
02193
02194 if (yychar == yyempty_)
02195 {
02196 YYCDEBUG << "Reading a token: ";
02197 yychar = yylex (&yylval, &yylloc);
02198 }
02199
02200
02201
02202 if (yychar <= yyeof_)
02203 {
02204 yychar = yytoken = yyeof_;
02205 YYCDEBUG << "Now at end of input." << std::endl;
02206 }
02207 else
02208 {
02209 yytoken = yytranslate_ (yychar);
02210 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
02211 }
02212
02213
02214
02215 yyn += yytoken;
02216 if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken)
02217 goto yydefault;
02218
02219
02220 yyn = yytable_[yyn];
02221 if (yyn <= 0)
02222 {
02223 if (yyn == 0 || yyn == yytable_ninf_)
02224 goto yyerrlab;
02225 yyn = -yyn;
02226 goto yyreduce;
02227 }
02228
02229
02230 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
02231
02232
02233 yychar = yyempty_;
02234
02235 yysemantic_stack_.push (yylval);
02236 yylocation_stack_.push (yylloc);
02237
02238
02239
02240 if (yyerrstatus_)
02241 --yyerrstatus_;
02242
02243 yystate = yyn;
02244 goto yynewstate;
02245
02246
02247
02248
02249 yydefault:
02250 yyn = yydefact_[yystate];
02251 if (yyn == 0)
02252 goto yyerrlab;
02253 goto yyreduce;
02254
02255
02256
02257
02258 yyreduce:
02259 yylen = yyr2_[yyn];
02260
02261
02262
02263
02264
02265
02266 if (yylen)
02267 yyval = yysemantic_stack_[yylen - 1];
02268 else
02269 yyval = yysemantic_stack_[0];
02270
02271 {
02272 slice<location_type, location_stack_type> slice (yylocation_stack_, yylen);
02273 YYLLOC_DEFAULT (yyloc, slice, yylen);
02274 }
02275 YY_REDUCE_PRINT (yyn);
02276 switch (yyn)
02277 {
02278 case 2:
02279
02280
02281 #line 945 "Parser.yy"
02282 {
02283 boost::scoped_ptr<NameData> fileName( (yysemantic_stack_[(6) - (3)].nameData) );
02284 boost::scoped_ptr<VersionData> versionData( (yysemantic_stack_[(6) - (4)].edifVersion) );
02285 EdifContextSharedPtr ctx = inDriver.getContext();
02286 RootSharedPtr root = ctx->getRoot();
02287 root->setName( fileName->mName );
02288 if( !fileName->mOriginalName.empty() )
02289 {
02290 root->setOriginalName( fileName->mOriginalName );
02291 }
02292 EdifVersion version;
02293 version.mFirst = versionData->mFirst;
02294 version.mSecond = versionData->mSecond;
02295 version.mThird = versionData->mThird;
02296 root->setVersion( version );
02297 root->setLevel( static_cast<EdifLevel>( (yysemantic_stack_[(6) - (5)].integerVal) ) );
02298 ctx->pushStatusContainer( root );
02299 }
02300 break;
02301
02302 case 3:
02303
02304
02305 #line 963 "Parser.yy"
02306 {
02307 inDriver.getContext()->popStatusContainer();
02308 }
02309 break;
02310
02311 case 9:
02312
02313
02314 #line 974 "Parser.yy"
02315 {
02316 EdifContextSharedPtr ctx = inDriver.getContext();
02317 RootSharedPtr root = ctx->getRoot();
02318 root->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
02319 delete (yysemantic_stack_[(2) - (2)].stringVal);
02320 }
02321 break;
02322
02323 case 10:
02324
02325
02326 #line 981 "Parser.yy"
02327 {
02328 EdifContextSharedPtr ctx = inDriver.getContext();
02329 RootSharedPtr root = ctx->getRoot();
02330 root->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
02331 delete (yysemantic_stack_[(2) - (2)].stringVal);
02332 }
02333 break;
02334
02335 case 12:
02336
02337
02338 #line 993 "Parser.yy"
02339 {
02340 (yyval.integerVal) = (yysemantic_stack_[(4) - (3)].integerVal);
02341 }
02342 break;
02343
02344 case 13:
02345
02346
02347 #line 999 "Parser.yy"
02348 {
02349 (yyval.edifVersion) = new VersionData();
02350 (yyval.edifVersion)->mFirst = (yysemantic_stack_[(6) - (3)].integerVal);
02351 (yyval.edifVersion)->mSecond = (yysemantic_stack_[(6) - (4)].integerVal);
02352 (yyval.edifVersion)->mThird = (yysemantic_stack_[(6) - (5)].integerVal);
02353 }
02354 break;
02355
02356 case 14:
02357
02358
02359 #line 1008 "Parser.yy"
02360 {
02361 (yyval.valueData) = (yysemantic_stack_[(4) - (3)].valueData);
02362 }
02363 break;
02364
02365 case 22:
02366
02367
02368 #line 1025 "Parser.yy"
02369 {
02370 delete (yysemantic_stack_[(2) - (2)].stringVal);
02371 }
02372 break;
02373
02374 case 23:
02375
02376
02377 #line 1029 "Parser.yy"
02378 {
02379 delete (yysemantic_stack_[(2) - (2)].stringVal);
02380 }
02381 break;
02382
02383 case 25:
02384
02385
02386 #line 1038 "Parser.yy"
02387 {
02388 delete (yysemantic_stack_[(1) - (1)].stringVal);
02389 }
02390 break;
02391
02392 case 26:
02393
02394
02395 #line 1042 "Parser.yy"
02396 {
02397 delete (yysemantic_stack_[(1) - (1)].stringVal);
02398 }
02399 break;
02400
02401 case 27:
02402
02403
02404 #line 1048 "Parser.yy"
02405 {
02406 ApplySharedPtr apply;
02407 EdifContextSharedPtr ctx
02408 = inDriver.getContext();
02409 try
02410 {
02411 ctx->getFactory()->create( apply );
02412 }
02413 catch( Error &e )
02414 {
02415 std::string message = constructErrorMessage(
02416 "Unable to create apply" );
02417 log("%s\n", message.c_str());
02418 e.setCurrentLocation( __FUNCTION__,
02419 __FILE__, __LINE__ );
02420 e.saveContextData( "Parser error message", message );
02421 e.saveContextData( "Filename", yyloc.begin.filename );
02422 e.saveContextData( "StartLine", yyloc.begin.line );
02423 e.saveContextData( "EndLine", yyloc.end.line );
02424 inDriver.setParserError( e );
02425 error( yyloc, message );
02426 YYABORT;
02427 }
02428 ctx->setCurrentApply( apply );
02429 SimulateSharedPtr simulate
02430 = ctx->getCurrentSimulate();
02431 simulate->addApply( apply );
02432 }
02433 break;
02434
02435 case 28:
02436
02437
02438 #line 1076 "Parser.yy"
02439 {
02440 EdifContextSharedPtr ctx = inDriver.getContext();
02441 ctx->setCurrentApply( ApplySharedPtr() );
02442 }
02443 break;
02444
02445 case 32:
02446
02447
02448 #line 1086 "Parser.yy"
02449 {
02450 EdifContextSharedPtr ctx = inDriver.getContext();
02451 ApplySharedPtr apply = ctx->getCurrentApply();
02452 apply->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
02453 delete (yysemantic_stack_[(2) - (2)].stringVal);
02454 }
02455 break;
02456
02457 case 33:
02458
02459
02460 #line 1093 "Parser.yy"
02461 {
02462 EdifContextSharedPtr ctx = inDriver.getContext();
02463 ApplySharedPtr apply = ctx->getCurrentApply();
02464 apply->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
02465 delete (yysemantic_stack_[(2) - (2)].stringVal);
02466 }
02467 break;
02468
02469 case 34:
02470
02471
02472 #line 1102 "Parser.yy"
02473 {
02474 delete (yysemantic_stack_[(6) - (3)].pairData);
02475 delete (yysemantic_stack_[(6) - (4)].pairData);
02476 delete (yysemantic_stack_[(6) - (5)].pairData);
02477 }
02478 break;
02479
02480 case 35:
02481
02482
02483 #line 1110 "Parser.yy"
02484 {
02485 (yyval.nameData) = (yysemantic_stack_[(6) - (3)].nameData);
02486 (yyval.nameData)->mIndices.push_back( (yysemantic_stack_[(6) - (4)].integerVal) );
02487 if( (yysemantic_stack_[(6) - (5)].arrayDimensions) )
02488 {
02489 (yyval.nameData)->mIndices.insert( (yyval.nameData)->mIndices.end(),
02490 (yysemantic_stack_[(6) - (5)].arrayDimensions)->begin(), (yysemantic_stack_[(6) - (5)].arrayDimensions)->end() );
02491 delete (yysemantic_stack_[(6) - (5)].arrayDimensions);
02492 }
02493 }
02494 break;
02495
02496 case 36:
02497
02498
02499 #line 1123 "Parser.yy"
02500 {
02501 (yyval.arrayDimensions) = NULL;
02502 }
02503 break;
02504
02505 case 38:
02506
02507
02508 #line 1130 "Parser.yy"
02509 {
02510 (yyval.arrayDimensions) = new std::vector<size_t>();
02511 (yyval.arrayDimensions)->push_back( (yysemantic_stack_[(2) - (1)].integerVal) );
02512 if( (yysemantic_stack_[(2) - (2)].arrayDimensions) )
02513 {
02514 (yyval.arrayDimensions)->insert( (yyval.arrayDimensions)->end(), (yysemantic_stack_[(2) - (2)].arrayDimensions)->begin(), (yysemantic_stack_[(2) - (2)].arrayDimensions)->end() );
02515 delete (yysemantic_stack_[(2) - (2)].arrayDimensions);
02516 }
02517 }
02518 break;
02519
02520 case 39:
02521
02522
02523 #line 1140 "Parser.yy"
02524 {
02525 (yyval.arrayDimensions) = new std::vector<size_t>();
02526 (yyval.arrayDimensions)->push_back( (yysemantic_stack_[(1) - (1)].integerVal) );
02527 }
02528 break;
02529
02530 case 45:
02531
02532
02533 #line 1156 "Parser.yy"
02534 {
02535 delete (yysemantic_stack_[(2) - (2)].stringVal);
02536 }
02537 break;
02538
02539 case 46:
02540
02541
02542 #line 1160 "Parser.yy"
02543 {
02544 delete (yysemantic_stack_[(2) - (2)].stringVal);
02545 }
02546 break;
02547
02548 case 48:
02549
02550
02551 #line 1169 "Parser.yy"
02552 {
02553 delete (yysemantic_stack_[(4) - (3)].pairData);
02554 }
02555 break;
02556
02557 case 49:
02558
02559
02560 #line 1175 "Parser.yy"
02561 {
02562 delete (yysemantic_stack_[(4) - (3)].pairData);
02563 }
02564 break;
02565
02566 case 50:
02567
02568
02569 #line 1181 "Parser.yy"
02570 {
02571 (yyval.stringVal) = (yysemantic_stack_[(4) - (3)].stringVal);
02572 }
02573 break;
02574
02575 case 52:
02576
02577
02578 #line 1190 "Parser.yy"
02579 {
02580 EdifContextSharedPtr ctx
02581 = inDriver.getContext();
02582 LogicElementSharedPtr logicElem;
02583 try
02584 {
02585 ctx->getFactory()->create( logicElem );
02586 logicElem->setType( LogicElement::eTypeBecomes );
02587 }
02588 catch( Error &e )
02589 {
02590 std::string message = constructErrorMessage(
02591 "Unable to create becomes" );
02592 log("%s\n", message.c_str());
02593 e.setCurrentLocation( __FUNCTION__,
02594 __FILE__, __LINE__ );
02595 e.saveContextData( "Parser error message", message );
02596 e.saveContextData( "Filename", yyloc.begin.filename );
02597 e.saveContextData( "StartLine", yyloc.begin.line );
02598 e.saveContextData( "EndLine", yyloc.end.line );
02599 inDriver.setParserError( e );
02600 error( yyloc, message );
02601 YYABORT;
02602 }
02603 ctx->pushLogicElement( logicElem );
02604 ctx->incrementLogicElementDepth();
02605 }
02606 break;
02607
02608 case 62:
02609
02610
02611 #line 1236 "Parser.yy"
02612 {
02613 if( NULL == (yysemantic_stack_[(4) - (3)].valueData) )
02614 {
02615 (yyval.valueData) = new ValueData();
02616 (yyval.valueData)->mValues.push_back( Value(
02617 Value::eValueTypeBoolean ) );
02618 }
02619 else
02620 {
02621 (yyval.valueData) = (yysemantic_stack_[(4) - (3)].valueData);
02622 }
02623 }
02624 break;
02625
02626 case 63:
02627
02628
02629 #line 1251 "Parser.yy"
02630 {
02631 (yyval.valueData) = NULL;
02632 }
02633 break;
02634
02635 case 64:
02636
02637
02638 #line 1255 "Parser.yy"
02639 {
02640 (yyval.valueData) = ( (yysemantic_stack_[(2) - (1)].valueData) ) ? (yysemantic_stack_[(2) - (1)].valueData) : new ValueData();
02641 bool val = (yysemantic_stack_[(2) - (2)].integerVal);
02642 (yyval.valueData)->mValues.push_back( Value(
02643 Value::eValueTypeBoolean, val ) );
02644 }
02645 break;
02646
02647 case 65:
02648
02649
02650 #line 1262 "Parser.yy"
02651 {
02652 (yyval.valueData) = ( (yysemantic_stack_[(2) - (1)].valueData) ) ? (yysemantic_stack_[(2) - (1)].valueData) : new ValueData();
02653 bool val = (yysemantic_stack_[(2) - (2)].integerVal);
02654 (yyval.valueData)->mValues.push_back( Value(
02655 Value::eValueTypeBoolean, val ) );
02656 }
02657 break;
02658
02659 case 66:
02660
02661
02662 #line 1269 "Parser.yy"
02663 {
02664 (yyval.valueData) = (yysemantic_stack_[(2) - (2)].valueData);
02665 if( (yysemantic_stack_[(2) - (1)].valueData) )
02666 {
02667 (yysemantic_stack_[(2) - (1)].valueData)->mValues.insert( (yysemantic_stack_[(2) - (1)].valueData)->mValues.end(),
02668 (yyval.valueData)->mValues.begin(), (yyval.valueData)->mValues.end() );
02669 (yyval.valueData)->mValues = (yysemantic_stack_[(2) - (1)].valueData)->mValues;
02670 delete (yysemantic_stack_[(2) - (1)].valueData);
02671 }
02672 }
02673 break;
02674
02675 case 67:
02676
02677
02678 #line 1282 "Parser.yy"
02679 {
02680 (yyval.integerVal) = (yysemantic_stack_[(4) - (3)].integerVal);
02681 }
02682 break;
02683
02684 case 68:
02685
02686
02687 #line 1288 "Parser.yy"
02688 {
02689 (yyval.integerVal) = (yysemantic_stack_[(1) - (1)].integerVal);
02690 }
02691 break;
02692
02693 case 69:
02694
02695
02696 #line 1292 "Parser.yy"
02697 {
02698 (yyval.integerVal) = (yysemantic_stack_[(2) - (1)].integerVal);
02699 }
02700 break;
02701
02702 case 70:
02703
02704
02705 #line 1298 "Parser.yy"
02706 {
02707 if((yysemantic_stack_[(4) - (3)].integerVal));
02708 (yyval.integerVal) = (yysemantic_stack_[(4) - (3)].integerVal);
02709 }
02710 break;
02711
02712 case 71:
02713
02714
02715 #line 1305 "Parser.yy"
02716 {
02717 (yyval.integerVal) = 1;
02718 }
02719 break;
02720
02721 case 72:
02722
02723
02724 #line 1309 "Parser.yy"
02725 {
02726 (yyval.integerVal) = 0;
02727 }
02728 break;
02729
02730 case 73:
02731
02732
02733 #line 1315 "Parser.yy"
02734 {
02735 if( (yysemantic_stack_[(6) - (3)].integerVal) );
02736 if( (yysemantic_stack_[(6) - (4)].integerVal) );
02737 delete (yysemantic_stack_[(6) - (5)].valueData);
02738 }
02739 break;
02740
02741 case 74:
02742
02743
02744 #line 1323 "Parser.yy"
02745 {
02746 if( (yysemantic_stack_[(4) - (3)].integerVal) );
02747 }
02748 break;
02749
02750 case 76:
02751
02752
02753 #line 1332 "Parser.yy"
02754 {
02755 boost::scoped_ptr<NameData> nameData( (yysemantic_stack_[(3) - (3)].nameData) );
02756 std::string name = nameData->mName;
02757 EdifContextSharedPtr ctx = inDriver.getContext();
02758 CellSharedPtr cell;
02759 LibrarySharedPtr lib = ctx->getCurrentLibrary();
02760 cell = lib->findCell( name );
02761 if( cell )
02762 {
02763 log("Found existing cell\n");
02764 if( lib->getIsExtern() )
02765 {
02766 if( !cell->getIsExtern() )
02767 {
02768 std::string message = constructErrorMessage(
02769 "Cell %s already exists in lib %s\n",
02770 name.c_str(), lib->getName().c_str() );
02771 log("%s\n", message.c_str());
02772 Error e( eMessageIdParserError,
02773 __FUNCTION__, __FILE__, __LINE__ );
02774 e.setCurrentLocation( __FUNCTION__,
02775 __FILE__, __LINE__ );
02776 e.saveContextData( "Parser error message", message );
02777 e.saveContextData( "Filename", yyloc.begin.filename );
02778 e.saveContextData( "StartLine", yyloc.begin.line );
02779 e.saveContextData( "EndLine", yyloc.end.line );
02780 inDriver.setParserError( e );
02781 error( yyloc, message );
02782 YYABORT;
02783 }
02784 else
02785 {
02786 log( "Extern cell %s already exists in %s\n",
02787 name.c_str(), lib->getName().c_str() );
02788 }
02789 }
02790 else
02791 {
02792 if( cell->getIsExtern() )
02793 {
02794 log("Found extern cell of this name\n");
02795 cell->setIsExtern( false );
02796 }
02797 else
02798 {
02799
02800 log("Concrete cell %s already found... Ignoring\n",
02801 name.c_str());
02802 #if 0
02803 std::string message = constructErrorMessage(
02804 "Cell %s already exists in lib %s\n",
02805 name.c_str(), lib->getName().c_str() );
02806 log("%s\n", message.c_str());
02807 Error e( eMessageIdParserError,
02808 __FUNCTION__, __FILE__, __LINE__ );
02809 e.saveContextData( "Parser error message", message );
02810 e.saveContextData( "Filename", yyloc.begin.filename );
02811 e.saveContextData( "StartLine", yyloc.begin.line );
02812 e.saveContextData( "EndLine", yyloc.end.line );
02813 inDriver.setParserError( e );
02814 error( yyloc, message );
02815 YYABORT;
02816 #endif
02817 }
02818 }
02819 }
02820 else
02821 {
02822 try
02823 {
02824 ctx->getFactory()->create( cell );
02825 }
02826 catch( Error &e )
02827 {
02828 std::string message = constructErrorMessage(
02829 "Unable to create Cell : %s", cell->getName().c_str());
02830 log("%s\n", message.c_str());
02831 e.setCurrentLocation( __FUNCTION__,
02832 __FILE__, __LINE__ );
02833 e.saveContextData( "Parser error message", message );
02834 e.saveContextData( "Filename", yyloc.begin.filename );
02835 e.saveContextData( "StartLine", yyloc.begin.line );
02836 e.saveContextData( "EndLine", yyloc.end.line );
02837 inDriver.setParserError( e );
02838 error( yyloc, message );
02839 YYABORT;
02840 }
02841 cell->setName( name );
02842 if( !(yysemantic_stack_[(3) - (3)].nameData)->mOriginalName.empty() )
02843 {
02844 cell->setOriginalName( (yysemantic_stack_[(3) - (3)].nameData)->mOriginalName );
02845 }
02846 cell->setIsExtern( lib->getIsExtern() );
02847 cell->setParent( lib );
02848 lib->addCell( cell );
02849 log( "Created cell %s\n", cell->getName().c_str() );
02850 }
02851 ctx->setCurrentCell( cell );
02852 ctx->pushPropertyContainer( cell );
02853 ctx->pushStatusContainer( cell );
02854 }
02855 break;
02856
02857 case 77:
02858
02859
02860 #line 1433 "Parser.yy"
02861 {
02862 inDriver.getContext()->setCurrentCell(
02863 CellSharedPtr() );
02864 inDriver.getContext()->popPropertyContainer();
02865 inDriver.getContext()->popStatusContainer();
02866 }
02867 break;
02868
02869 case 82:
02870
02871
02872 #line 1446 "Parser.yy"
02873 {
02874 EdifContextSharedPtr ctx = inDriver.getContext();
02875 CellSharedPtr cell = ctx->getCurrentCell();
02876 cell->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
02877 delete (yysemantic_stack_[(2) - (2)].stringVal);
02878 }
02879 break;
02880
02881 case 83:
02882
02883
02884 #line 1453 "Parser.yy"
02885 {
02886 EdifContextSharedPtr ctx = inDriver.getContext();
02887 CellSharedPtr cell = ctx->getCurrentCell();
02888 cell->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
02889 delete (yysemantic_stack_[(2) - (2)].stringVal);
02890 }
02891 break;
02892
02893 case 86:
02894
02895
02896 #line 1467 "Parser.yy"
02897 {
02898 if( NULL == (yysemantic_stack_[(5) - (4)].cellRefData) )
02899 {
02900 (yyval.cellRefData) = new CellRefData();
02901 }
02902 else
02903 {
02904 (yyval.cellRefData) = (yysemantic_stack_[(5) - (4)].cellRefData);
02905 }
02906 (yyval.cellRefData)->mCellName = (yysemantic_stack_[(5) - (3)].nameData);
02907 }
02908 break;
02909
02910 case 87:
02911
02912
02913 #line 1481 "Parser.yy"
02914 {
02915 (yyval.cellRefData) = NULL;
02916 }
02917 break;
02918
02919 case 88:
02920
02921
02922 #line 1485 "Parser.yy"
02923 {
02924 (yyval.cellRefData) = new CellRefData();
02925 (yyval.cellRefData)->mLibraryName = (yysemantic_stack_[(1) - (1)].nameData);
02926 }
02927 break;
02928
02929 case 89:
02930
02931
02932 #line 1492 "Parser.yy"
02933 {
02934 if( NULL == (yysemantic_stack_[(5) - (4)].viewRefData) )
02935 {
02936 (yyval.viewRefData) = new ViewRefData();
02937 }
02938 else
02939 {
02940 (yyval.viewRefData) = (yysemantic_stack_[(5) - (4)].viewRefData);
02941 }
02942 (yyval.viewRefData)->mCellName = (yysemantic_stack_[(5) - (3)].nameData);
02943 }
02944 break;
02945
02946 case 90:
02947
02948
02949 #line 1506 "Parser.yy"
02950 {
02951 (yyval.viewRefData) = NULL;
02952 }
02953 break;
02954
02955 case 91:
02956
02957
02958 #line 1510 "Parser.yy"
02959 {
02960 (yyval.viewRefData) = new ViewRefData();
02961 (yyval.viewRefData)->mLibraryName = (yysemantic_stack_[(1) - (1)].nameData);
02962 }
02963 break;
02964
02965 case 92:
02966
02967
02968 #line 1517 "Parser.yy"
02969 {
02970 (yyval.nameData) = (yysemantic_stack_[(1) - (1)].nameData);
02971 }
02972 break;
02973
02974 case 93:
02975
02976
02977 #line 1523 "Parser.yy"
02978 {
02979 (yyval.nameData) = (yysemantic_stack_[(1) - (1)].nameData);
02980 }
02981 break;
02982
02983 case 94:
02984
02985
02986 #line 1529 "Parser.yy"
02987 {
02988 inDriver.getContext()->getCurrentCell()->setType(
02989 static_cast<Cell::Type>( (yysemantic_stack_[(4) - (3)].integerVal) ) );
02990 }
02991 break;
02992
02993 case 95:
02994
02995
02996 #line 1536 "Parser.yy"
02997 {
02998 (yyval.integerVal) = Cell::eTypeTie;
02999 }
03000 break;
03001
03002 case 96:
03003
03004
03005 #line 1540 "Parser.yy"
03006 {
03007 (yyval.integerVal) = Cell::eTypeRipper;
03008 }
03009 break;
03010
03011 case 97:
03012
03013
03014 #line 1544 "Parser.yy"
03015 {
03016 (yyval.integerVal) = Cell::eTypeGeneric;
03017 }
03018 break;
03019
03020 case 105:
03021
03022
03023 #line 1563 "Parser.yy"
03024 {
03025 delete (yysemantic_stack_[(6) - (3)].pairData);
03026 delete (yysemantic_stack_[(6) - (4)].pairData);
03027 }
03028 break;
03029
03030 case 108:
03031
03032
03033 #line 1574 "Parser.yy"
03034 {
03035 delete (yysemantic_stack_[(6) - (3)].pairData);
03036 delete (yysemantic_stack_[(6) - (4)].pairData);
03037 delete (yysemantic_stack_[(6) - (5)].pairData);
03038 }
03039 break;
03040
03041 case 109:
03042
03043
03044 #line 1582 "Parser.yy"
03045 {
03046 (yyval.stringVal) = (yysemantic_stack_[(4) - (3)].stringVal);
03047 }
03048 break;
03049
03050 case 110:
03051
03052
03053 #line 1587 "Parser.yy"
03054 {
03055 (yyval.stringVal) = NULL;
03056 }
03057 break;
03058
03059 case 111:
03060
03061
03062 #line 1591 "Parser.yy"
03063 {
03064 (yyval.stringVal) = ( (yysemantic_stack_[(2) - (1)].stringVal) ) ? (yysemantic_stack_[(2) - (1)].stringVal) : (yysemantic_stack_[(2) - (2)].stringVal);
03065 }
03066 break;
03067
03068 case 119:
03069
03070
03071 #line 1606 "Parser.yy"
03072 {
03073 delete (yysemantic_stack_[(2) - (2)].stringVal);
03074 }
03075 break;
03076
03077 case 120:
03078
03079
03080 #line 1610 "Parser.yy"
03081 {
03082 delete (yysemantic_stack_[(2) - (2)].stringVal);
03083 }
03084 break;
03085
03086 case 121:
03087
03088
03089 #line 1616 "Parser.yy"
03090 {
03091 (yyval.logicListData) = (yysemantic_stack_[(4) - (3)].logicListData);
03092 }
03093 break;
03094
03095 case 122:
03096
03097
03098 #line 1622 "Parser.yy"
03099 {
03100 (yyval.logicListData) = NULL;
03101 }
03102 break;
03103
03104 case 123:
03105
03106
03107 #line 1626 "Parser.yy"
03108 {
03109 (yyval.logicListData) = ((yysemantic_stack_[(2) - (1)].logicListData))?(yysemantic_stack_[(2) - (1)].logicListData):new LogicListData();
03110 (yyval.logicListData)->mNameDataList.push_back( (yysemantic_stack_[(2) - (2)].nameData) );
03111 }
03112 break;
03113
03114 case 135:
03115
03116
03117 #line 1646 "Parser.yy"
03118 {
03119 EdifContextSharedPtr ctx
03120 = inDriver.getContext();
03121 ViewSharedPtr view
03122 = ctx->getCurrentView();
03123 TimingSharedPtr timing
03124 = ctx->getCurrentTiming();
03125 view->setTiming( timing );
03126 ctx->setCurrentTiming( TimingSharedPtr() );
03127 }
03128 break;
03129
03130 case 136:
03131
03132
03133 #line 1657 "Parser.yy"
03134 {
03135 EdifContextSharedPtr ctx
03136 = inDriver.getContext();
03137 ViewSharedPtr view
03138 = ctx->getCurrentView();
03139 SimulateSharedPtr simulate
03140 = ctx->getCurrentSimulate();
03141 view->setSimulate( simulate );
03142 ctx->setCurrentSimulate( SimulateSharedPtr() );
03143 }
03144 break;
03145
03146 case 141:
03147
03148
03149 #line 1672 "Parser.yy"
03150 {
03151 delete (yysemantic_stack_[(2) - (2)].stringVal);
03152 }
03153 break;
03154
03155 case 142:
03156
03157
03158 #line 1676 "Parser.yy"
03159 {
03160 delete (yysemantic_stack_[(2) - (2)].stringVal);
03161 }
03162 break;
03163
03164 case 150:
03165
03166
03167 #line 1697 "Parser.yy"
03168 {
03169 (yyval.integerVal) = (yysemantic_stack_[(4) - (3)].integerVal);
03170 }
03171 break;
03172
03173 case 151:
03174
03175
03176 #line 1703 "Parser.yy"
03177 {
03178 if( (yysemantic_stack_[(1) - (1)].integerVal) );
03179 (yyval.integerVal) = (yysemantic_stack_[(1) - (1)].integerVal);
03180 }
03181 break;
03182
03183 case 152:
03184
03185
03186 #line 1708 "Parser.yy"
03187 {
03188 if( (yysemantic_stack_[(1) - (1)].integerVal) );
03189 (yyval.integerVal) = (yysemantic_stack_[(1) - (1)].integerVal);
03190 }
03191 break;
03192
03193 case 153:
03194
03195
03196 #line 1715 "Parser.yy"
03197 {
03198 (yyval.valueData) = (yysemantic_stack_[(4) - (3)].valueData);
03199 }
03200 break;
03201
03202 case 157:
03203
03204
03205 #line 1726 "Parser.yy"
03206 {
03207 delete (yysemantic_stack_[(2) - (2)].pairData);
03208 }
03209 break;
03210
03211 case 158:
03212
03213
03214 #line 1732 "Parser.yy"
03215 {
03216 if( (yysemantic_stack_[(5) - (3)].integerVal) )
03217 {
03218 EdifContextSharedPtr ctx = inDriver.getContext();
03219 ApplySharedPtr apply = ctx->getCurrentApply();
03220 apply->setNoOfCycle( (yysemantic_stack_[(5) - (3)].integerVal) );
03221
03222 boost::scoped_ptr<PairData> data((yysemantic_stack_[(5) - (4)].pairData));
03223 Value::Number num( data->mX, data->mY );
03224 Value val( Value::eValueTypeNumber, num );
03225 apply->setCycleDuration( val );
03226 }
03227 }
03228 break;
03229
03230 case 159:
03231
03232
03233 #line 1748 "Parser.yy"
03234 {
03235 (yyval.pairData) = new PairData();
03236 }
03237 break;
03238
03239 case 160:
03240
03241
03242 #line 1752 "Parser.yy"
03243 {
03244 (yyval.pairData) = (yysemantic_stack_[(1) - (1)].pairData);
03245 }
03246 break;
03247
03248 case 161:
03249
03250
03251 #line 1758 "Parser.yy"
03252 {
03253 (yyval.pairStrData) = new PairStrData( *(yysemantic_stack_[(5) - (3)].stringVal), *(yysemantic_stack_[(5) - (4)].stringVal) );
03254 }
03255 break;
03256
03257 case 162:
03258
03259
03260 #line 1763 "Parser.yy"
03261 {
03262 (yyval.stringVal) = new std::string();
03263 }
03264 break;
03265
03266 case 163:
03267
03268
03269 #line 1767 "Parser.yy"
03270 {
03271 (yyval.stringVal) = (yysemantic_stack_[(1) - (1)].stringVal);
03272 }
03273 break;
03274
03275 case 164:
03276
03277
03278 #line 1773 "Parser.yy"
03279 {
03280 (yyval.pairData) = (yysemantic_stack_[(4) - (3)].pairData);
03281 }
03282 break;
03283
03284 case 167:
03285
03286
03287 #line 1783 "Parser.yy"
03288 {
03289 (yyval.pairData) = (yysemantic_stack_[(4) - (3)].pairData);
03290 }
03291 break;
03292
03293 case 170:
03294
03295
03296 #line 1793 "Parser.yy"
03297 {
03298 (yyval.pairData) = (yysemantic_stack_[(4) - (3)].pairData);
03299 }
03300 break;
03301
03302 case 173:
03303
03304
03305 #line 1803 "Parser.yy"
03306 {
03307 (yyval.pairData) = (yysemantic_stack_[(4) - (3)].pairData);
03308 }
03309 break;
03310
03311 case 176:
03312
03313
03314 #line 1813 "Parser.yy"
03315 {
03316 (yyval.portDelay) = (yysemantic_stack_[(4) - (3)].portDelay);
03317 }
03318 break;
03319
03320 case 177:
03321
03322
03323 #line 1819 "Parser.yy"
03324 {
03325 boost::scoped_ptr<ValueData> data( (yysemantic_stack_[(1) - (1)].valueData) );
03326 (yyval.portDelay) = new PortDelay();
03327 (yyval.portDelay)->setType( PortDelay::eTypeDelay );
03328 (yyval.portDelay)->setDelay( data->mValues[0].get<Value::MiNoMax>() );
03329 }
03330 break;
03331
03332 case 178:
03333
03334
03335 #line 1826 "Parser.yy"
03336 {
03337 boost::scoped_ptr<ValueData> data( (yysemantic_stack_[(1) - (1)].valueData) );
03338 (yyval.portDelay) = new PortDelay();
03339 (yyval.portDelay)->setType( PortDelay::eTypeDelay );
03340 (yyval.portDelay)->setDelay( data->mValues[0].get<Value::MiNoMax>() );
03341 }
03342 break;
03343
03344 case 180:
03345
03346
03347 #line 1838 "Parser.yy"
03348 {
03349 delete (yysemantic_stack_[(1) - (1)].valueData);
03350 }
03351 break;
03352
03353 case 181:
03354
03355
03356 #line 1842 "Parser.yy"
03357 {
03358 delete (yysemantic_stack_[(1) - (1)].valueData);
03359 }
03360 break;
03361
03362 case 184:
03363
03364
03365 #line 1852 "Parser.yy"
03366 {
03367 delete (yysemantic_stack_[(2) - (2)].pairData);
03368 }
03369 break;
03370
03371 case 185:
03372
03373
03374 #line 1858 "Parser.yy"
03375 {
03376 (yyval.integerVal) = (yysemantic_stack_[(4) - (3)].integerVal);
03377 }
03378 break;
03379
03380 case 186:
03381
03382
03383 #line 1864 "Parser.yy"
03384 {
03385 (yyval.integerVal) = eDerivationCalculated;
03386 }
03387 break;
03388
03389 case 187:
03390
03391
03392 #line 1868 "Parser.yy"
03393 {
03394 (yyval.integerVal) = eDerivationMeasured;
03395 }
03396 break;
03397
03398 case 188:
03399
03400
03401 #line 1872 "Parser.yy"
03402 {
03403 (yyval.integerVal) = eDerivationRequired;
03404 }
03405 break;
03406
03407 case 189:
03408
03409
03410 #line 1878 "Parser.yy"
03411 {
03412 if( (yysemantic_stack_[(3) - (3)].nameData) )
03413 {
03414 EdifContextSharedPtr ctx
03415 = inDriver.getContext();
03416 RootSharedPtr root = ctx->getRoot();
03417 DesignSharedPtr design;
03418 design = root->findDesign( (yysemantic_stack_[(3) - (3)].nameData)->mName );
03419 if( design )
03420 {
03421 log("Skipped creation of existing design.\n");
03422 }
03423 else
03424 {
03425 try
03426 {
03427 ctx->getFactory()->create( design );
03428 }
03429 catch( Error &e )
03430 {
03431 std::string message = constructErrorMessage(
03432 "Unable to create design : %s",
03433 design->getName().c_str());
03434 log("%s\n", message.c_str());
03435 e.setCurrentLocation( __FUNCTION__,
03436 __FILE__, __LINE__ );
03437 e.saveContextData( "Parser error message", message );
03438 e.saveContextData( "Filename", yyloc.begin.filename );
03439 e.saveContextData( "StartLine", yyloc.begin.line );
03440 e.saveContextData( "EndLine", yyloc.end.line );
03441 inDriver.setParserError( e );
03442 error( yyloc, message );
03443 YYABORT;
03444 }
03445 design->setName( (yysemantic_stack_[(3) - (3)].nameData)->mName );
03446 if( !(yysemantic_stack_[(3) - (3)].nameData)->mOriginalName.empty() )
03447 {
03448 design->setOriginalName( (yysemantic_stack_[(3) - (3)].nameData)->mOriginalName );
03449 }
03450 design->setParent( root );
03451 root->addDesign( design );
03452 }
03453 ctx->setCurrentDesign( design );
03454 ctx->pushPropertyContainer( design );
03455 ctx->pushStatusContainer( design );
03456 delete (yysemantic_stack_[(3) - (3)].nameData);
03457 }
03458 }
03459 break;
03460
03461 case 190:
03462
03463
03464 #line 1926 "Parser.yy"
03465 {
03466 EdifContextSharedPtr ctx = inDriver.getContext();
03467 ctx->popPropertyContainer();
03468 ctx->popStatusContainer();
03469
03470 boost::scoped_ptr<CellRefData> cellRefData( (yysemantic_stack_[(6) - (5)].cellRefData) );
03471 std::string cellName = cellRefData->mCellName->mName;
03472 std::string libName = cellRefData->mLibraryName->mName;
03473 LibrarySharedPtr library
03474 = ctx->getRoot()->findLibrary( libName ) ;
03475 if( !library )
03476 {
03477 std::string message = constructErrorMessage(
03478 "Library %s not found",
03479 libName.c_str() );
03480 log("%s\n", message.c_str());
03481 Error e( eMessageIdParserError,
03482 __FUNCTION__, __FILE__, __LINE__ );
03483 e.saveContextData( "Parser error message", message );
03484 e.saveContextData( "Filename", yyloc.begin.filename );
03485 e.saveContextData( "StartLine", yyloc.begin.line );
03486 e.saveContextData( "EndLine", yyloc.end.line );
03487 inDriver.setParserError( e );
03488 error( yyloc, message );
03489 YYABORT;
03490 }
03491
03492 CellSharedPtr cell
03493 = library->findCell( cellName );
03494 if( !cell )
03495 {
03496 std::string message = constructErrorMessage(
03497 "Cell %s not found",
03498 cellName.c_str() );
03499 log("%s\n", message.c_str());
03500 Error e( eMessageIdParserError,
03501 __FUNCTION__, __FILE__, __LINE__ );
03502 e.saveContextData( "Parser error message", message );
03503 e.saveContextData( "Filename", yyloc.begin.filename );
03504 e.saveContextData( "StartLine", yyloc.begin.line );
03505 e.saveContextData( "EndLine", yyloc.end.line );
03506 inDriver.setParserError( e );
03507 error( yyloc, message );
03508 YYABORT;
03509 }
03510 DesignSharedPtr design = ctx->getCurrentDesign();
03511 design->setCellRefName( cellName );
03512 design->setLibraryRefName( libName );
03513 ctx->setCurrentDesign( DesignSharedPtr() );
03514 }
03515 break;
03516
03517 case 191:
03518
03519
03520 #line 1979 "Parser.yy"
03521 {
03522 (yyval.cellRefData) = new CellRefData();
03523 (yyval.cellRefData) = (yysemantic_stack_[(1) - (1)].cellRefData);
03524 }
03525 break;
03526
03527 case 192:
03528
03529
03530 #line 1984 "Parser.yy"
03531 {
03532 (yyval.cellRefData) = (yysemantic_stack_[(2) - (1)].cellRefData);
03533 }
03534 break;
03535
03536 case 193:
03537
03538
03539 #line 1988 "Parser.yy"
03540 {
03541 (yyval.cellRefData) = (yysemantic_stack_[(2) - (1)].cellRefData);
03542 EdifContextSharedPtr ctx = inDriver.getContext();
03543 DesignSharedPtr design = ctx->getCurrentDesign();
03544 design->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
03545 delete (yysemantic_stack_[(2) - (2)].stringVal);
03546 }
03547 break;
03548
03549 case 194:
03550
03551
03552 #line 1996 "Parser.yy"
03553 {
03554 (yyval.cellRefData) = (yysemantic_stack_[(2) - (1)].cellRefData);
03555 }
03556 break;
03557
03558 case 195:
03559
03560
03561 #line 2000 "Parser.yy"
03562 {
03563 (yyval.cellRefData) = (yysemantic_stack_[(2) - (1)].cellRefData);
03564 EdifContextSharedPtr ctx = inDriver.getContext();
03565 DesignSharedPtr design = ctx->getCurrentDesign();
03566 design->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
03567 delete (yysemantic_stack_[(2) - (2)].stringVal);
03568 }
03569 break;
03570
03571 case 197:
03572
03573
03574 #line 2013 "Parser.yy"
03575 {
03576 delete (yysemantic_stack_[(1) - (1)].stringVal);
03577 }
03578 break;
03579
03580 case 198:
03581
03582
03583 #line 2017 "Parser.yy"
03584 {
03585 delete (yysemantic_stack_[(1) - (1)].stringVal);
03586 }
03587 break;
03588
03589 case 199:
03590
03591
03592 #line 2023 "Parser.yy"
03593 {
03594 (yyval.stringVal) = (yysemantic_stack_[(4) - (3)].stringVal);
03595 }
03596 break;
03597
03598 case 217:
03599
03600
03601 #line 2052 "Parser.yy"
03602 {
03603 delete (yysemantic_stack_[(2) - (2)].stringVal);
03604 }
03605 break;
03606
03607 case 218:
03608
03609
03610 #line 2056 "Parser.yy"
03611 {
03612 delete (yysemantic_stack_[(2) - (2)].stringVal);
03613 }
03614 break;
03615
03616 case 224:
03617
03618
03619 #line 2071 "Parser.yy"
03620 {
03621 inDriver.getContext()->getCurrentPort()->setDirection(
03622 static_cast<PortDirection>( (yysemantic_stack_[(4) - (3)].integerVal) ) );
03623 }
03624 break;
03625
03626 case 225:
03627
03628
03629 #line 2078 "Parser.yy"
03630 {
03631 (yyval.integerVal) = 0;
03632 }
03633 break;
03634
03635 case 226:
03636
03637
03638 #line 2082 "Parser.yy"
03639 {
03640 (yyval.integerVal) = 1;
03641 }
03642 break;
03643
03644 case 227:
03645
03646
03647 #line 2086 "Parser.yy"
03648 {
03649 (yyval.integerVal) = 2;
03650 }
03651 break;
03652
03653 case 235:
03654
03655
03656 #line 2105 "Parser.yy"
03657 {
03658 (yyval.logicListData) = (yysemantic_stack_[(4) - (3)].logicListData);
03659 }
03660 break;
03661
03662 case 236:
03663
03664
03665 #line 2111 "Parser.yy"
03666 {
03667 (yyval.logicListData) = NULL;
03668 }
03669 break;
03670
03671 case 237:
03672
03673
03674 #line 2115 "Parser.yy"
03675 {
03676 (yyval.logicListData) = ((yysemantic_stack_[(2) - (1)].logicListData))?(yysemantic_stack_[(2) - (1)].logicListData):new LogicListData();
03677 (yyval.logicListData)->mNameDataList.push_back( (yysemantic_stack_[(2) - (2)].nameData) );
03678 }
03679 break;
03680
03681 case 239:
03682
03683
03684 #line 2125 "Parser.yy"
03685 {
03686 delete (yysemantic_stack_[(1) - (1)].pairData);
03687 }
03688 break;
03689
03690 case 241:
03691
03692
03693 #line 2132 "Parser.yy"
03694 {
03695 (yyval.pairData) = (yysemantic_stack_[(4) - (3)].pairData);
03696 }
03697 break;
03698
03699 case 245:
03700
03701
03702 #line 2143 "Parser.yy"
03703 {
03704 delete (yysemantic_stack_[(2) - (2)].stringVal);
03705 }
03706 break;
03707
03708 case 246:
03709
03710
03711 #line 2147 "Parser.yy"
03712 {
03713 delete (yysemantic_stack_[(2) - (2)].stringVal);
03714 }
03715 break;
03716
03717 case 255:
03718
03719
03720 #line 2169 "Parser.yy"
03721 {
03722 delete (yysemantic_stack_[(1) - (1)].logicRefData);
03723 }
03724 break;
03725
03726 case 262:
03727
03728
03729 #line 2183 "Parser.yy"
03730 {
03731 EventSharedPtr event;
03732 EdifContextSharedPtr ctx
03733 = inDriver.getContext();
03734 try
03735 {
03736 ctx->getFactory()->create( event );
03737 }
03738 catch( Error &e )
03739 {
03740 std::string message = constructErrorMessage(
03741 "Unable to create event" );
03742 log("%s\n", message.c_str());
03743 e.setCurrentLocation( __FUNCTION__,
03744 __FILE__, __LINE__ );
03745 e.saveContextData( "Parser error message", message );
03746 e.saveContextData( "Filename", yyloc.begin.filename );
03747 e.saveContextData( "StartLine", yyloc.begin.line );
03748 e.saveContextData( "EndLine", yyloc.end.line );
03749 inDriver.setParserError( e );
03750 error( yyloc, message );
03751 YYABORT;
03752 }
03753 ctx->setCurrentEvent( event );
03754 }
03755 break;
03756
03757 case 263:
03758
03759
03760 #line 2208 "Parser.yy"
03761 {
03762
03763
03764
03765 }
03766 break;
03767
03768 case 269:
03769
03770
03771 #line 2221 "Parser.yy"
03772 {
03773 EdifContextSharedPtr ctx
03774 = inDriver.getContext();
03775 EventSharedPtr event
03776 = ctx->getCurrentEvent();
03777 LogicElementSharedPtr logicElem
03778 = ctx->getCurrentLogicElement();
03779 if( event )
03780 {
03781 if( logicElem )
03782 {
03783 event->setTransition( logicElem );
03784 }
03785 }
03786 }
03787 break;
03788
03789 case 270:
03790
03791
03792 #line 2237 "Parser.yy"
03793 {
03794 EdifContextSharedPtr ctx
03795 = inDriver.getContext();
03796 EventSharedPtr event
03797 = ctx->getCurrentEvent();
03798 LogicElementSharedPtr logicElem
03799 = ctx->getCurrentLogicElement();
03800 if( event )
03801 {
03802 if( logicElem )
03803 {
03804 event->setTransition( logicElem );
03805 }
03806 }
03807 }
03808 break;
03809
03810 case 271:
03811
03812
03813 #line 2255 "Parser.yy"
03814 {
03815 boost::scoped_ptr<PortRefData> portData( (yysemantic_stack_[(1) - (1)].portRefData) );
03816 EdifContextSharedPtr ctx
03817 = inDriver.getContext();
03818 ViewSharedPtr view
03819 = ctx->getCurrentView();
03820 std::vector< std::string > nestedNames;
03821 PortRefData *currPortRef = (yysemantic_stack_[(1) - (1)].portRefData);
03822 PortRefData *nextPortRef = portData->mParentPort;
03823 nestedNames.push_back(currPortRef->mPortName->mName);
03824 while( nextPortRef )
03825 {
03826 currPortRef = nextPortRef;
03827 nestedNames.push_back( nextPortRef->mPortName->mName );
03828 nextPortRef = currPortRef->mParentPort;
03829 }
03830 bool isPort = ( NULL == currPortRef->mInstanceName );
03831 NameData *portNameData = currPortRef->mPortName;
03832 std::string topName = *(nestedNames.rbegin());
03833 if( isPort )
03834 {
03835 PortSharedPtr port = view->findPort( topName );
03836 if( !port )
03837 {
03838 std::string message = constructErrorMessage(
03839 "No port %s found",
03840 portNameData->mName.c_str());
03841 log("%s\n", message.c_str());
03842 Error e( eMessageIdParserError,
03843 __FUNCTION__, __FILE__, __LINE__ );
03844 e.saveContextData( "Parser error message", message );
03845 e.saveContextData( "Filename", yyloc.begin.filename );
03846 e.saveContextData( "StartLine", yyloc.begin.line );
03847 e.saveContextData( "EndLine", yyloc.end.line );
03848 inDriver.setParserError( e );
03849 error( yyloc, message );
03850 YYABORT;
03851 }
03852 try
03853 {
03854 connectibleFinder( nestedNames, port );
03855 if( !portData->mPortName->mIndices.empty() )
03856 {
03857 port = port->get( portData->mPortName->mIndices );
03858 }
03859 EventSharedPtr event
03860 = ctx->getCurrentEvent();
03861 event->addPort( port );
03862 }
03863 catch( Error &e )
03864 {
03865 e.setCurrentLocation(
03866 __FUNCTION__, __FILE__, __LINE__ );
03867 throw;
03868 }
03869 }
03870 else
03871 {
03872 NameData *instanceName
03873 = currPortRef->mInstanceName;
03874 InstanceSharedPtr instance
03875 = view->findInstance(
03876 instanceName->mName );
03877 if( !instance )
03878 {
03879 std::string message = constructErrorMessage(
03880 "Instance %s not known",
03881 instanceName->mName.c_str() );
03882 log("%s\n", message.c_str());
03883 Error e( eMessageIdParserError,
03884 __FUNCTION__, __FILE__, __LINE__ );
03885 e.saveContextData( "Parser error message", message );
03886 e.saveContextData( "Filename", yyloc.begin.filename );
03887 e.saveContextData( "StartLine", yyloc.begin.line );
03888 e.saveContextData( "EndLine", yyloc.end.line );
03889 inDriver.setParserError( e );
03890 error( yyloc, message );
03891 YYABORT;
03892 }
03893 if( !instanceName->mIndices.empty() )
03894 {
03895 InstanceSharedPtr bit
03896 = instance->get( instanceName->mIndices );
03897 instance = bit;
03898 }
03899 PortReferenceSharedPtr portRef
03900 = instance->findPortReference( topName );
03901 if( !portRef )
03902 {
03903 std::string message = constructErrorMessage(
03904 "No port ref %s found",
03905 portNameData->mName.c_str());
03906 log("%s\n", message.c_str());
03907 Error e( eMessageIdParserError,
03908 __FUNCTION__, __FILE__, __LINE__ );
03909 e.saveContextData( "Parser error message", message );
03910 e.saveContextData( "Filename", yyloc.begin.filename );
03911 e.saveContextData( "StartLine", yyloc.begin.line );
03912 e.saveContextData( "EndLine", yyloc.end.line );
03913 inDriver.setParserError( e );
03914 error( yyloc, message );
03915 YYABORT;
03916 }
03917 try
03918 {
03919 connectibleFinder( nestedNames, portRef );
03920 if( !portData->mPortName->mIndices.empty() )
03921 {
03922 portRef = portRef->get(
03923 portData->mPortName->mIndices );
03924 }
03925 EventSharedPtr event
03926 = ctx->getCurrentEvent();
03927 event->addPortReference( portRef );
03928 }
03929 catch( Error &e )
03930 {
03931 std::string message = constructErrorMessage(
03932 "Unable to connect port ref : %s",
03933 portRef->getName().c_str());
03934 log("%s\n", message.c_str());
03935 e.setCurrentLocation( __FUNCTION__,
03936 __FILE__, __LINE__ );
03937 e.saveContextData( "Parser error message", message );
03938 e.saveContextData( "Filename", yyloc.begin.filename );
03939 e.saveContextData( "StartLine", yyloc.begin.line );
03940 e.saveContextData( "EndLine", yyloc.end.line );
03941 inDriver.setParserError( e );
03942 error( yyloc, message );
03943 YYABORT;
03944 }
03945 }
03946 }
03947 break;
03948
03949 case 272:
03950
03951
03952 #line 2391 "Parser.yy"
03953 {
03954 if( NULL != (yysemantic_stack_[(1) - (1)].portListData) && !(yysemantic_stack_[(1) - (1)].portListData)->mPortRefs.empty() )
03955 {
03956 boost::scoped_ptr<PortListData> portListData( (yysemantic_stack_[(1) - (1)].portListData) );
03957 std::string message;
03958
03959 EdifContextSharedPtr ctx = inDriver.getContext();
03960
03961 PortListSharedPtr portList;
03962 ctx->getFactory()->create( portList );
03963
03964 for( std::vector<PortRefData *>::iterator it
03965 = portListData->mPortRefs.begin();
03966 it != portListData->mPortRefs.end(); ++it )
03967 {
03968 PortRefData *portData = *it;
03969 std::vector< std::string > nestedNames;
03970 PortRefData *currPortRef = *it;
03971 PortRefData *nextPortRef = portData->mParentPort;
03972 nestedNames.push_back(currPortRef->mPortName->mName);
03973 while( nextPortRef )
03974 {
03975 currPortRef = nextPortRef;
03976 nestedNames.push_back( nextPortRef->mPortName->mName );
03977 nextPortRef = currPortRef->mParentPort;
03978 }
03979 bool isPort = ( NULL == currPortRef->mInstanceName );
03980 NameData *portNameData = currPortRef->mPortName;
03981 std::string topName = *(nestedNames.rbegin());
03982 ViewSharedPtr view = ctx->getCurrentView();
03983 if( isPort )
03984 {
03985 PortSharedPtr port = view->findPort( topName );
03986 if( !port )
03987 {
03988 SimulateSharedPtr simulate
03989 = ctx->getCurrentSimulate();
03990 if( simulate )
03991 {
03992 PortListAliasSharedPtr portList
03993 = simulate->findPortListAlias( topName );
03994 if( !portList )
03995 {
03996 std::string message = constructErrorMessage(
03997 "No port %s found in portListAlias\n",
03998 portNameData->mName.c_str());
03999 log("%s\n", message.c_str());
04000 Error e( eMessageIdParserError,
04001 __FUNCTION__, __FILE__, __LINE__ );
04002 e.saveContextData( "Parser error message", message );
04003 e.saveContextData( "Filename", yyloc.begin.filename );
04004 e.saveContextData( "StartLine", yyloc.begin.line );
04005 e.saveContextData( "EndLine", yyloc.end.line );
04006 inDriver.setParserError( e );
04007 error( yyloc, message );
04008 YYABORT;
04009 }
04010 }
04011 else
04012 {
04013 std::string message = constructErrorMessage(
04014 "No port %s found in view %s",
04015 portNameData->mName.c_str(),
04016 view->getName().c_str() );
04017 log("%s\n", message.c_str());
04018 Error e( eMessageIdParserError,
04019 __FUNCTION__, __FILE__, __LINE__ );
04020 e.saveContextData( "Parser error message", message );
04021 e.saveContextData( "Filename", yyloc.begin.filename );
04022 e.saveContextData( "StartLine", yyloc.begin.line );
04023 e.saveContextData( "EndLine", yyloc.end.line );
04024 inDriver.setParserError( e );
04025 error( yyloc, message );
04026 YYABORT;
04027 }
04028 }
04029 try
04030 {
04031 connectibleFinder( nestedNames, port );
04032 if( !portData->mPortName->mIndices.empty() )
04033 {
04034 port = port->get( portData->mPortName->mIndices );
04035 }
04036 portList->addChildPort( port );
04037 }
04038 catch( Error &e )
04039 {
04040 std::string message = constructErrorMessage(
04041 "Unable to connect port : %s",
04042 port->getName().c_str());
04043 log("%s\n", message.c_str());
04044 e.setCurrentLocation( __FUNCTION__,
04045 __FILE__, __LINE__ );
04046 e.saveContextData( "Parser error message", message );
04047 e.saveContextData( "Filename", yyloc.begin.filename );
04048 e.saveContextData( "StartLine", yyloc.begin.line );
04049 e.saveContextData( "EndLine", yyloc.end.line );
04050 inDriver.setParserError( e );
04051 error( yyloc, message );
04052 YYABORT;
04053 }
04054 }
04055 else
04056 {
04057 NameData *instanceName
04058 = currPortRef->mInstanceName;
04059 InstanceSharedPtr instance
04060 = view->findInstance(
04061 instanceName->mName );
04062 if( !instance )
04063 {
04064 std::string message = constructErrorMessage(
04065 "Instance %s not known",
04066 instanceName->mName.c_str() );
04067 log("%s\n", message.c_str());
04068 Error e( eMessageIdParserError,
04069 __FUNCTION__, __FILE__, __LINE__ );
04070 e.saveContextData( "Parser error message", message );
04071 e.saveContextData( "Filename", yyloc.begin.filename );
04072 e.saveContextData( "StartLine", yyloc.begin.line );
04073 e.saveContextData( "EndLine", yyloc.end.line );
04074 inDriver.setParserError( e );
04075 error( yyloc, message );
04076 YYABORT;
04077 }
04078 if( !instanceName->mIndices.empty() )
04079 {
04080 InstanceSharedPtr bit
04081 = instance->get( instanceName->mIndices );
04082 instance = bit;
04083 }
04084 PortReferenceSharedPtr portRef
04085 = instance->findPortReference( topName );
04086 if( !portRef )
04087 {
04088 std::string message = constructErrorMessage(
04089 "No port ref %s found",
04090 portNameData->mName.c_str());
04091 log("%s\n", message.c_str());
04092 Error e( eMessageIdParserError,
04093 __FUNCTION__, __FILE__, __LINE__ );
04094 e.saveContextData( "Parser error message", message );
04095 e.saveContextData( "Filename", yyloc.begin.filename );
04096 e.saveContextData( "StartLine", yyloc.begin.line );
04097 e.saveContextData( "EndLine", yyloc.end.line );
04098 inDriver.setParserError( e );
04099 error( yyloc, message );
04100 YYABORT;
04101 }
04102 try
04103 {
04104 connectibleFinder( nestedNames, portRef );
04105 if( !portData->mPortName->mIndices.empty() )
04106 {
04107 portRef = portRef->get(
04108 portData->mPortName->mIndices );
04109 }
04110 portList->addChildPortReference( portRef );
04111 }
04112 catch( Error &e )
04113 {
04114 std::string message = constructErrorMessage(
04115 "Unable to connect port ref : %s",
04116 portRef->getName().c_str());
04117 log("%s\n", message.c_str());
04118 e.setCurrentLocation( __FUNCTION__,
04119 __FILE__, __LINE__ );
04120 e.saveContextData( "Parser error message", message );
04121 e.saveContextData( "Filename", yyloc.begin.filename );
04122 e.saveContextData( "StartLine", yyloc.begin.line );
04123 e.saveContextData( "EndLine", yyloc.end.line );
04124 inDriver.setParserError( e );
04125 error( yyloc, message );
04126 YYABORT;
04127 }
04128 }
04129 }
04130 EventSharedPtr event
04131 = ctx->getCurrentEvent();
04132 event->setPortList( portList );
04133 }
04134 }
04135 break;
04136
04137 case 273:
04138
04139
04140 #line 2576 "Parser.yy"
04141 {
04142 boost::scoped_ptr<NetRefData> netData( (yysemantic_stack_[(1) - (1)].netRefData) );
04143 EdifContextSharedPtr ctx
04144 = inDriver.getContext();
04145 ViewSharedPtr view
04146 = ctx->getCurrentView();
04147 std::vector< std::string > nestedNames;
04148 NetRefData *currNetRef = (yysemantic_stack_[(1) - (1)].netRefData);
04149 NetRefData *nextNetRef = netData->mParentNet;
04150 nestedNames.push_back(currNetRef->mNetName->mName);
04151 while( nextNetRef )
04152 {
04153 currNetRef = nextNetRef;
04154 nestedNames.push_back( nextNetRef->mNetName->mName );
04155 nextNetRef = currNetRef->mParentNet;
04156 }
04157 bool isNet = ( NULL == currNetRef->mInstanceName );
04158 NameData *netNameData = currNetRef->mNetName;
04159 std::string topName = *(nestedNames.rbegin());
04160 if( isNet )
04161 {
04162 NetSharedPtr net = view->findNet( topName );
04163 if( !net )
04164 {
04165 std::string message = constructErrorMessage(
04166 "No Net %s found",
04167 netNameData->mName.c_str());
04168 log("%s\n", message.c_str());
04169 Error e( eMessageIdParserError,
04170 __FUNCTION__, __FILE__, __LINE__ );
04171 e.saveContextData( "Parser error message", message );
04172 e.saveContextData( "Filename", yyloc.begin.filename );
04173 e.saveContextData( "StartLine", yyloc.begin.line );
04174 e.saveContextData( "EndLine", yyloc.end.line );
04175 inDriver.setParserError( e );
04176 error( yyloc, message );
04177 YYABORT;
04178 }
04179 try
04180 {
04181 connectibleFinder( nestedNames, net );
04182 if( !netData->mNetName->mIndices.empty() )
04183 {
04184 net = net->get( netData->mNetName->mIndices );
04185 }
04186 EventSharedPtr event
04187 = ctx->getCurrentEvent();
04188 event->addNet( net );
04189 }
04190 catch( Error &e )
04191 {
04192 e.setCurrentLocation(
04193 __FUNCTION__, __FILE__, __LINE__ );
04194 throw;
04195 }
04196 }
04197 else
04198 {
04199 NameData *instanceName
04200 = currNetRef->mInstanceName;
04201 InstanceSharedPtr instance
04202 = view->findInstance(
04203 instanceName->mName );
04204 if( !instance )
04205 {
04206 std::string message = constructErrorMessage(
04207 "Instance %s not known",
04208 instanceName->mName.c_str() );
04209 log("%s\n", message.c_str());
04210 Error e( eMessageIdParserError,
04211 __FUNCTION__, __FILE__, __LINE__ );
04212 e.saveContextData( "Parser error message", message );
04213 e.saveContextData( "Filename", yyloc.begin.filename );
04214 e.saveContextData( "StartLine", yyloc.begin.line );
04215 e.saveContextData( "EndLine", yyloc.end.line );
04216 inDriver.setParserError( e );
04217 error( yyloc, message );
04218 YYABORT;
04219 }
04220 if( !instanceName->mIndices.empty() )
04221 {
04222 InstanceSharedPtr bit
04223 = instance->get( instanceName->mIndices );
04224 instance = bit;
04225 }
04226 NetSharedPtr net = view->findNet( topName );
04227 if( !net )
04228 {
04229 std::string message = constructErrorMessage(
04230 "No Net ref %s found",
04231 netNameData->mName.c_str());
04232 log("%s\n", message.c_str());
04233 Error e( eMessageIdParserError,
04234 __FUNCTION__, __FILE__, __LINE__ );
04235 e.saveContextData( "Parser error message", message );
04236 e.saveContextData( "Filename", yyloc.begin.filename );
04237 e.saveContextData( "StartLine", yyloc.begin.line );
04238 e.saveContextData( "EndLine", yyloc.end.line );
04239 inDriver.setParserError( e );
04240 error( yyloc, message );
04241 YYABORT;
04242 }
04243 try
04244 {
04245 connectibleFinder( nestedNames, net );
04246 if( !netData->mNetName->mIndices.empty() )
04247 {
04248 net = net->get( netData->mNetName->mIndices );
04249 }
04250 EventSharedPtr event
04251 = ctx->getCurrentEvent();
04252 event->addNet( net );
04253 }
04254 catch( Error &e )
04255 {
04256 e.setCurrentLocation(
04257 __FUNCTION__, __FILE__, __LINE__ );
04258 throw;
04259 }
04260 }
04261 }
04262 break;
04263
04264 case 274:
04265
04266
04267 #line 2700 "Parser.yy"
04268 {
04269 delete (yysemantic_stack_[(4) - (3)].pairData);
04270 }
04271 break;
04272
04273 case 275:
04274
04275
04276 #line 2706 "Parser.yy"
04277 {
04278 boost::scoped_ptr<NameData> name( (yysemantic_stack_[(4) - (3)].nameData) );
04279 if( name && !name->mName.empty() )
04280 {
04281 EdifContextSharedPtr ctx
04282 = inDriver.getContext();
04283 RootSharedPtr root = ctx->getRoot();
04284 LibrarySharedPtr lib;
04285
04286
04287 lib = root->findLibrary( name->mName );
04288 if( lib )
04289 {
04290 log("Skipped creation of existing lib.\n");
04291 }
04292 EdifLevel level;
04293 switch( (yysemantic_stack_[(4) - (4)].integerVal) )
04294 {
04295 case 0:
04296 {
04297 level = eEdifLevel0;
04298 break;
04299 }
04300 case 1:
04301 {
04302 level = eEdifLevel1;
04303 break;
04304 }
04305 case 2:
04306 {
04307 level = eEdifLevel2;
04308 break;
04309 }
04310 default:
04311 {
04312 std::string message = constructErrorMessage(
04313 "Edif level %s is not supported", (yysemantic_stack_[(4) - (4)].integerVal) );
04314 log("%s\n", message.c_str());
04315 Error e( eMessageIdParserError,
04316 __FUNCTION__, __FILE__, __LINE__ );
04317 e.saveContextData( "Parser error message", message );
04318 e.saveContextData( "Filename", yyloc.begin.filename );
04319 e.saveContextData( "StartLine", yyloc.begin.line );
04320 e.saveContextData( "EndLine", yyloc.end.line );
04321 inDriver.setParserError( e );
04322 error( yyloc, message );
04323 YYABORT;
04324 }
04325 }
04326 if( lib )
04327 {
04328 if( lib->getLevel() != level )
04329 {
04330 std::string message = constructErrorMessage(
04331 "Level mismatch - old %d new %d\n",
04332 lib->getLevel(), level );
04333 log("%s\n", message.c_str());
04334 Error e( eMessageIdParserError,
04335 __FUNCTION__, __FILE__, __LINE__ );
04336 e.saveContextData( "Parser error message", message );
04337 e.saveContextData( "Filename", yyloc.begin.filename );
04338 e.saveContextData( "StartLine", yyloc.begin.line );
04339 e.saveContextData( "EndLine", yyloc.end.line );
04340 inDriver.setParserError( e );
04341 error( yyloc, message );
04342 YYABORT;
04343 }
04344 else
04345 {
04346 log("We have found the actual lib corresponding to this lib\n");
04347 }
04348 }
04349 else
04350 {
04351 ctx->getFactory()->create( lib );
04352 lib->setName( name->mName );
04353 if( ! name->mOriginalName.empty() )
04354 {
04355 lib->setOriginalName( name->mOriginalName );
04356 }
04357 lib->setLevel( level );
04358 lib->setParent( root );
04359 lib->setIsExtern( true );
04360 root->addLibrary( lib );
04361 log("Created extern lib %s level %d\n",
04362 lib->getName().c_str(), level );
04363 }
04364 ctx->setCurrentLibrary( lib );
04365 ctx->pushStatusContainer( lib );
04366 }
04367 else
04368 {
04369
04370 }
04371 }
04372 break;
04373
04374 case 276:
04375
04376
04377 #line 2801 "Parser.yy"
04378 {
04379 inDriver.getContext()->setCurrentLibrary(
04380 LibrarySharedPtr() );
04381 inDriver.getContext()->popStatusContainer();
04382 }
04383 break;
04384
04385 case 280:
04386
04387
04388 #line 2813 "Parser.yy"
04389 {
04390 EdifContextSharedPtr ctx = inDriver.getContext();
04391 LibrarySharedPtr lib = ctx->getCurrentLibrary();
04392 lib->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
04393 delete (yysemantic_stack_[(2) - (2)].stringVal);
04394 }
04395 break;
04396
04397 case 281:
04398
04399
04400 #line 2820 "Parser.yy"
04401 {
04402 EdifContextSharedPtr ctx = inDriver.getContext();
04403 LibrarySharedPtr lib = ctx->getCurrentLibrary();
04404 lib->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
04405 delete (yysemantic_stack_[(2) - (2)].stringVal);
04406 }
04407 break;
04408
04409 case 295:
04410
04411
04412 #line 2848 "Parser.yy"
04413 {
04414 delete (yysemantic_stack_[(2) - (2)].stringVal);
04415 }
04416 break;
04417
04418 case 297:
04419
04420
04421 #line 2853 "Parser.yy"
04422 {
04423 delete (yysemantic_stack_[(2) - (2)].stringVal);
04424 }
04425 break;
04426
04427 case 316:
04428
04429
04430 #line 2887 "Parser.yy"
04431 {
04432 delete (yysemantic_stack_[(2) - (2)].stringVal);
04433 }
04434 break;
04435
04436 case 318:
04437
04438
04439 #line 2892 "Parser.yy"
04440 {
04441 delete (yysemantic_stack_[(2) - (2)].stringVal);
04442 }
04443 break;
04444
04445 case 332:
04446
04447
04448 #line 2917 "Parser.yy"
04449 {
04450 delete (yysemantic_stack_[(2) - (2)].stringVal);
04451 }
04452 break;
04453
04454 case 333:
04455
04456
04457 #line 2921 "Parser.yy"
04458 {
04459 delete (yysemantic_stack_[(2) - (2)].stringVal);
04460 }
04461 break;
04462
04463 case 337:
04464
04465
04466 #line 2932 "Parser.yy"
04467 {
04468 delete (yysemantic_stack_[(2) - (2)].stringVal);
04469 }
04470 break;
04471
04472 case 338:
04473
04474
04475 #line 2936 "Parser.yy"
04476 {
04477 delete (yysemantic_stack_[(2) - (2)].stringVal);
04478 }
04479 break;
04480
04481 case 347:
04482
04483
04484 #line 2955 "Parser.yy"
04485 {
04486 delete (yysemantic_stack_[(2) - (2)].stringVal);
04487 }
04488 break;
04489
04490 case 348:
04491
04492
04493 #line 2959 "Parser.yy"
04494 {
04495 delete (yysemantic_stack_[(2) - (2)].stringVal);
04496 }
04497 break;
04498
04499 case 352:
04500
04501
04502 #line 2970 "Parser.yy"
04503 {
04504 delete (yysemantic_stack_[(2) - (2)].stringVal);
04505 }
04506 break;
04507
04508 case 353:
04509
04510
04511 #line 2974 "Parser.yy"
04512 {
04513 delete (yysemantic_stack_[(2) - (2)].stringVal);
04514 }
04515 break;
04516
04517 case 354:
04518
04519
04520 #line 2980 "Parser.yy"
04521 {
04522 if( (yysemantic_stack_[(6) - (3)].integerVal) );
04523 if( (yysemantic_stack_[(6) - (4)].integerVal) );
04524 delete (yysemantic_stack_[(6) - (5)].valueData);
04525 }
04526 break;
04527
04528 case 362:
04529
04530
04531 #line 3001 "Parser.yy"
04532 {
04533 ForbiddenEventSharedPtr forbiddenEvent;
04534 EdifContextSharedPtr ctx
04535 = inDriver.getContext();
04536 try
04537 {
04538 ctx->getFactory()->create( forbiddenEvent );
04539 }
04540 catch( Error &e )
04541 {
04542 std::string message = constructErrorMessage(
04543 "Unable to create forbiddenEvent" );
04544 log("%s\n", message.c_str());
04545 e.setCurrentLocation( __FUNCTION__,
04546 __FILE__, __LINE__ );
04547 e.saveContextData( "Parser error message", message );
04548 e.saveContextData( "Filename", yyloc.begin.filename );
04549 e.saveContextData( "StartLine", yyloc.begin.line );
04550 e.saveContextData( "EndLine", yyloc.end.line );
04551 inDriver.setParserError( e );
04552 error( yyloc, message );
04553 YYABORT;
04554 }
04555 ctx->setCurrentForbiddenEvent( forbiddenEvent );
04556 TimingSharedPtr timing = ctx->getCurrentTiming();
04557 timing->addForbiddenEvent( forbiddenEvent );
04558 }
04559 break;
04560
04561 case 363:
04562
04563
04564 #line 3028 "Parser.yy"
04565 {
04566 EdifContextSharedPtr ctx = inDriver.getContext();
04567 ctx->setCurrentForbiddenEvent( ForbiddenEventSharedPtr() );
04568 }
04569 break;
04570
04571 case 365:
04572
04573
04574 #line 3036 "Parser.yy"
04575 {
04576 EdifContextSharedPtr ctx = inDriver.getContext();
04577 ForbiddenEventSharedPtr forbiddenEvent
04578 = ctx->getCurrentForbiddenEvent();
04579 EventSharedPtr event
04580 = ctx->getCurrentEvent();
04581 event->setType( Event::eTypeEvent );
04582 forbiddenEvent->addEvent( event );
04583 ctx->setCurrentEvent( EventSharedPtr() );
04584 }
04585 break;
04586
04587 case 366:
04588
04589
04590 #line 3049 "Parser.yy"
04591 {
04592 inDriver.getLexer()->setIsIdContext( true );
04593 }
04594 break;
04595
04596 case 369:
04597
04598
04599 #line 3057 "Parser.yy"
04600 {
04601 if( (yysemantic_stack_[(2) - (2)].integerVal) );
04602 }
04603 break;
04604
04605 case 370:
04606
04607
04608 #line 3061 "Parser.yy"
04609 {
04610 delete (yysemantic_stack_[(2) - (2)].stringVal);
04611 }
04612 break;
04613
04614 case 371:
04615
04616
04617 #line 3065 "Parser.yy"
04618 {
04619 delete (yysemantic_stack_[(2) - (2)].stringVal);
04620 }
04621 break;
04622
04623 case 373:
04624
04625
04626 #line 3072 "Parser.yy"
04627 {
04628 (yyval.nameData) = (yysemantic_stack_[(4) - (3)].nameData);
04629 }
04630 break;
04631
04632 case 374:
04633
04634
04635 #line 3078 "Parser.yy"
04636 {
04637 delete (yysemantic_stack_[(4) - (3)].pairData);
04638 }
04639 break;
04640
04641 case 375:
04642
04643
04644 #line 3084 "Parser.yy"
04645 {
04646 delete (yysemantic_stack_[(5) - (3)].pairData);
04647 delete (yysemantic_stack_[(5) - (4)].pairData);
04648 }
04649 break;
04650
04651 case 376:
04652
04653
04654 #line 3091 "Parser.yy"
04655 {
04656 LogicElementSharedPtr ignoreLogicElem;
04657 EdifContextSharedPtr ctx
04658 = inDriver.getContext();
04659 try
04660 {
04661 ctx->getFactory()->create( ignoreLogicElem );
04662 ignoreLogicElem->setType( LogicElement::eTypeIgnored );
04663 }
04664 catch( Error &e )
04665 {
04666 std::string message = constructErrorMessage(
04667 "Unable to create Ignore" );
04668 log("%s\n", message.c_str());
04669 e.setCurrentLocation( __FUNCTION__,
04670 __FILE__, __LINE__ );
04671 e.saveContextData( "Parser error message", message );
04672 e.saveContextData( "Filename", yyloc.begin.filename );
04673 e.saveContextData( "StartLine", yyloc.begin.line );
04674 e.saveContextData( "EndLine", yyloc.end.line );
04675 inDriver.setParserError( e );
04676 error( yyloc, message );
04677 YYABORT;
04678 }
04679 LogicElementSharedPtr logicElem
04680 = ctx->getCurrentLogicElement();
04681 logicElem->addChildLogicElement( ignoreLogicElem );
04682 }
04683 break;
04684
04685 case 381:
04686
04687
04688 #line 3132 "Parser.yy"
04689 {
04690 inDriver.getContext()->setIsInInstance( true );
04691 }
04692 break;
04693
04694 case 382:
04695
04696
04697 #line 3135 "Parser.yy"
04698 {
04699 boost::scoped_ptr<NameData> nameData( (yysemantic_stack_[(6) - (3)].nameData) );
04700 EdifContextSharedPtr ctx = inDriver.getContext();
04701 boost::scoped_ptr<InstanceInfo> info( (yysemantic_stack_[(6) - (5)].instanceInfo) );
04702 ViewRefData *viewData = info->mViewRefData;
04703 std::string cellName
04704 = viewData->mCellName->mName;
04705 std::string viewName
04706 = viewData->mViewName->mName;
04707 LibrarySharedPtr library;
04708 std::string libraryName;
04709 if( !viewData->mLibraryName )
04710 {
04711 library = ctx->getCurrentLibrary();
04712 }
04713 else
04714 {
04715 libraryName = viewData->mLibraryName->mName;
04716 library = ctx->getRoot()->findLibrary( libraryName );
04717 }
04718 if( !library )
04719 {
04720 std::string message = constructErrorMessage(
04721 "Library %s not found",
04722 libraryName.c_str() );
04723 log("%s\n", message.c_str());
04724 Error e( eMessageIdParserError,
04725 __FUNCTION__, __FILE__, __LINE__ );
04726 e.saveContextData( "Parser error message", message );
04727 e.saveContextData( "Filename", yyloc.begin.filename );
04728 e.saveContextData( "StartLine", yyloc.begin.line );
04729 e.saveContextData( "EndLine", yyloc.end.line );
04730 inDriver.setParserError( e );
04731 error( yyloc, message );
04732 YYABORT;
04733 }
04734 libraryName = library->getName();
04735 ViewSharedPtr masterView;
04736 bool masterIsExtern = false;
04737 LinkerSharedPtr linker = ctx->getLinker();
04738 Linker::NameSpec viewNameSpec(
04739 libraryName, cellName, viewName );
04740 if( !libraryName.empty() )
04741 {
04742 masterView
04743 = linker->findExternView( viewNameSpec );
04744 if( !masterView )
04745 {
04746
04747 library = ctx->getRoot()->findLibrary(
04748 libraryName );
04749 }
04750 else
04751 {
04752 masterIsExtern = true;
04753 }
04754 }
04755 else
04756 {
04757 library = ctx->getCurrentLibrary();
04758 }
04759
04760 if( !masterIsExtern )
04761 {
04762 CellSharedPtr cell;
04763 cell = library->findCell( cellName );
04764 if( !cell )
04765 {
04766 std::string message = constructErrorMessage(
04767 "Cell %s not found",
04768 cellName.c_str() );
04769 log("%s\n", message.c_str());
04770 Error e( eMessageIdParserError,
04771 __FUNCTION__, __FILE__, __LINE__ );
04772 e.saveContextData( "Parser error message", message );
04773 e.saveContextData( "Filename", yyloc.begin.filename );
04774 e.saveContextData( "StartLine", yyloc.begin.line );
04775 e.saveContextData( "EndLine", yyloc.end.line );
04776 inDriver.setParserError( e );
04777 error( yyloc, message );
04778 YYABORT;
04779 }
04780 masterView = cell->findView( viewName );
04781 if( !masterView )
04782 {
04783 std::string message = constructErrorMessage(
04784 "View %s not found",
04785 viewName.c_str() );
04786 log("%s\n", message.c_str());
04787 Error e( eMessageIdParserError,
04788 __FUNCTION__, __FILE__, __LINE__ );
04789 e.saveContextData( "Parser error message", message );
04790 e.saveContextData( "Filename", yyloc.begin.filename );
04791 e.saveContextData( "StartLine", yyloc.begin.line );
04792 e.saveContextData( "EndLine", yyloc.end.line );
04793 inDriver.setParserError( e );
04794 error( yyloc, message );
04795 YYABORT;
04796 }
04797 }
04798 InstanceSharedPtr instance;
04799 if( nameData->mIndices.empty() )
04800 {
04801 try
04802 {
04803 SingleInstanceSharedPtr singleInst;
04804 ctx->getFactory()->create( singleInst );
04805 instance = singleInst;
04806 instance->setName( nameData->mName );
04807 if( !nameData->mOriginalName.empty() )
04808 {
04809 instance->setOriginalName( nameData->mOriginalName );
04810 }
04811 }
04812 catch(Error &e)
04813 {
04814 std::string message = constructErrorMessage(
04815 "Unable to create Instance : %s",
04816 instance->getName().c_str());
04817 log("%s\n", message.c_str());
04818 e.setCurrentLocation( __FUNCTION__,
04819 __FILE__, __LINE__ );
04820 e.saveContextData( "Parser error message", message );
04821 e.saveContextData( "Filename", yyloc.begin.filename );
04822 e.saveContextData( "StartLine", yyloc.begin.line );
04823 e.saveContextData( "EndLine", yyloc.end.line );
04824 inDriver.setParserError( e );
04825 error( yyloc, message );
04826 YYABORT;
04827 }
04828 }
04829 else
04830 {
04831 try
04832 {
04833 InstanceArraySharedPtr instArray;
04834 ctx->getFactory()->create( instArray );
04835 instArray->setName( nameData->mName );
04836 if( !nameData->mOriginalName.empty() )
04837 {
04838 instArray->setOriginalName( nameData->mOriginalName );
04839 }
04840 instArray->constructChildren(
04841 ctx->getFactory(),
04842 nameData->mIndices );
04843 instance = instArray;
04844 }
04845 catch(Error &e)
04846 {
04847 std::string message = constructErrorMessage(
04848 "Unable to create Instance Array : %s",
04849 instance->getName().c_str());
04850 log("%s\n", message.c_str());
04851 e.setCurrentLocation( __FUNCTION__,
04852 __FILE__, __LINE__ );
04853 e.saveContextData( "Parser error message", message );
04854 e.saveContextData( "Filename", yyloc.begin.filename );
04855 e.saveContextData( "StartLine", yyloc.begin.line );
04856 e.saveContextData( "EndLine", yyloc.end.line );
04857 inDriver.setParserError( e );
04858 error( yyloc, message );
04859 YYABORT;
04860 }
04861 }
04862 ctx->setCurrentInstance( instance );
04863 try
04864 {
04865 instance->bindToMasterView( masterView );
04866 if( eCompositionTypeVector
04867 == instance->getCompositionType() )
04868 {
04869 std::vector< InstanceSharedPtr > children;
04870 instance->getChildren( children );
04871 std::vector< InstanceSharedPtr >::iterator inst
04872 = children.begin();
04873 std::vector< InstanceSharedPtr >::iterator end
04874 = children.end();
04875 for( ;inst != end; ++inst )
04876 {
04877
04878 PortRefCreator<PortReferenceSharedPtr> creator(
04879 ctx->getFactory(), *inst );
04880 masterView->applyOnAllPorts(
04881 VisitorApplier< PortRefCreator<PortReferenceSharedPtr> >( creator ) );
04882 }
04883 }
04884 else
04885 {
04886
04887 PortRefCreator<PortReferenceSharedPtr>
04888 creator( ctx->getFactory(), instance );
04889 masterView->applyOnAllPorts(
04890 VisitorApplier< PortRefCreator<PortReferenceSharedPtr> >( creator ) );
04891 }
04892 }
04893 catch( Error &e )
04894 {
04895 std::string message = constructErrorMessage(
04896 "Unable to create Port ref");
04897 log("%s\n", message.c_str());
04898 e.setCurrentLocation( __FUNCTION__,
04899 __FILE__, __LINE__ );
04900 e.saveContextData( "Parser error message", message );
04901 e.saveContextData( "Filename", yyloc.begin.filename );
04902 e.saveContextData( "StartLine", yyloc.begin.line );
04903 e.saveContextData( "EndLine", yyloc.end.line );
04904 inDriver.setParserError( e );
04905 error( yyloc, message );
04906 YYABORT;
04907 }
04908 if( masterIsExtern )
04909 {
04910 linker->registerUnresolvedInstance(
04911 viewNameSpec, instance );
04912 }
04913 instance->setParent( ctx->getCurrentView() );
04914 ctx->getCurrentView()->addInstance( instance );
04915 log("Instance for lib %s, cell %s, view %s\n",
04916 libraryName.c_str(), cellName.c_str(),
04917 viewName.c_str());
04918 log("Added instance to view %s \n",
04919 ctx->getCurrentView()->getName().c_str());
04920
04921
04922 ParameterContext context
04923 = instance->getParameterContext();
04924 ParameterSharedPtr chkP;
04925 std::vector<ParamAssignInfo *>::iterator it
04926 = info->mParamAssign.begin();
04927 std::vector<ParamAssignInfo *>::iterator end
04928 = info->mParamAssign.end();
04929 for(; it != end; ++it )
04930 {
04931 ParamAssignInfo *pA = *it;
04932 chkP = instance->getParameters()->get(
04933 context, pA->mNameData->mName );
04934 if( !chkP )
04935 {
04936
04937 std::string message = constructErrorMessage(
04938 "Can only override existing params");
04939 log("%s\n", message.c_str());
04940 Error e( eMessageIdParserError,
04941 __FUNCTION__, __FILE__, __LINE__ );
04942 e.saveContextData( "Parser error message", message );
04943 e.saveContextData( "Filename", yyloc.begin.filename );
04944 e.saveContextData( "StartLine", yyloc.begin.line );
04945 e.saveContextData( "EndLine", yyloc.end.line );
04946 inDriver.setParserError( e );
04947 error( yyloc, message );
04948 YYABORT;
04949 }
04950 if( pA->mValueData->mValues.size()
04951 != chkP->getSize() )
04952 {
04953
04954 std::string message = constructErrorMessage(
04955 "Params size mismatch : %d with %d",
04956 pA->mValueData->mValues.size(),
04957 chkP->getSize());
04958 log("%s\n", message.c_str());
04959 Error e( eMessageIdParserError,
04960 __FUNCTION__, __FILE__, __LINE__ );
04961 e.saveContextData( "Parser error message", message );
04962 e.saveContextData( "Filename", yyloc.begin.filename );
04963 e.saveContextData( "StartLine", yyloc.begin.line );
04964 e.saveContextData( "EndLine", yyloc.end.line );
04965 inDriver.setParserError( e );
04966 error( yyloc, message );
04967 YYABORT;
04968 }
04969 #if 0
04970 if( pA->mValueData->mValues[0].getType()
04971 != chkP->getValue().getType() )
04972 {
04973 std::string message
04974 = constructErrorMessage(
04975 "Type mismatch during assignment for param %s",
04976 pA->mNameData->mName.c_str() );
04977 log("%s\n", message.c_str());
04978 Error e( eMessageIdParserError,
04979 __FUNCTION__, __FILE__, __LINE__ );
04980 e.saveContextData( "Parser error message", message );
04981 e.saveContextData( "Filename", yyloc.begin.filename );
04982 e.saveContextData( "StartLine", yyloc.begin.line );
04983 e.saveContextData( "EndLine", yyloc.end.line );
04984 inDriver.setParserError( e );
04985 error( yyloc, message );
04986 YYABORT;
04987 }
04988 #endif
04989 AssignedParamCreator creator(
04990 instance, instance->getParameterContext(),
04991 instance->getParameters(), ctx->getFactory(),
04992 pA->mValueData->mValues );
04993 try
04994 {
04995 if( !pA->mNameData->mIndices.empty() )
04996 {
04997
04998 chkP = chkP->get(
04999 pA->mNameData->mIndices );
05000 }
05001 chkP->accept( creator );
05002 }
05003 catch( Error &e )
05004 {
05005 std::string message = constructErrorMessage(
05006 "Unable to assign param: %s",
05007 chkP->getName().c_str());
05008 log("%s\n", message.c_str());
05009 e.setCurrentLocation( __FUNCTION__,
05010 __FILE__, __LINE__ );
05011 e.saveContextData( "Parser error message", message );
05012 e.saveContextData( "Filename", yyloc.begin.filename );
05013 e.saveContextData( "StartLine", yyloc.begin.line );
05014 e.saveContextData( "EndLine", yyloc.end.line );
05015 inDriver.setParserError( e );
05016 error( yyloc, message );
05017 YYABORT;
05018 }
05019 log("Param %s overridden at context %lu\n",
05020 pA->mNameData->mName.c_str(),
05021 context);
05022 ctx->setIsInInstance( false );
05023 }
05024
05025
05026 std::vector<PropertySharedPtr> props;
05027 PropertySharedPtr property
05028 = ctx->getCurrentProperty();
05029 while( property )
05030 {
05031 props.push_back( property );
05032 ctx->popProperty();
05033 property = ctx->getCurrentProperty();
05034 }
05035 for( std::vector<PropertySharedPtr>::reverse_iterator
05036 it = props.rbegin(); it != props.rend(); ++it )
05037 {
05038 PropertySharedPtr property = *it;
05039 instance->setProperty(
05040 property->getName(), property );
05041 }
05042 inDriver.getContext()->setIsInInstance( false );
05043
05044 for( std::vector<PortInstData *>::iterator it
05045 = info->mPortInst.begin();
05046 it != info->mPortInst.end(); ++it )
05047 {
05048 PortInstData *instData = *it;
05049 std::vector< std::string > nestedNames;
05050 PortRefData *portData = instData->mRefData;
05051 PortRefData *currPortRef = portData;
05052 PortRefData *nextPortRef
05053 = currPortRef->mParentPort;
05054 nestedNames.push_back(
05055 currPortRef->mPortName->mName);
05056 while( nextPortRef )
05057 {
05058 currPortRef = nextPortRef;
05059 nestedNames.push_back( nextPortRef->mPortName->mName );
05060 nextPortRef = currPortRef->mParentPort;
05061 }
05062 NameData *portNameData = currPortRef->mPortName;
05063 std::string topName = *(nestedNames.rbegin());
05064 PortReferenceSharedPtr portRef
05065 = instance->findPortReference( topName );
05066 if( !portRef )
05067 {
05068 std::string message = constructErrorMessage(
05069 "No port ref %s found",
05070 portNameData->mName.c_str());
05071 log("%s\n", message.c_str());
05072 Error e( eMessageIdParserError,
05073 __FUNCTION__, __FILE__, __LINE__ );
05074 e.saveContextData( "Parser error message", message );
05075 e.saveContextData( "Filename", yyloc.begin.filename );
05076 e.saveContextData( "StartLine", yyloc.begin.line );
05077 e.saveContextData( "EndLine", yyloc.end.line );
05078 inDriver.setParserError( e );
05079 error( yyloc, message );
05080 YYABORT;
05081 }
05082 try
05083 {
05084 connectibleFinder( nestedNames, portRef );
05085 if( !portData->mPortName->mIndices.empty() )
05086 {
05087 portRef = portRef->get(
05088 portData->mPortName->mIndices );
05089 }
05090 portRef->setAttributes(
05091 PortAttributesSharedPtr(
05092 instData->mAttribute) );
05093 }
05094 catch( Error &e )
05095 {
05096 std::string message = constructErrorMessage(
05097 "Unable to connect port ref : %s",
05098 portRef->getName().c_str());
05099 log("%s\n", message.c_str());
05100 e.setCurrentLocation( __FUNCTION__,
05101 __FILE__, __LINE__ );
05102 e.saveContextData( "Parser error message", message );
05103 e.saveContextData( "Filename", yyloc.begin.filename );
05104 e.saveContextData( "StartLine", yyloc.begin.line );
05105 e.saveContextData( "EndLine", yyloc.end.line );
05106 inDriver.setParserError( e );
05107 error( yyloc, message );
05108 YYABORT;
05109 }
05110 }
05111
05112 for( std::vector< std::string >::iterator it
05113 = info->mUserData.begin();
05114 it != info->mUserData.end(); ++it )
05115 {
05116 std::string val = *it;
05117 instance->addUserData( val );
05118 }
05119
05120 for( std::vector< std::string >::iterator it
05121 = info->mComment.begin();
05122 it != info->mComment.end(); ++it )
05123 {
05124 std::string val = *it;
05125 instance->addComment( val );
05126 }
05127
05128 instance->setDesignator( info->mDesignator );
05129
05130
05131 instance->setTiming( info->mTiming );
05132
05133 inDriver.getContext()->setCurrentInstance(
05134 InstanceSharedPtr() );
05135 }
05136 break;
05137
05138 case 383:
05139
05140
05141 #line 3576 "Parser.yy"
05142 {
05143 (yyval.instanceInfo) = new InstanceInfo();
05144 (yyval.instanceInfo)->mViewRefData = (yysemantic_stack_[(1) - (1)].viewRefData);
05145 }
05146 break;
05147
05148 case 384:
05149
05150
05151 #line 3581 "Parser.yy"
05152 {
05153 (yyval.instanceInfo) = NULL;
05154 }
05155 break;
05156
05157 case 385:
05158
05159
05160 #line 3585 "Parser.yy"
05161 {
05162 (yyval.instanceInfo) = (yysemantic_stack_[(2) - (1)].instanceInfo);
05163 }
05164 break;
05165
05166 case 386:
05167
05168
05169 #line 3589 "Parser.yy"
05170 {
05171 (yyval.instanceInfo) = ((yysemantic_stack_[(2) - (1)].instanceInfo))?(yysemantic_stack_[(2) - (1)].instanceInfo):new InstanceInfo();
05172 (yyval.instanceInfo)->mParamAssign.push_back( (yysemantic_stack_[(2) - (2)].paramAssignInfo) );
05173 }
05174 break;
05175
05176 case 387:
05177
05178
05179 #line 3594 "Parser.yy"
05180 {
05181 (yyval.instanceInfo) = ((yysemantic_stack_[(2) - (1)].instanceInfo))?(yysemantic_stack_[(2) - (1)].instanceInfo):new InstanceInfo();
05182 (yyval.instanceInfo)->mPortInst.push_back( (yysemantic_stack_[(2) - (2)].portInst) );
05183 }
05184 break;
05185
05186 case 388:
05187
05188
05189 #line 3599 "Parser.yy"
05190 {
05191 (yyval.instanceInfo) = ((yysemantic_stack_[(2) - (1)].instanceInfo))?(yysemantic_stack_[(2) - (1)].instanceInfo):new InstanceInfo();
05192 EdifContextSharedPtr ctx
05193 = inDriver.getContext();
05194 TimingSharedPtr timing
05195 = ctx->getCurrentTiming();
05196 (yyval.instanceInfo)->mTiming = timing;
05197 }
05198 break;
05199
05200 case 389:
05201
05202
05203 #line 3608 "Parser.yy"
05204 {
05205 (yyval.instanceInfo) = ((yysemantic_stack_[(2) - (1)].instanceInfo))?(yysemantic_stack_[(2) - (1)].instanceInfo):new InstanceInfo();
05206 (yyval.instanceInfo)->mDesignator = *(yysemantic_stack_[(2) - (2)].stringVal);
05207 }
05208 break;
05209
05210 case 390:
05211
05212
05213 #line 3613 "Parser.yy"
05214 {
05215 (yyval.instanceInfo) = (yysemantic_stack_[(2) - (1)].instanceInfo);
05216 }
05217 break;
05218
05219 case 391:
05220
05221
05222 #line 3617 "Parser.yy"
05223 {
05224 (yyval.instanceInfo) = ((yysemantic_stack_[(2) - (1)].instanceInfo))?(yysemantic_stack_[(2) - (1)].instanceInfo):new InstanceInfo();
05225 (yyval.instanceInfo)->mComment.push_back( *(yysemantic_stack_[(2) - (2)].stringVal) );
05226 }
05227 break;
05228
05229 case 392:
05230
05231
05232 #line 3622 "Parser.yy"
05233 {
05234 (yyval.instanceInfo) = ((yysemantic_stack_[(2) - (1)].instanceInfo))?(yysemantic_stack_[(2) - (1)].instanceInfo):new InstanceInfo();
05235 (yyval.instanceInfo)->mUserData.push_back( *(yysemantic_stack_[(2) - (2)].stringVal) );
05236 }
05237 break;
05238
05239 case 397:
05240
05241
05242 #line 3636 "Parser.yy"
05243 {
05244 (yyval.instanceRef) = ( (yysemantic_stack_[(5) - (4)].instanceRef) ) ? (yysemantic_stack_[(5) - (4)].instanceRef) : new InstanceRefData();
05245 (yyval.instanceRef)->mName = (yysemantic_stack_[(5) - (3)].nameData);
05246 }
05247 break;
05248
05249 case 398:
05250
05251
05252 #line 3643 "Parser.yy"
05253 {
05254 (yyval.instanceRef) = NULL;
05255 }
05256 break;
05257
05258 case 399:
05259
05260
05261 #line 3647 "Parser.yy"
05262 {
05263 (yyval.instanceRef) = NULL;
05264 }
05265 break;
05266
05267 case 400:
05268
05269
05270 #line 3651 "Parser.yy"
05271 {
05272 (yyval.instanceRef) = new InstanceRefData();
05273 (yyval.instanceRef)->mView = (yysemantic_stack_[(1) - (1)].viewRefData);
05274 }
05275 break;
05276
05277 case 406:
05278
05279
05280 #line 3665 "Parser.yy"
05281 {
05282 delete (yysemantic_stack_[(2) - (2)].stringVal);
05283 }
05284 break;
05285
05286 case 414:
05287
05288
05289 #line 3684 "Parser.yy"
05290 {
05291 delete (yysemantic_stack_[(2) - (2)].stringVal);
05292 }
05293 break;
05294
05295 case 415:
05296
05297
05298 #line 3688 "Parser.yy"
05299 {
05300 delete (yysemantic_stack_[(2) - (2)].stringVal);
05301 }
05302 break;
05303
05304 case 422:
05305
05306
05307 #line 3706 "Parser.yy"
05308 {
05309 (yyval.integerVal) = (yysemantic_stack_[(4) - (3)].integerVal);
05310 }
05311 break;
05312
05313 case 423:
05314
05315
05316 #line 3712 "Parser.yy"
05317 {
05318 (yyval.integerVal) = (yysemantic_stack_[(1) - (1)].integerVal);
05319 }
05320 break;
05321
05322 case 424:
05323
05324
05325 #line 3716 "Parser.yy"
05326 {
05327 (yyval.integerVal) = (yysemantic_stack_[(2) - (1)].integerVal);
05328 }
05329 break;
05330
05331 case 425:
05332
05333
05334 #line 3722 "Parser.yy"
05335 {
05336 if( (yysemantic_stack_[(4) - (2)].integerVal) );
05337 if( NULL == (yysemantic_stack_[(4) - (3)].valueData) )
05338 {
05339 (yyval.valueData) = new ValueData();
05340 (yyval.valueData)->mValues.push_back( Value(
05341 Value::eValueTypeInteger ) );
05342 }
05343 else
05344 {
05345 (yyval.valueData) = (yysemantic_stack_[(4) - (3)].valueData);
05346 }
05347 }
05348 break;
05349
05350 case 426:
05351
05352
05353 #line 3738 "Parser.yy"
05354 {
05355 (yyval.valueData) = NULL;
05356 }
05357 break;
05358
05359 case 427:
05360
05361
05362 #line 3742 "Parser.yy"
05363 {
05364 (yyval.valueData) = ( (yysemantic_stack_[(2) - (1)].valueData) ) ? (yysemantic_stack_[(2) - (1)].valueData) : new ValueData();
05365 (yyval.valueData)->mValues.push_back( Value(
05366 Value::eValueTypeInteger, (yysemantic_stack_[(2) - (2)].integerVal) ) );
05367 }
05368 break;
05369
05370 case 428:
05371
05372
05373 #line 3748 "Parser.yy"
05374 {
05375 (yyval.valueData) = ( (yysemantic_stack_[(2) - (1)].valueData) ) ? (yysemantic_stack_[(2) - (1)].valueData) : new ValueData();
05376 (yyval.valueData)->mValues.push_back( Value(
05377 Value::eValueTypeInteger, (yysemantic_stack_[(2) - (2)].integerVal) ) );
05378 }
05379 break;
05380
05381 case 429:
05382
05383
05384 #line 3754 "Parser.yy"
05385 {
05386 (yyval.valueData) = (yysemantic_stack_[(2) - (2)].valueData);
05387 if( (yysemantic_stack_[(2) - (1)].valueData) )
05388 {
05389 (yysemantic_stack_[(2) - (1)].valueData)->mValues.insert( (yysemantic_stack_[(2) - (1)].valueData)->mValues.end(),
05390 (yyval.valueData)->mValues.begin(), (yyval.valueData)->mValues.end() );
05391 (yyval.valueData)->mValues = (yysemantic_stack_[(2) - (1)].valueData)->mValues;
05392 delete (yysemantic_stack_[(2) - (1)].valueData);
05393 }
05394 }
05395 break;
05396
05397 case 430:
05398
05399
05400 #line 3767 "Parser.yy"
05401 {
05402 (yyval.interfaceAttributes) = (yysemantic_stack_[(4) - (3)].interfaceAttributes);
05403 }
05404 break;
05405
05406 case 431:
05407
05408
05409 #line 3773 "Parser.yy"
05410 {
05411 (yyval.interfaceAttributes) = NULL;
05412 }
05413 break;
05414
05415 case 432:
05416
05417
05418 #line 3777 "Parser.yy"
05419 {
05420 (yyval.interfaceAttributes) = (yysemantic_stack_[(2) - (1)].interfaceAttributes);
05421 }
05422 break;
05423
05424 case 433:
05425
05426
05427 #line 3781 "Parser.yy"
05428 {
05429 (yyval.interfaceAttributes) = (yysemantic_stack_[(2) - (1)].interfaceAttributes);
05430 }
05431 break;
05432
05433 case 434:
05434
05435
05436 #line 3785 "Parser.yy"
05437 {
05438 (yyval.interfaceAttributes) = (yysemantic_stack_[(2) - (1)].interfaceAttributes);
05439 }
05440 break;
05441
05442 case 435:
05443
05444
05445 #line 3789 "Parser.yy"
05446 {
05447 (yyval.interfaceAttributes) = (yysemantic_stack_[(2) - (1)].interfaceAttributes);
05448 }
05449 break;
05450
05451 case 436:
05452
05453
05454 #line 3793 "Parser.yy"
05455 {
05456 (yyval.interfaceAttributes) = (yysemantic_stack_[(2) - (1)].interfaceAttributes);
05457 }
05458 break;
05459
05460 case 437:
05461
05462
05463 #line 3797 "Parser.yy"
05464 {
05465 (yyval.interfaceAttributes) = (yysemantic_stack_[(2) - (1)].interfaceAttributes);
05466 }
05467 break;
05468
05469 case 438:
05470
05471
05472 #line 3801 "Parser.yy"
05473 {
05474 (yyval.interfaceAttributes) = (yysemantic_stack_[(2) - (1)].interfaceAttributes);
05475 }
05476 break;
05477
05478 case 439:
05479
05480
05481 #line 3805 "Parser.yy"
05482 {
05483 (yyval.interfaceAttributes) = (yysemantic_stack_[(2) - (1)].interfaceAttributes);
05484 }
05485 break;
05486
05487 case 440:
05488
05489
05490 #line 3809 "Parser.yy"
05491 {
05492 (yyval.interfaceAttributes) = (yysemantic_stack_[(2) - (1)].interfaceAttributes);
05493 }
05494 break;
05495
05496 case 441:
05497
05498
05499 #line 3813 "Parser.yy"
05500 {
05501 (yyval.interfaceAttributes) = (yysemantic_stack_[(2) - (1)].interfaceAttributes);
05502 }
05503 break;
05504
05505 case 442:
05506
05507
05508 #line 3817 "Parser.yy"
05509 {
05510 (yyval.interfaceAttributes) = ((yysemantic_stack_[(2) - (1)].interfaceAttributes))?(yysemantic_stack_[(2) - (1)].interfaceAttributes):new InterfaceAttributes();
05511 EdifContextSharedPtr ctx
05512 = inDriver.getContext();
05513 TimingSharedPtr timing
05514 = ctx->getCurrentTiming();
05515 (yyval.interfaceAttributes)->setTiming( timing );
05516 ctx->setCurrentTiming( TimingSharedPtr() );
05517 }
05518 break;
05519
05520 case 443:
05521
05522
05523 #line 3827 "Parser.yy"
05524 {
05525 (yyval.interfaceAttributes) = ((yysemantic_stack_[(2) - (1)].interfaceAttributes))?(yysemantic_stack_[(2) - (1)].interfaceAttributes):new InterfaceAttributes();
05526 EdifContextSharedPtr ctx
05527 = inDriver.getContext();
05528 SimulateSharedPtr simulate
05529 = ctx->getCurrentSimulate();
05530 (yyval.interfaceAttributes)->setSimulate( simulate );
05531 ctx->setCurrentSimulate( SimulateSharedPtr() );
05532 }
05533 break;
05534
05535 case 444:
05536
05537
05538 #line 3837 "Parser.yy"
05539 {
05540 (yyval.interfaceAttributes) = ((yysemantic_stack_[(2) - (1)].interfaceAttributes))?(yysemantic_stack_[(2) - (1)].interfaceAttributes):new InterfaceAttributes();
05541 (yyval.interfaceAttributes)->setDesignator( *(yysemantic_stack_[(2) - (2)].stringVal) );
05542 }
05543 break;
05544
05545 case 445:
05546
05547
05548 #line 3842 "Parser.yy"
05549 {
05550 (yyval.interfaceAttributes) = (yysemantic_stack_[(2) - (1)].interfaceAttributes);
05551 }
05552 break;
05553
05554 case 446:
05555
05556
05557 #line 3846 "Parser.yy"
05558 {
05559 (yyval.interfaceAttributes) = ((yysemantic_stack_[(2) - (1)].interfaceAttributes))?(yysemantic_stack_[(2) - (1)].interfaceAttributes):new InterfaceAttributes();
05560 (yyval.interfaceAttributes)->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
05561 }
05562 break;
05563
05564 case 447:
05565
05566
05567 #line 3851 "Parser.yy"
05568 {
05569 (yyval.interfaceAttributes) = ((yysemantic_stack_[(2) - (1)].interfaceAttributes))?(yysemantic_stack_[(2) - (1)].interfaceAttributes):new InterfaceAttributes();
05570 (yyval.interfaceAttributes)->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
05571 delete (yysemantic_stack_[(2) - (2)].stringVal);
05572 }
05573 break;
05574
05575 case 451:
05576
05577
05578 #line 3864 "Parser.yy"
05579 {
05580 delete (yysemantic_stack_[(2) - (2)].stringVal);
05581 }
05582 break;
05583
05584 case 452:
05585
05586
05587 #line 3868 "Parser.yy"
05588 {
05589 delete (yysemantic_stack_[(2) - (2)].stringVal);
05590 }
05591 break;
05592
05593 case 461:
05594
05595
05596 #line 3888 "Parser.yy"
05597 {
05598 delete (yysemantic_stack_[(2) - (2)].stringVal);
05599 }
05600 break;
05601
05602 case 462:
05603
05604
05605 #line 3892 "Parser.yy"
05606 {
05607 delete (yysemantic_stack_[(2) - (2)].stringVal);
05608 }
05609 break;
05610
05611 case 467:
05612
05613
05614 #line 3908 "Parser.yy"
05615 {
05616 InterfaceJoinedInfoSharedPtr joinedInfo;
05617 EdifContextSharedPtr ctx
05618 = inDriver.getContext();
05619 try
05620 {
05621 ctx->getFactory()->create( joinedInfo );
05622 joinedInfo->setJoinedType(
05623 InterfaceJoinedInfo::eJoinedTypeJoin );
05624 }
05625 catch( Error &e )
05626 {
05627 std::string message = constructErrorMessage(
05628 "Unable to create joined info" );
05629 log("%s\n", message.c_str());
05630 e.setCurrentLocation( __FUNCTION__,
05631 __FILE__, __LINE__ );
05632 e.saveContextData( "Parser error message", message );
05633 e.saveContextData( "Filename", yyloc.begin.filename );
05634 e.saveContextData( "StartLine", yyloc.begin.line );
05635 e.saveContextData( "EndLine", yyloc.end.line );
05636 inDriver.setParserError( e );
05637 error( yyloc, message );
05638 YYABORT;
05639 }
05640 if(ctx->getInterfaceJoinedInfoDepth() == 0 )
05641 {
05642 ctx->getCurrentView()->addInterfaceJoinedInfo( joinedInfo );
05643 }
05644 ctx->pushInterfaceJoinedInfo( joinedInfo );
05645 ctx->incrementInterfaceJoinedInfoDepth();
05646 }
05647 break;
05648
05649 case 468:
05650
05651
05652 #line 3940 "Parser.yy"
05653 {
05654 EdifContextSharedPtr ctx = inDriver.getContext();
05655 InterfaceJoinedInfoSharedPtr currentJoinedInfo
05656 = ctx->getCurrentInterfaceJoinedInfo();
05657 ctx->popInterfaceJoinedInfo();
05658 InterfaceJoinedInfoSharedPtr parentJoinedInfo;
05659 if(ctx->getInterfaceJoinedInfoDepth() > 1 )
05660 {
05661 parentJoinedInfo = ctx->getCurrentInterfaceJoinedInfo();
05662 }
05663 ctx->decrementInterfaceJoinedInfoDepth();
05664 if( parentJoinedInfo )
05665 {
05666 parentJoinedInfo->setRelationType(
05667 InterfaceJoinedInfo::eRelationTypeParent );
05668 currentJoinedInfo->setRelationType(
05669 InterfaceJoinedInfo::eRelationTypeChild );
05670
05671 size_t parentJoinedInfoSize = parentJoinedInfo->getSize();
05672 size_t currentJoinedInfoSize = currentJoinedInfo->getSize();
05673
05674 log("Parent joined info Size :: %d\n",
05675 parentJoinedInfoSize );
05676 log("Current joined info Size :: %d\n",
05677 currentJoinedInfoSize );
05678
05679
05680
05681
05682 std::vector< InterfaceJoinedInfoSharedPtr > outJoinedInfos;
05683 parentJoinedInfo->getChildren( outJoinedInfos );
05684
05685 std::list< PortSharedPtr > outPorts;
05686 parentJoinedInfo->getPorts( outPorts );
05687
05688 std::list< PortListSharedPtr > outPortLists;
05689 parentJoinedInfo->getPortLists( outPortLists );
05690
05691 if( parentJoinedInfoSize != 0 )
05692 {
05693 if( parentJoinedInfoSize
05694 == currentJoinedInfoSize )
05695 {
05696 parentJoinedInfo->addChildJoinedInfo(
05697 currentJoinedInfo );
05698 }
05699 else
05700 {
05701 std::string message = constructErrorMessage(
05702 "Child joined info can't be added, port size mismatch %d with %d",
05703 parentJoinedInfoSize,
05704 currentJoinedInfoSize);
05705 log("%s\n", message.c_str());
05706 Error e( eMessageIdParserError,
05707 __FUNCTION__, __FILE__, __LINE__ );
05708 e.saveContextData( "Parser error message", message );
05709 e.saveContextData( "Filename", yyloc.begin.filename );
05710 e.saveContextData( "StartLine", yyloc.begin.line );
05711 e.saveContextData( "EndLine", yyloc.end.line );
05712 inDriver.setParserError( e );
05713 error( yyloc, message );
05714 YYABORT;
05715 }
05716 }
05717 else
05718 {
05719 parentJoinedInfo->addChildJoinedInfo(
05720 currentJoinedInfo );
05721 }
05722 }
05723 else
05724 {
05725 ctx->pushInterfaceJoinedInfo( currentJoinedInfo );
05726 }
05727 }
05728 break;
05729
05730 case 470:
05731
05732
05733 #line 4019 "Parser.yy"
05734 {
05735 boost::scoped_ptr<PortRefData> portData( (yysemantic_stack_[(2) - (2)].portRefData) );
05736 NameData *portNameData = portData->mPortName;
05737 std::string name = portNameData->mName;
05738 EdifContextSharedPtr ctx
05739 = inDriver.getContext();
05740 ViewSharedPtr view = ctx->getCurrentView();
05741
05742 PortRefData *currPortRef = (yysemantic_stack_[(2) - (2)].portRefData);
05743 PortRefData *nextPortRef = portData->mParentPort;
05744 std::vector< std::string > nestedNames;
05745 nestedNames.push_back(currPortRef->mPortName->mName);
05746 while( nextPortRef )
05747 {
05748 currPortRef = nextPortRef;
05749 nestedNames.push_back( nextPortRef->mPortName->mName );
05750 nextPortRef = currPortRef->mParentPort;
05751 }
05752 bool isPort = ( NULL == currPortRef->mInstanceName );
05753 std::string topName = *(nestedNames.rbegin());
05754 if( isPort )
05755 {
05756 PortSharedPtr port = view->findPort( topName );
05757 if( !port )
05758 {
05759 std::string message = constructErrorMessage(
05760 "No port %s found in view %s\n",
05761 name.c_str(),
05762 view->getName().c_str());
05763 log("%s\n", message.c_str());
05764 Error e( eMessageIdParserError,
05765 __FUNCTION__, __FILE__, __LINE__ );
05766 e.saveContextData( "Parser error message", message );
05767 e.saveContextData( "Filename", yyloc.begin.filename );
05768 e.saveContextData( "StartLine", yyloc.begin.line );
05769 e.saveContextData( "EndLine", yyloc.end.line );
05770 inDriver.setParserError( e );
05771 error( yyloc, message );
05772 YYABORT;
05773 }
05774
05775 InterfaceJoinedInfoSharedPtr currentJoinedInfo
05776 = ctx->getCurrentInterfaceJoinedInfo();
05777 try
05778 {
05779 connectibleFinder( nestedNames, port );
05780 if( !portData->mPortName->mIndices.empty() )
05781 {
05782 port = port->get( portData->mPortName->mIndices );
05783 }
05784
05785 std::list< PortSharedPtr > outPorts;
05786 currentJoinedInfo->getPorts( outPorts );
05787
05788 if( !outPorts.empty() )
05789 {
05790 PortSharedPtr firstPort = outPorts.front();
05791 std::list< PortSharedPtr >::iterator it
05792 = std::find( outPorts.begin(), outPorts.end(),
05793 port);
05794 if( it != outPorts.end() )
05795 {
05796 std::string message = constructErrorMessage(
05797 "Port %s already exist in joined info",
05798 port->getName().c_str() );
05799 log("%s\n", message.c_str());
05800 Error e( eMessageIdParserError,
05801 __FUNCTION__, __FILE__, __LINE__ );
05802 e.saveContextData( "Parser error message", message );
05803 e.saveContextData( "Filename", yyloc.begin.filename );
05804 e.saveContextData( "StartLine", yyloc.begin.line );
05805 e.saveContextData( "EndLine", yyloc.end.line );
05806 inDriver.setParserError( e );
05807 error( yyloc, message );
05808 YYABORT;
05809 }
05810 else
05811 {
05812 if( firstPort->getSize() == port->getSize() )
05813 {
05814 currentJoinedInfo->addPort( port );
05815 }
05816 else
05817 {
05818 std::string message = constructErrorMessage(
05819 "Port %s can't be added, port size mismatch %d with %d",
05820 name.c_str(),
05821 firstPort->getSize(),
05822 port->getSize());
05823 log("%s\n", message.c_str());
05824 Error e( eMessageIdParserError,
05825 __FUNCTION__, __FILE__, __LINE__ );
05826 e.saveContextData( "Parser error message", message );
05827 e.saveContextData( "Filename", yyloc.begin.filename );
05828 e.saveContextData( "StartLine", yyloc.begin.line );
05829 e.saveContextData( "EndLine", yyloc.end.line );
05830 inDriver.setParserError( e );
05831 error( yyloc, message );
05832 YYABORT;
05833 }
05834 }
05835 }
05836 else
05837 {
05838 currentJoinedInfo->addPort( port );
05839 }
05840 }
05841 catch( Error &e )
05842 {
05843 e.setCurrentLocation(
05844 __FUNCTION__, __FILE__, __LINE__ );
05845 throw;
05846 }
05847 }
05848 else
05849 {
05850 }
05851 }
05852 break;
05853
05854 case 471:
05855
05856
05857 #line 4138 "Parser.yy"
05858 {
05859 if( NULL != (yysemantic_stack_[(2) - (2)].portListData) && !(yysemantic_stack_[(2) - (2)].portListData)->mPortRefs.empty() )
05860 {
05861 boost::scoped_ptr<PortListData> portListData( (yysemantic_stack_[(2) - (2)].portListData) );
05862 std::string message;
05863
05864 EdifContextSharedPtr ctx = inDriver.getContext();
05865 PortListSharedPtr portList;
05866 ctx->getFactory()->create( portList );
05867
05868 InterfaceJoinedInfoSharedPtr currentJoinedInfo
05869 = ctx->getCurrentInterfaceJoinedInfo();
05870
05871 for( std::vector<PortRefData *>::iterator it
05872 = portListData->mPortRefs.begin();
05873 it != portListData->mPortRefs.end(); ++it )
05874 {
05875 PortRefData *portData = *it;
05876 std::vector< std::string > nestedNames;
05877 PortRefData *currPortRef = *it;
05878 PortRefData *nextPortRef = portData->mParentPort;
05879 nestedNames.push_back(currPortRef->mPortName->mName);
05880 while( nextPortRef )
05881 {
05882 currPortRef = nextPortRef;
05883 nestedNames.push_back( nextPortRef->mPortName->mName );
05884 nextPortRef = currPortRef->mParentPort;
05885 }
05886 bool isPort = ( NULL == currPortRef->mInstanceName );
05887 NameData *portNameData = currPortRef->mPortName;
05888 std::string topName = *(nestedNames.rbegin());
05889 ViewSharedPtr view = ctx->getCurrentView();
05890 if( isPort )
05891 {
05892 PortSharedPtr port = view->findPort( topName );
05893 if( !port )
05894 {
05895 std::string message = constructErrorMessage(
05896 "No port %s found in view %s\n",
05897 portNameData->mName.c_str(),
05898 view->getName().c_str());
05899 log("%s\n", message.c_str());
05900 Error e( eMessageIdParserError,
05901 __FUNCTION__, __FILE__, __LINE__ );
05902 e.saveContextData( "Parser error message", message );
05903 e.saveContextData( "Filename", yyloc.begin.filename );
05904 e.saveContextData( "StartLine", yyloc.begin.line );
05905 e.saveContextData( "EndLine", yyloc.end.line );
05906 inDriver.setParserError( e );
05907 error( yyloc, message );
05908 YYABORT;
05909 }
05910
05911 try
05912 {
05913 connectibleFinder( nestedNames, port );
05914 if( !portData->mPortName->mIndices.empty() )
05915 {
05916 port = port->get( portData->mPortName->mIndices );
05917 }
05918 portList->addChildPort( port );
05919 }
05920 catch( Error &e )
05921 {
05922 std::string message = constructErrorMessage(
05923 "Unable to connect port : %s",
05924 port->getName().c_str());
05925 log("%s\n", message.c_str());
05926 e.setCurrentLocation( __FUNCTION__,
05927 __FILE__, __LINE__ );
05928 e.saveContextData( "Parser error message", message );
05929 e.saveContextData( "Filename", yyloc.begin.filename );
05930 e.saveContextData( "StartLine", yyloc.begin.line );
05931 e.saveContextData( "EndLine", yyloc.end.line );
05932 inDriver.setParserError( e );
05933 error( yyloc, message );
05934 YYABORT;
05935 }
05936 }
05937 else
05938 {
05939 }
05940 }
05941 if( currentJoinedInfo->getSize() == portList->getSize() )
05942 {
05943 currentJoinedInfo->addPortList( portList );
05944 }
05945 else
05946 {
05947 std::string message = constructErrorMessage(
05948 "Port size mismatch %d with %d",
05949 currentJoinedInfo->getSize(),
05950 portList->getSize());
05951 log("%s\n", message.c_str());
05952 Error e( eMessageIdParserError,
05953 __FUNCTION__, __FILE__, __LINE__ );
05954 e.saveContextData( "Parser error message", message );
05955 e.saveContextData( "Filename", yyloc.begin.filename );
05956 e.saveContextData( "StartLine", yyloc.begin.line );
05957 e.saveContextData( "EndLine", yyloc.end.line );
05958 inDriver.setParserError( e );
05959 error( yyloc, message );
05960 YYABORT;
05961 }
05962 }
05963 }
05964 break;
05965
05966 case 474:
05967
05968
05969 #line 4251 "Parser.yy"
05970 {
05971 std::string message;
05972 boost::scoped_ptr<PortRefData> portData( (yysemantic_stack_[(2) - (2)].portRefData) );
05973 try
05974 {
05975 connectElementToNet(
05976 (yysemantic_stack_[(2) - (2)].portRefData), inDriver.getContext(),
05977 yyloc, message );
05978 }
05979 catch( Error &e )
05980 {
05981 e.setCurrentLocation(
05982 __FUNCTION__, __FILE__, __LINE__ );
05983 inDriver.setParserError( e );
05984 error( yyloc, message );
05985 YYABORT;
05986 }
05987 }
05988 break;
05989
05990 case 475:
05991
05992
05993 #line 4270 "Parser.yy"
05994 {
05995 if( NULL != (yysemantic_stack_[(2) - (2)].portListData) && !(yysemantic_stack_[(2) - (2)].portListData)->mPortRefs.empty() )
05996 {
05997 boost::scoped_ptr<PortListData> portListData( (yysemantic_stack_[(2) - (2)].portListData) );
05998 std::string message;
05999 PortListSharedPtr portList;
06000 inDriver.getContext()->getFactory()->create( portList );
06001 EdifContextSharedPtr ctx = inDriver.getContext();
06002 for( std::vector<PortRefData *>::iterator it
06003 = portListData->mPortRefs.begin();
06004 it != portListData->mPortRefs.end(); ++it )
06005 {
06006 PortRefData *portData = *it;
06007 std::vector< std::string > nestedNames;
06008 PortRefData *currPortRef = *it;
06009 PortRefData *nextPortRef = portData->mParentPort;
06010 nestedNames.push_back(currPortRef->mPortName->mName);
06011 while( nextPortRef )
06012 {
06013 currPortRef = nextPortRef;
06014 nestedNames.push_back( nextPortRef->mPortName->mName );
06015 nextPortRef = currPortRef->mParentPort;
06016 }
06017 bool isPort = ( NULL == currPortRef->mInstanceName );
06018 NameData *portNameData = currPortRef->mPortName;
06019 std::string topName = *(nestedNames.rbegin());
06020 ViewSharedPtr view = ctx->getCurrentView();
06021 if( isPort )
06022 {
06023 PortSharedPtr port = view->findPort( topName );
06024 if( !port )
06025 {
06026 std::string message = constructErrorMessage(
06027 "No port %s found",
06028 portNameData->mName.c_str());
06029 log("%s\n", message.c_str());
06030 Error e( eMessageIdParserError,
06031 __FUNCTION__, __FILE__, __LINE__ );
06032 e.saveContextData( "Parser error message", message );
06033 e.saveContextData( "Filename", yyloc.begin.filename );
06034 e.saveContextData( "StartLine", yyloc.begin.line );
06035 e.saveContextData( "EndLine", yyloc.end.line );
06036 inDriver.setParserError( e );
06037 error( yyloc, message );
06038 YYABORT;
06039 }
06040 try
06041 {
06042 connectibleFinder( nestedNames, port );
06043 if( !portData->mPortName->mIndices.empty() )
06044 {
06045 port = port->get( portData->mPortName->mIndices );
06046 }
06047 portList->addChildPort( port );
06048 }
06049 catch( Error &e )
06050 {
06051 std::string message = constructErrorMessage(
06052 "Unable to connect port : %s",
06053 port->getName().c_str());
06054 log("%s\n", message.c_str());
06055 e.setCurrentLocation( __FUNCTION__,
06056 __FILE__, __LINE__ );
06057 e.saveContextData( "Parser error message", message );
06058 e.saveContextData( "Filename", yyloc.begin.filename );
06059 e.saveContextData( "StartLine", yyloc.begin.line );
06060 e.saveContextData( "EndLine", yyloc.end.line );
06061 inDriver.setParserError( e );
06062 error( yyloc, message );
06063 YYABORT;
06064 }
06065 }
06066 else
06067 {
06068 NameData *instanceName
06069 = currPortRef->mInstanceName;
06070 InstanceSharedPtr instance
06071 = view->findInstance(
06072 instanceName->mName );
06073 if( !instance )
06074 {
06075 std::string message = constructErrorMessage(
06076 "Instance %s not known",
06077 instanceName->mName.c_str() );
06078 log("%s\n", message.c_str());
06079 Error e( eMessageIdParserError,
06080 __FUNCTION__, __FILE__, __LINE__ );
06081 e.saveContextData( "Parser error message", message );
06082 e.saveContextData( "Filename", yyloc.begin.filename );
06083 e.saveContextData( "StartLine", yyloc.begin.line );
06084 e.saveContextData( "EndLine", yyloc.end.line );
06085 inDriver.setParserError( e );
06086 error( yyloc, message );
06087 YYABORT;
06088 }
06089 if( !instanceName->mIndices.empty() )
06090 {
06091 InstanceSharedPtr bit
06092 = instance->get( instanceName->mIndices );
06093 instance = bit;
06094 }
06095 PortReferenceSharedPtr portRef
06096 = instance->findPortReference( topName );
06097 if( !portRef )
06098 {
06099 std::string message = constructErrorMessage(
06100 "No port ref %s found",
06101 portNameData->mName.c_str());
06102 log("%s\n", message.c_str());
06103 Error e( eMessageIdParserError,
06104 __FUNCTION__, __FILE__, __LINE__ );
06105 e.saveContextData( "Parser error message", message );
06106 e.saveContextData( "Filename", yyloc.begin.filename );
06107 e.saveContextData( "StartLine", yyloc.begin.line );
06108 e.saveContextData( "EndLine", yyloc.end.line );
06109 inDriver.setParserError( e );
06110 error( yyloc, message );
06111 YYABORT;
06112 }
06113 try
06114 {
06115 connectibleFinder( nestedNames, portRef );
06116 if( !portData->mPortName->mIndices.empty() )
06117 {
06118 portRef = portRef->get(
06119 portData->mPortName->mIndices );
06120 }
06121 portList->addChildPortReference( portRef );
06122 }
06123 catch( Error &e )
06124 {
06125 std::string message = constructErrorMessage(
06126 "Unable to connect port ref : %s",
06127 portRef->getName().c_str());
06128 log("%s\n", message.c_str());
06129 e.setCurrentLocation( __FUNCTION__,
06130 __FILE__, __LINE__ );
06131 e.saveContextData( "Parser error message", message );
06132 e.saveContextData( "Filename", yyloc.begin.filename );
06133 e.saveContextData( "StartLine", yyloc.begin.line );
06134 e.saveContextData( "EndLine", yyloc.end.line );
06135 inDriver.setParserError( e );
06136 error( yyloc, message );
06137 YYABORT;
06138 }
06139 }
06140 }
06141 try
06142 {
06143 portList->connect( ctx->getCurrentNet() );
06144 }
06145 catch( Error &e )
06146 {
06147 e.setCurrentLocation(
06148 __FUNCTION__, __FILE__, __LINE__ );
06149 inDriver.setParserError( e );
06150 error( yyloc, message );
06151 YYABORT;
06152 }
06153 }
06154 }
06155 break;
06156
06157 case 476:
06158
06159
06160 #line 4432 "Parser.yy"
06161 {
06162 boost::scoped_ptr<NameData> globPortRef( (yysemantic_stack_[(2) - (2)].nameData) );
06163 std::string name = globPortRef->mName;
06164
06165 EdifContextSharedPtr ctx = inDriver.getContext();
06166 ViewSharedPtr view = ctx->getCurrentView();
06167 NetSharedPtr net = ctx->getCurrentNet();
06168 size_t netSize = net->getSize();
06169 PortSharedPtr port = view->findPort( name );
06170 if( port )
06171 {
06172 try
06173 {
06174 port->connect( net );
06175 }
06176 catch( Error &e )
06177 {
06178 std::string message = constructErrorMessage(
06179 "Unable to connect port : %s",
06180 port->getName().c_str());
06181 log("%s\n", message.c_str());
06182 e.setCurrentLocation( __FUNCTION__,
06183 __FILE__, __LINE__ );
06184 e.saveContextData( "Parser error message", message );
06185 e.saveContextData( "Filename", yyloc.begin.filename );
06186 e.saveContextData( "StartLine", yyloc.begin.line );
06187 e.saveContextData( "EndLine", yyloc.end.line );
06188 inDriver.setParserError( e );
06189 error( yyloc, message );
06190 YYABORT;
06191 }
06192 }
06193 std::vector< InstanceSharedPtr > leafInstances;
06194 {
06195 std::vector< InstanceSharedPtr > instances;
06196 view->getInstances( instances );
06197 for( std::vector< InstanceSharedPtr >::iterator it
06198 = instances.begin(); it != instances.end(); ++it )
06199 {
06200 if( eCompositionTypeScalar
06201 == (*it)->getCompositionType() )
06202 {
06203 leafInstances.push_back( *it );
06204 }
06205 else
06206 {
06207 (*it)->getChildren( leafInstances );
06208 }
06209 }
06210 }
06211 for( std::vector< InstanceSharedPtr >::iterator it
06212 = leafInstances.begin(); it != leafInstances.end(); ++it )
06213 {
06214 PortReferenceSharedPtr pRef
06215 = (*it)->findPortReference( name );
06216 if( pRef
06217 && netSize == pRef->getSize() )
06218 {
06219 try
06220 {
06221 pRef->connect( net );
06222 }
06223 catch( Error &e )
06224 {
06225 std::string message = constructErrorMessage(
06226 "Unable to connect port : %s",
06227 pRef->getName().c_str());
06228 log("%s\n", message.c_str());
06229 e.setCurrentLocation( __FUNCTION__,
06230 __FILE__, __LINE__ );
06231 e.saveContextData( "Parser error message", message );
06232 e.saveContextData( "Filename", yyloc.begin.filename );
06233 e.saveContextData( "StartLine", yyloc.begin.line );
06234 e.saveContextData( "EndLine", yyloc.end.line );
06235 inDriver.setParserError( e );
06236 error( yyloc, message );
06237 YYABORT;
06238 }
06239 }
06240 }
06241 }
06242 break;
06243
06244 case 490:
06245
06246
06247 #line 4537 "Parser.yy"
06248 {
06249 if( (yysemantic_stack_[(4) - (3)].integerVal) );
06250 }
06251 break;
06252
06253 case 493:
06254
06255
06256 #line 4547 "Parser.yy"
06257 {
06258 delete (yysemantic_stack_[(2) - (2)].stringVal);
06259 }
06260 break;
06261
06262 case 494:
06263
06264
06265 #line 4553 "Parser.yy"
06266 {
06267 delete (yysemantic_stack_[(1) - (1)].stringVal);
06268 }
06269 break;
06270
06271 case 496:
06272
06273
06274 #line 4562 "Parser.yy"
06275 {
06276 delete (yysemantic_stack_[(4) - (3)].pairData);
06277 }
06278 break;
06279
06280 case 499:
06281
06282
06283 #line 4574 "Parser.yy"
06284 {
06285 (yyval.nameData) = (yysemantic_stack_[(1) - (1)].nameData);
06286 }
06287 break;
06288
06289 case 500:
06290
06291
06292 #line 4580 "Parser.yy"
06293 {
06294 if( (yysemantic_stack_[(4) - (3)].nameData) )
06295 {
06296 EdifContextSharedPtr ctx
06297 = inDriver.getContext();
06298 RootSharedPtr root = ctx->getRoot();
06299 LibrarySharedPtr lib;
06300
06301
06302 lib = root->findLibrary( (yysemantic_stack_[(4) - (3)].nameData)->mName );
06303 if( lib )
06304 {
06305 log("Skipped creation of existing lib.\n");
06306 }
06307 EdifLevel level;
06308 switch( (yysemantic_stack_[(4) - (4)].integerVal) )
06309 {
06310 case 0:
06311 {
06312 level = eEdifLevel0;
06313 break;
06314 }
06315 case 1:
06316 {
06317 level = eEdifLevel1;
06318 break;
06319 }
06320 case 2:
06321 {
06322 level = eEdifLevel2;
06323 break;
06324 }
06325 default:
06326 {
06327 std::string message = constructErrorMessage(
06328 "Edif level %s is not supported", (yysemantic_stack_[(4) - (4)].integerVal) );
06329 log("%s\n", message.c_str());
06330 Error e( eMessageIdParserError,
06331 __FUNCTION__, __FILE__, __LINE__ );
06332 e.saveContextData( "Parser error message", message );
06333 e.saveContextData( "Filename", yyloc.begin.filename );
06334 e.saveContextData( "StartLine", yyloc.begin.line );
06335 e.saveContextData( "EndLine", yyloc.end.line );
06336 inDriver.setParserError( e );
06337 error( yyloc, message );
06338 YYABORT;
06339 }
06340 }
06341 if( lib )
06342 {
06343 if( lib->getLevel() != level )
06344 {
06345 std::string message = constructErrorMessage(
06346 "Level mismatch - old %d new %d\n",
06347 lib->getLevel(), level );
06348 log("%s\n", message.c_str());
06349 Error e( eMessageIdParserError,
06350 __FUNCTION__, __FILE__, __LINE__ );
06351 e.saveContextData( "Parser error message", message );
06352 e.saveContextData( "Filename", yyloc.begin.filename );
06353 e.saveContextData( "StartLine", yyloc.begin.line );
06354 e.saveContextData( "EndLine", yyloc.end.line );
06355 inDriver.setParserError( e );
06356 error( yyloc, message );
06357 YYABORT;
06358 }
06359 else
06360 {
06361 if( lib->getIsExtern() )
06362 {
06363 log("Exising lib was extern .. changing\n");
06364 lib->setIsExtern( false );
06365 }
06366 }
06367 }
06368 else
06369 {
06370 try
06371 {
06372 ctx->getFactory()->create( lib );
06373 }
06374 catch( Error &e )
06375 {
06376 std::string message = constructErrorMessage(
06377 "Unable to create lib : %s",
06378 lib->getName().c_str());
06379 log("%s\n", message.c_str());
06380 e.setCurrentLocation( __FUNCTION__,
06381 __FILE__, __LINE__ );
06382 e.saveContextData( "Parser error message", message );
06383 e.saveContextData( "Filename", yyloc.begin.filename );
06384 e.saveContextData( "StartLine", yyloc.begin.line );
06385 e.saveContextData( "EndLine", yyloc.end.line );
06386 inDriver.setParserError( e );
06387 error( yyloc, message );
06388 YYABORT;
06389 }
06390 lib->setName( (yysemantic_stack_[(4) - (3)].nameData)->mName );
06391 if( ! (yysemantic_stack_[(4) - (3)].nameData)->mOriginalName.empty() )
06392 {
06393 lib->setOriginalName( (yysemantic_stack_[(4) - (3)].nameData)->mOriginalName );
06394 }
06395 lib->setLevel( level );
06396 lib->setParent( root );
06397 root->addLibrary( lib );
06398 log("Created lib %s level %d\n",
06399 lib->getName().c_str(), level );
06400 }
06401 ctx->setCurrentLibrary( lib );
06402 ctx->pushStatusContainer( lib );
06403 delete (yysemantic_stack_[(4) - (3)].nameData);
06404 }
06405 else
06406 {
06407
06408 }
06409 }
06410 break;
06411
06412 case 501:
06413
06414
06415 #line 4697 "Parser.yy"
06416 {
06417 inDriver.getContext()->setCurrentLibrary(
06418 LibrarySharedPtr() );
06419 inDriver.getContext()->popStatusContainer();
06420 }
06421 break;
06422
06423 case 505:
06424
06425
06426 #line 4708 "Parser.yy"
06427 {
06428 EdifContextSharedPtr ctx = inDriver.getContext();
06429 LibrarySharedPtr lib = ctx->getCurrentLibrary();
06430 lib->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
06431 delete (yysemantic_stack_[(2) - (2)].stringVal);
06432 }
06433 break;
06434
06435 case 506:
06436
06437
06438 #line 4715 "Parser.yy"
06439 {
06440 EdifContextSharedPtr ctx = inDriver.getContext();
06441 LibrarySharedPtr lib = ctx->getCurrentLibrary();
06442 lib->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
06443 delete (yysemantic_stack_[(2) - (2)].stringVal);
06444 }
06445 break;
06446
06447 case 508:
06448
06449
06450 #line 4727 "Parser.yy"
06451 {
06452 (yyval.nameData) = (yysemantic_stack_[(4) - (3)].nameData);
06453 }
06454 break;
06455
06456 case 516:
06457
06458
06459 #line 4748 "Parser.yy"
06460 {
06461 boost::scoped_ptr<ValueData> delay( (yysemantic_stack_[(5) - (3)].valueData) );
06462 boost::scoped_ptr<ValueData> acLoad( (yysemantic_stack_[(5) - (4)].valueData) );
06463 (yyval.portDelay) = new PortDelay();
06464 (yyval.portDelay)->setType( PortDelay::eTypeLoadDelay );
06465 (yyval.portDelay)->setDelay(
06466 delay->mValues[0].get<Value::MiNoMax>() );
06467 (yyval.portDelay)->setAcLoad(
06468 acLoad->mValues[0].get<Value::MiNoMax>() );
06469 }
06470 break;
06471
06472 case 526:
06473
06474
06475 #line 4780 "Parser.yy"
06476 {
06477 delete (yysemantic_stack_[(1) - (1)].logicRefData);
06478 }
06479 break;
06480
06481 case 531:
06482
06483
06484 #line 4792 "Parser.yy"
06485 {
06486 LogicalResponseSharedPtr logicalResponse;
06487 EdifContextSharedPtr ctx
06488 = inDriver.getContext();
06489 try
06490 {
06491 ctx->getFactory()->create( logicalResponse );
06492 }
06493 catch( Error &e )
06494 {
06495 std::string message = constructErrorMessage(
06496 "Unable to create logicInput/logicOutput" );
06497 log("%s\n", message.c_str());
06498 e.setCurrentLocation( __FUNCTION__,
06499 __FILE__, __LINE__ );
06500 e.saveContextData( "Parser error message", message );
06501 e.saveContextData( "Filename", yyloc.begin.filename );
06502 e.saveContextData( "StartLine", yyloc.begin.line );
06503 e.saveContextData( "EndLine", yyloc.end.line );
06504 inDriver.setParserError( e );
06505 error( yyloc, message );
06506 YYABORT;
06507 }
06508 logicalResponse->setResponseType( LogicalResponse::eResponseTypeInput );
06509 ctx->setCurrentLogicalResponse( logicalResponse );
06510 ApplySharedPtr apply
06511 = ctx->getCurrentApply();
06512 apply->addLogicResponse( logicalResponse );
06513 }
06514 break;
06515
06516 case 532:
06517
06518
06519 #line 4821 "Parser.yy"
06520 {
06521 EdifContextSharedPtr ctx = inDriver.getContext();
06522 ctx->setCurrentLogicalResponse( LogicalResponseSharedPtr() );
06523 }
06524 break;
06525
06526 case 535:
06527
06528
06529 #line 4832 "Parser.yy"
06530 {
06531 if( NULL != (yysemantic_stack_[(1) - (1)].portListData) && !(yysemantic_stack_[(1) - (1)].portListData)->mPortRefs.empty() )
06532 {
06533 boost::scoped_ptr<PortListData> portListData( (yysemantic_stack_[(1) - (1)].portListData) );
06534 std::string message;
06535
06536 EdifContextSharedPtr ctx = inDriver.getContext();
06537 LogicalResponseSharedPtr logicalResponse
06538 = ctx->getCurrentLogicalResponse();
06539
06540 PortListSharedPtr portList;
06541 ctx->getFactory()->create( portList );
06542
06543 for( std::vector<PortRefData *>::iterator it
06544 = portListData->mPortRefs.begin();
06545 it != portListData->mPortRefs.end(); ++it )
06546 {
06547 PortRefData *portData = *it;
06548 std::vector< std::string > nestedNames;
06549 PortRefData *currPortRef = *it;
06550 PortRefData *nextPortRef = portData->mParentPort;
06551 nestedNames.push_back(currPortRef->mPortName->mName);
06552 while( nextPortRef )
06553 {
06554 currPortRef = nextPortRef;
06555 nestedNames.push_back( nextPortRef->mPortName->mName );
06556 nextPortRef = currPortRef->mParentPort;
06557 }
06558 bool isPort = ( NULL == currPortRef->mInstanceName );
06559 NameData *portNameData = currPortRef->mPortName;
06560 std::string topName = *(nestedNames.rbegin());
06561 ViewSharedPtr view = ctx->getCurrentView();
06562 if( isPort )
06563 {
06564 PortSharedPtr port = view->findPort( topName );
06565 if( !port )
06566 {
06567 SimulateSharedPtr simulate
06568 = ctx->getCurrentSimulate();
06569 PortListAliasSharedPtr portList
06570 = simulate->findPortListAlias( topName );
06571 if( !portList )
06572 {
06573 std::string message = constructErrorMessage(
06574 "No port %s found in view/portListAlias\n",
06575 portNameData->mName.c_str());
06576 log("%s\n", message.c_str());
06577 Error e( eMessageIdParserError,
06578 __FUNCTION__, __FILE__, __LINE__ );
06579 e.saveContextData( "Parser error message", message );
06580 e.saveContextData( "Filename", yyloc.begin.filename );
06581 e.saveContextData( "StartLine", yyloc.begin.line );
06582 e.saveContextData( "EndLine", yyloc.end.line );
06583 inDriver.setParserError( e );
06584 error( yyloc, message );
06585 YYABORT;
06586 }
06587 }
06588
06589 try
06590 {
06591 connectibleFinder( nestedNames, port );
06592 if( !portData->mPortName->mIndices.empty() )
06593 {
06594 port = port->get( portData->mPortName->mIndices );
06595 }
06596 portList->addChildPort( port );
06597 }
06598 catch( Error &e )
06599 {
06600 std::string message = constructErrorMessage(
06601 "Unable to connect port : %s",
06602 port->getName().c_str());
06603 log("%s\n", message.c_str());
06604 e.setCurrentLocation( __FUNCTION__,
06605 __FILE__, __LINE__ );
06606 e.saveContextData( "Parser error message", message );
06607 e.saveContextData( "Filename", yyloc.begin.filename );
06608 e.saveContextData( "StartLine", yyloc.begin.line );
06609 e.saveContextData( "EndLine", yyloc.end.line );
06610 inDriver.setParserError( e );
06611 error( yyloc, message );
06612 YYABORT;
06613 }
06614 }
06615 else
06616 {
06617 }
06618 }
06619 logicalResponse->setConnectedPortList( portList );
06620 }
06621 }
06622 break;
06623
06624 case 536:
06625
06626
06627 #line 4925 "Parser.yy"
06628 {
06629 boost::scoped_ptr<PortRefData> portData( (yysemantic_stack_[(1) - (1)].portRefData) );
06630 NameData *portNameData = portData->mPortName;
06631 std::string name = portNameData->mName;
06632 EdifContextSharedPtr ctx
06633 = inDriver.getContext();
06634 ViewSharedPtr view = ctx->getCurrentView();
06635
06636 PortRefData *currPortRef = (yysemantic_stack_[(1) - (1)].portRefData);
06637 PortRefData *nextPortRef = portData->mParentPort;
06638 std::vector< std::string > nestedNames;
06639 nestedNames.push_back(currPortRef->mPortName->mName);
06640 while( nextPortRef )
06641 {
06642 currPortRef = nextPortRef;
06643 nestedNames.push_back( nextPortRef->mPortName->mName );
06644 nextPortRef = currPortRef->mParentPort;
06645 }
06646
06647 bool isPort = ( NULL == currPortRef->mInstanceName );
06648 std::string topName = *(nestedNames.rbegin());
06649 if( isPort )
06650 {
06651 PortSharedPtr port = view->findPort( topName );
06652 if( !port )
06653 {
06654 std::string message = constructErrorMessage(
06655 "No port %s found in view %s\n",
06656 name.c_str(),
06657 view->getName().c_str());
06658 log("%s\n", message.c_str());
06659 Error e( eMessageIdParserError,
06660 __FUNCTION__, __FILE__, __LINE__ );
06661 e.saveContextData( "Parser error message", message );
06662 e.saveContextData( "Filename", yyloc.begin.filename );
06663 e.saveContextData( "StartLine", yyloc.begin.line );
06664 e.saveContextData( "EndLine", yyloc.end.line );
06665 inDriver.setParserError( e );
06666 error( yyloc, message );
06667 YYABORT;
06668 }
06669
06670 LogicalResponseSharedPtr logicalResponse
06671 = ctx->getCurrentLogicalResponse();
06672 try
06673 {
06674 connectibleFinder( nestedNames, port );
06675 if( !portData->mPortName->mIndices.empty() )
06676 {
06677 port = port->get( portData->mPortName->mIndices );
06678 }
06679 logicalResponse->setConnectedPort( port );
06680 }
06681 catch( Error &e )
06682 {
06683 e.setCurrentLocation(
06684 __FUNCTION__, __FILE__, __LINE__ );
06685 throw;
06686 }
06687 }
06688 }
06689 break;
06690
06691 case 537:
06692
06693
06694 #line 4987 "Parser.yy"
06695 {
06696 boost::scoped_ptr<NameData> portData( (yysemantic_stack_[(1) - (1)].nameData) );
06697 std::string name = portData->mName;
06698 EdifContextSharedPtr ctx
06699 = inDriver.getContext();
06700 ViewSharedPtr view = ctx->getCurrentView();
06701 PortSharedPtr port = view->findPort( name );
06702 LogicalResponseSharedPtr logicalResponse
06703 = ctx->getCurrentLogicalResponse();
06704 if( !port )
06705 {
06706 SimulateSharedPtr simulate
06707 = ctx->getCurrentSimulate();
06708 PortListAliasSharedPtr portListAlias
06709 = simulate->findPortListAlias( name );
06710 if( !portListAlias )
06711 {
06712 std::string message = constructErrorMessage(
06713 "No port %s found in view/portListAlias\n",
06714 name.c_str());
06715 log("%s\n", message.c_str());
06716 Error e( eMessageIdParserError,
06717 __FUNCTION__, __FILE__, __LINE__ );
06718 e.saveContextData( "Parser error message", message );
06719 e.saveContextData( "Filename", yyloc.begin.filename );
06720 e.saveContextData( "StartLine", yyloc.begin.line );
06721 e.saveContextData( "EndLine", yyloc.end.line );
06722 inDriver.setParserError( e );
06723 error( yyloc, message );
06724 YYABORT;
06725 }
06726 else
06727 {
06728 logicalResponse->setConnectedPortListAlias( portListAlias );
06729 }
06730 }
06731 else
06732 {
06733 logicalResponse->setConnectedPort( port );
06734 }
06735 }
06736 break;
06737
06738 case 538:
06739
06740
06741 #line 5031 "Parser.yy"
06742 {
06743 LogicElementSharedPtr logicElem;
06744 EdifContextSharedPtr ctx
06745 = inDriver.getContext();
06746 try
06747 {
06748 ctx->getFactory()->create( logicElem );
06749 logicElem->setType( LogicElement::eTypeList );
06750 }
06751 catch( Error &e )
06752 {
06753 std::string message = constructErrorMessage(
06754 "Unable to create logicList" );
06755 log("%s\n", message.c_str());
06756 e.setCurrentLocation( __FUNCTION__,
06757 __FILE__, __LINE__ );
06758 e.saveContextData( "Parser error message", message );
06759 e.saveContextData( "Filename", yyloc.begin.filename );
06760 e.saveContextData( "StartLine", yyloc.begin.line );
06761 e.saveContextData( "EndLine", yyloc.end.line );
06762 inDriver.setParserError( e );
06763 error( yyloc, message );
06764 YYABORT;
06765 }
06766 ctx->pushLogicElement( logicElem );
06767 ctx->incrementLogicElementDepth();
06768 }
06769 break;
06770
06771 case 539:
06772
06773
06774 #line 5058 "Parser.yy"
06775 {
06776 EdifContextSharedPtr ctx = inDriver.getContext();
06777 LogicElementSharedPtr currentLogicElem
06778 = ctx->getCurrentLogicElement();
06779 ctx->popLogicElement();
06780 LogicElementSharedPtr parentLogicElem;
06781 if(ctx->getLogicElementDepth() > 1 )
06782 {
06783 parentLogicElem = ctx->getCurrentLogicElement();
06784 }
06785 ctx->decrementLogicElementDepth();
06786 if( parentLogicElem )
06787 {
06788 parentLogicElem->setRelationType(
06789 LogicElement::eRelationTypeParent );
06790 currentLogicElem->setRelationType(
06791 LogicElement::eRelationTypeChild );
06792
06793 size_t parentLogicElemSize = parentLogicElem->getSize();
06794 size_t currentLogicElemSize = currentLogicElem->getSize();
06795
06796 log("Parent LogicList Size :: %d\n",
06797 parentLogicElemSize);
06798 log("Current LogicList Size :: %d\n",
06799 currentLogicElemSize);
06800
06801
06802
06803
06804 if( parentLogicElemSize != 0 )
06805 {
06806 if( parentLogicElemSize == currentLogicElemSize )
06807 {
06808 parentLogicElem->addChildLogicElement( currentLogicElem );
06809 }
06810 else
06811 {
06812 std::string message = constructErrorMessage(
06813 "Child logicList can't be added, size mismatch %d with %d",
06814 parentLogicElemSize,
06815 currentLogicElemSize);
06816 log("%s\n", message.c_str());
06817 Error e( eMessageIdParserError,
06818 __FUNCTION__, __FILE__, __LINE__ );
06819 e.saveContextData( "Parser error message", message );
06820 e.saveContextData( "Filename", yyloc.begin.filename );
06821 e.saveContextData( "StartLine", yyloc.begin.line );
06822 e.saveContextData( "EndLine", yyloc.end.line );
06823 inDriver.setParserError( e );
06824 error( yyloc, message );
06825 YYABORT;
06826 }
06827 }
06828 else
06829 {
06830 parentLogicElem->addChildLogicElement( currentLogicElem );
06831 }
06832 }
06833 else
06834 {
06835 ctx->pushLogicElement( currentLogicElem );
06836 ctx->incrementLogicElementDepth();
06837 }
06838 }
06839 break;
06840
06841 case 544:
06842
06843
06844 #line 5131 "Parser.yy"
06845 {
06846 (yyval.logicRefData) = (yysemantic_stack_[(4) - (3)].logicRefData);
06847 }
06848 break;
06849
06850 case 545:
06851
06852
06853 #line 5137 "Parser.yy"
06854 {
06855 (yyval.logicRefData) = (yysemantic_stack_[(4) - (3)].logicRefData);
06856 }
06857 break;
06858
06859 case 547:
06860
06861
06862 #line 5146 "Parser.yy"
06863 {
06864 (yyval.nameData) = (yysemantic_stack_[(1) - (1)].nameData);
06865 }
06866 break;
06867
06868 case 549:
06869
06870
06871 #line 5155 "Parser.yy"
06872 {
06873 LogicElementSharedPtr logicElem;
06874 EdifContextSharedPtr ctx
06875 = inDriver.getContext();
06876 try
06877 {
06878 ctx->getFactory()->create( logicElem );
06879 logicElem->setType( LogicElement::eTypeOneOf );
06880 }
06881 catch( Error &e )
06882 {
06883 std::string message = constructErrorMessage(
06884 "Unable to create logicOneOf" );
06885 log("%s\n", message.c_str());
06886 e.setCurrentLocation( __FUNCTION__,
06887 __FILE__, __LINE__ );
06888 e.saveContextData( "Parser error message", message );
06889 e.saveContextData( "Filename", yyloc.begin.filename );
06890 e.saveContextData( "StartLine", yyloc.begin.line );
06891 e.saveContextData( "EndLine", yyloc.end.line );
06892 inDriver.setParserError( e );
06893 error( yyloc, message );
06894 YYABORT;
06895 }
06896 ctx->pushLogicElement( logicElem );
06897 ctx->incrementLogicElementDepth();
06898 }
06899 break;
06900
06901 case 550:
06902
06903
06904 #line 5182 "Parser.yy"
06905 {
06906 EdifContextSharedPtr ctx = inDriver.getContext();
06907 LogicElementSharedPtr currentLogicElem
06908 = ctx->getCurrentLogicElement();
06909 ctx->popLogicElement();
06910 LogicElementSharedPtr parentLogicElem;
06911 if(ctx->getLogicElementDepth() > 1 )
06912 {
06913 parentLogicElem = ctx->getCurrentLogicElement();
06914 }
06915 ctx->decrementLogicElementDepth();
06916 if( parentLogicElem )
06917 {
06918 parentLogicElem->setRelationType(
06919 LogicElement::eRelationTypeParent );
06920 currentLogicElem->setRelationType(
06921 LogicElement::eRelationTypeChild );
06922
06923 size_t parentLogicElemSize = parentLogicElem->getSize();
06924 size_t currentLogicElemSize = currentLogicElem->getSize();
06925
06926 log("Parent LogicOneOf Size :: %d\n",
06927 parentLogicElemSize);
06928 log("Current LogicOneOf Size :: %d\n",
06929 currentLogicElemSize);
06930
06931
06932
06933
06934 if( parentLogicElemSize != 0 )
06935 {
06936 if( parentLogicElemSize == currentLogicElemSize )
06937 {
06938 parentLogicElem->addChildLogicElement( currentLogicElem );
06939 }
06940 else
06941 {
06942 std::string message = constructErrorMessage(
06943 "Child logictOneOf can't be added, size mismatch %d with %d",
06944 parentLogicElemSize,
06945 currentLogicElemSize);
06946 log("%s\n", message.c_str());
06947 Error e( eMessageIdParserError,
06948 __FUNCTION__, __FILE__, __LINE__ );
06949 e.saveContextData( "Parser error message", message );
06950 e.saveContextData( "Filename", yyloc.begin.filename );
06951 e.saveContextData( "StartLine", yyloc.begin.line );
06952 e.saveContextData( "EndLine", yyloc.end.line );
06953 inDriver.setParserError( e );
06954 error( yyloc, message );
06955 YYABORT;
06956 }
06957 }
06958 else
06959 {
06960 parentLogicElem->addChildLogicElement( currentLogicElem );
06961 }
06962 }
06963 else
06964 {
06965 ctx->pushLogicElement( currentLogicElem );
06966 ctx->incrementLogicElementDepth();
06967 }
06968 }
06969 break;
06970
06971 case 551:
06972
06973
06974 #line 5249 "Parser.yy"
06975 {
06976 boost::scoped_ptr<NameData> logicData( (yysemantic_stack_[(1) - (1)].nameData) );
06977 std::string name = logicData->mName;
06978 EdifContextSharedPtr ctx
06979 = inDriver.getContext();
06980 LibrarySharedPtr lib
06981 = ctx->getCurrentLibrary();
06982 SimulationInfoSharedPtr simuInfo
06983 = lib->getSimulationInfo();
06984 if( !simuInfo )
06985 {
06986 std::string message = constructErrorMessage(
06987 "SimulatioInfo not found in %s library",
06988 lib->getName().c_str() );
06989 log("%s\n", message.c_str());
06990 Error e( eMessageIdParserError,
06991 __FUNCTION__, __FILE__, __LINE__ );
06992 e.saveContextData( "Parser error message", message );
06993 e.saveContextData( "Filename", yyloc.begin.filename );
06994 e.saveContextData( "StartLine", yyloc.begin.line );
06995 e.saveContextData( "EndLine", yyloc.end.line );
06996 inDriver.setParserError( e );
06997 error( yyloc, message );
06998 YYABORT;
06999 }
07000 LogicValueSharedPtr logicVal
07001 = simuInfo->findLogicValue( name );
07002 if( !logicVal )
07003 {
07004 SimulateSharedPtr simulate
07005 = ctx->getCurrentSimulate();
07006 if( simulate )
07007 {
07008 WaveValueSharedPtr waveValue
07009 = simulate->findWaveValue( name );
07010 if( !waveValue )
07011 {
07012 std::string message = constructErrorMessage(
07013 "Wave Value %s not found",
07014 logicData->mName.c_str() );
07015 log("%s\n", message.c_str());
07016 Error e( eMessageIdParserError,
07017 __FUNCTION__, __FILE__, __LINE__ );
07018 e.saveContextData( "Parser error message", message );
07019 e.saveContextData( "Filename", yyloc.begin.filename );
07020 e.saveContextData( "StartLine", yyloc.begin.line );
07021 e.saveContextData( "EndLine", yyloc.end.line );
07022 inDriver.setParserError( e );
07023 error( yyloc, message );
07024 YYABORT;
07025 }
07026 }
07027 else
07028 {
07029 std::string message = constructErrorMessage(
07030 "Logic Value %s not found",
07031 name.c_str() );
07032 log("%s\n", message.c_str());
07033 Error e( eMessageIdParserError,
07034 __FUNCTION__, __FILE__, __LINE__ );
07035 e.saveContextData( "Parser error message", message );
07036 e.saveContextData( "Filename", yyloc.begin.filename );
07037 e.saveContextData( "StartLine", yyloc.begin.line );
07038 e.saveContextData( "EndLine", yyloc.end.line );
07039 inDriver.setParserError( e );
07040 error( yyloc, message );
07041 YYABORT;
07042 }
07043 }
07044 LogicElementSharedPtr singleElem;
07045 try
07046 {
07047 ctx->getFactory()->create( singleElem );
07048 singleElem->setType( LogicElement::eTypeSingle );
07049 singleElem->setName( name );
07050 }
07051 catch( Error &e )
07052 {
07053 std::string message = constructErrorMessage(
07054 "Unable to create logic single element" );
07055 log("%s\n", message.c_str());
07056 e.setCurrentLocation( __FUNCTION__,
07057 __FILE__, __LINE__ );
07058 e.saveContextData( "Parser error message", message );
07059 e.saveContextData( "Filename", yyloc.begin.filename );
07060 e.saveContextData( "StartLine", yyloc.begin.line );
07061 e.saveContextData( "EndLine", yyloc.end.line );
07062 inDriver.setParserError( e );
07063 error( yyloc, message );
07064 YYABORT;
07065 }
07066 LogicElementSharedPtr logicElem
07067 = ctx->getCurrentLogicElement();
07068 logicElem->addChildLogicElement( singleElem );
07069 }
07070 break;
07071
07072 case 555:
07073
07074
07075 #line 5352 "Parser.yy"
07076 {
07077 LogicalResponseSharedPtr logicalResponse;
07078 EdifContextSharedPtr ctx
07079 = inDriver.getContext();
07080 try
07081 {
07082 ctx->getFactory()->create( logicalResponse );
07083 }
07084 catch( Error &e )
07085 {
07086 std::string message = constructErrorMessage(
07087 "Unable to create logicOutput" );
07088 log("%s\n", message.c_str());
07089 e.setCurrentLocation( __FUNCTION__,
07090 __FILE__, __LINE__ );
07091 e.saveContextData( "Parser error message", message );
07092 e.saveContextData( "Filename", yyloc.begin.filename );
07093 e.saveContextData( "StartLine", yyloc.begin.line );
07094 e.saveContextData( "EndLine", yyloc.end.line );
07095 inDriver.setParserError( e );
07096 error( yyloc, message );
07097 YYABORT;
07098 }
07099 logicalResponse->setResponseType( LogicalResponse::eResponseTypeOutput );
07100 ctx->setCurrentLogicalResponse( logicalResponse );
07101 ApplySharedPtr apply
07102 = ctx->getCurrentApply();
07103 apply->addLogicResponse( logicalResponse );
07104 }
07105 break;
07106
07107 case 556:
07108
07109
07110 #line 5381 "Parser.yy"
07111 {
07112 EdifContextSharedPtr ctx = inDriver.getContext();
07113 ctx->setCurrentLogicalResponse( LogicalResponseSharedPtr() );
07114 }
07115 break;
07116
07117 case 562:
07118
07119
07120 #line 5397 "Parser.yy"
07121 {
07122 delete (yysemantic_stack_[(2) - (2)].stringVal);
07123 }
07124 break;
07125
07126 case 563:
07127
07128
07129 #line 5401 "Parser.yy"
07130 {
07131 delete (yysemantic_stack_[(2) - (2)].stringVal);
07132 }
07133 break;
07134
07135 case 564:
07136
07137
07138 #line 5407 "Parser.yy"
07139 {
07140 if( NULL == (yysemantic_stack_[(5) - (4)].logicRefData) )
07141 {
07142 (yyval.logicRefData) = new LogicRefData();
07143 }
07144 else
07145 {
07146 (yyval.logicRefData) = (yysemantic_stack_[(5) - (4)].logicRefData);
07147 }
07148 (yyval.logicRefData)->mLogicName = (yysemantic_stack_[(5) - (3)].nameData);
07149 }
07150 break;
07151
07152 case 565:
07153
07154
07155 #line 5421 "Parser.yy"
07156 {
07157 (yyval.logicRefData) = NULL;
07158 }
07159 break;
07160
07161 case 566:
07162
07163
07164 #line 5425 "Parser.yy"
07165 {
07166 (yyval.logicRefData) = new LogicRefData();
07167 (yyval.logicRefData)->mLibraryName = (yysemantic_stack_[(1) - (1)].nameData);
07168 }
07169 break;
07170
07171 case 567:
07172
07173
07174 #line 5432 "Parser.yy"
07175 {
07176 boost::scoped_ptr<NameData> nameData( (yysemantic_stack_[(3) - (3)].nameData) );
07177 std::string name = nameData->mName;
07178 EdifContextSharedPtr ctx = inDriver.getContext();
07179 LogicValueSharedPtr logicVal;
07180 SimulationInfoSharedPtr simuInfo
07181 = ctx->getCurrentSimulationInfo();
07182 logicVal = simuInfo->findLogicValue( name );
07183 if( logicVal )
07184 {
07185 log("Found existing logic value\n");
07186 std::string message = constructErrorMessage(
07187 "Logic value %s already exists in simulation info\n",
07188 name.c_str() );
07189 log("%s\n", message.c_str());
07190 Error e( eMessageIdParserError,
07191 __FUNCTION__, __FILE__, __LINE__ );
07192 e.saveContextData( "Parser error message", message );
07193 e.saveContextData( "Filename", yyloc.begin.filename );
07194 e.saveContextData( "StartLine", yyloc.begin.line );
07195 e.saveContextData( "EndLine", yyloc.end.line );
07196 inDriver.setParserError( e );
07197 error( yyloc, message );
07198 YYABORT;
07199 }
07200 else
07201 {
07202 try
07203 {
07204 ctx->getFactory()->create( logicVal );
07205 }
07206 catch( Error &e )
07207 {
07208 std::string message = constructErrorMessage(
07209 "Unable to create Logic Value : %s", name.c_str());
07210 log("%s\n", message.c_str());
07211 e.setCurrentLocation( __FUNCTION__,
07212 __FILE__, __LINE__ );
07213 e.saveContextData( "Parser error message", message );
07214 e.saveContextData( "Filename", yyloc.begin.filename );
07215 e.saveContextData( "StartLine", yyloc.begin.line );
07216 e.saveContextData( "EndLine", yyloc.end.line );
07217 inDriver.setParserError( e );
07218 error( yyloc, message );
07219 YYABORT;
07220 }
07221 logicVal->setName( name );
07222 if( !nameData->mOriginalName.empty() )
07223 {
07224 logicVal->setOriginalName( nameData->mOriginalName );
07225 }
07226 logicVal->setParent( simuInfo );
07227 simuInfo->addLogicValue( logicVal );
07228 log( "Created Logic Value %s\n", logicVal->getName().c_str() );
07229 }
07230 ctx->setCurrentLogicValue( logicVal );
07231 ctx->pushPropertyContainer( logicVal );
07232 }
07233 break;
07234
07235 case 568:
07236
07237
07238 #line 5490 "Parser.yy"
07239 {
07240 EdifContextSharedPtr ctx = inDriver.getContext();
07241 LogicValueSharedPtr logicVal = ctx->getCurrentLogicValue();
07242 if( (yysemantic_stack_[(6) - (5)].logicValueAttributes) )
07243 {
07244 boost::shared_ptr<LogicValueAttributes> attrib( (yysemantic_stack_[(6) - (5)].logicValueAttributes) );
07245 logicVal->setAttributes( attrib );
07246 }
07247 ctx->setCurrentLogicValue( LogicValueSharedPtr() );
07248 ctx->popPropertyContainer();
07249 }
07250 break;
07251
07252 case 569:
07253
07254
07255 #line 5504 "Parser.yy"
07256 {
07257 (yyval.logicValueAttributes) = NULL;
07258 }
07259 break;
07260
07261 case 570:
07262
07263
07264 #line 5508 "Parser.yy"
07265 {
07266 boost::scoped_ptr<ValueData> data((yysemantic_stack_[(2) - (2)].valueData));
07267 (yyval.logicValueAttributes) = ((yysemantic_stack_[(2) - (1)].logicValueAttributes)) ? (yysemantic_stack_[(2) - (1)].logicValueAttributes) : new LogicValueAttributes();
07268 (yyval.logicValueAttributes)->setVoltageMap( data->mValues[0].get<Value::MiNoMax>() );
07269 }
07270 break;
07271
07272 case 571:
07273
07274
07275 #line 5514 "Parser.yy"
07276 {
07277 boost::scoped_ptr<ValueData> data((yysemantic_stack_[(2) - (2)].valueData));
07278 (yyval.logicValueAttributes) = ((yysemantic_stack_[(2) - (1)].logicValueAttributes)) ? (yysemantic_stack_[(2) - (1)].logicValueAttributes) : new LogicValueAttributes();
07279 (yyval.logicValueAttributes)->setCurrentMap( data->mValues[0].get<Value::MiNoMax>() );
07280 }
07281 break;
07282
07283 case 572:
07284
07285
07286 #line 5520 "Parser.yy"
07287 {
07288 (yyval.logicValueAttributes) = ((yysemantic_stack_[(2) - (1)].logicValueAttributes)) ? (yysemantic_stack_[(2) - (1)].logicValueAttributes) : new LogicValueAttributes();
07289 Value::Boolean val = (yysemantic_stack_[(2) - (2)].integerVal);
07290 (yyval.logicValueAttributes)->setBooleanMap( val );
07291 }
07292 break;
07293
07294 case 573:
07295
07296
07297 #line 5526 "Parser.yy"
07298 {
07299 (yyval.logicValueAttributes) = ((yysemantic_stack_[(2) - (1)].logicValueAttributes)) ? (yysemantic_stack_[(2) - (1)].logicValueAttributes) : new LogicValueAttributes();
07300 std::list< LogicValueSharedPtr > logicValues;
07301 boost::scoped_ptr<LogicListData> logicListData( (yysemantic_stack_[(2) - (2)].logicListData) );
07302 if( NULL != (yysemantic_stack_[(2) - (2)].logicListData) && !(yysemantic_stack_[(2) - (2)].logicListData)->mNameDataList.empty() )
07303 {
07304 for( std::list<NameData *>::iterator it
07305 = logicListData->mNameDataList.begin();
07306 it != logicListData->mNameDataList.end(); it++ )
07307 {
07308 NameData *pNameData = *it;
07309 std::string name = pNameData->mName;
07310 EdifContextSharedPtr ctx = inDriver.getContext();
07311 LogicValueSharedPtr logicVal;
07312 SimulationInfoSharedPtr simuInfo
07313 = ctx->getCurrentSimulationInfo();
07314 logicVal = simuInfo->findLogicValue( name );
07315 if( !logicVal )
07316 {
07317 std::string message = constructErrorMessage(
07318 "Logic Value %s not found",
07319 name.c_str() );
07320 log("%s\n", message.c_str());
07321 Error e( eMessageIdParserError,
07322 __FUNCTION__, __FILE__, __LINE__ );
07323 e.saveContextData( "Parser error message", message );
07324 e.saveContextData( "Filename", yyloc.begin.filename );
07325 e.saveContextData( "StartLine", yyloc.begin.line );
07326 e.saveContextData( "EndLine", yyloc.end.line );
07327 inDriver.setParserError( e );
07328 error( yyloc, message );
07329 YYABORT;
07330 }
07331 else
07332 {
07333 if( !logicValues.empty() )
07334 {
07335 std::list< LogicValueSharedPtr >::iterator logicIt
07336 = std::find( logicValues.begin(), logicValues.end(), logicVal );
07337 if( logicIt != logicValues.end() )
07338 {
07339 std::string message = constructErrorMessage(
07340 "Logic value %s already exist in compound list",
07341 name.c_str());
07342 log("%s\n", message.c_str());
07343 Error e( eMessageIdParserError,
07344 __FUNCTION__, __FILE__, __LINE__ );
07345 e.saveContextData( "Parser error message", message );
07346 e.saveContextData( "Filename", yyloc.begin.filename );
07347 e.saveContextData( "StartLine", yyloc.begin.line );
07348 e.saveContextData( "EndLine", yyloc.end.line );
07349 inDriver.setParserError( e );
07350 error( yyloc, message );
07351 YYABORT;
07352 }
07353 else
07354 {
07355 logicValues.push_back( logicVal );
07356 }
07357 }
07358 else
07359 {
07360 logicValues.push_back( logicVal );
07361 }
07362 }
07363 }
07364 (yyval.logicValueAttributes)->setCompoundLogicValues( logicValues );
07365 }
07366 }
07367 break;
07368
07369 case 574:
07370
07371
07372 #line 5596 "Parser.yy"
07373 {
07374 boost::scoped_ptr<NameData> pNameData( (yysemantic_stack_[(2) - (2)].nameData) );
07375 std::string name = pNameData->mName;
07376 EdifContextSharedPtr ctx = inDriver.getContext();
07377 LogicValueSharedPtr logicVal;
07378 SimulationInfoSharedPtr simuInfo
07379 = ctx->getCurrentSimulationInfo();
07380 logicVal = simuInfo->findLogicValue( name );
07381 if( !logicVal )
07382 {
07383 std::string message = constructErrorMessage(
07384 "Logic Value %s not found",
07385 name.c_str() );
07386 log("%s\n", message.c_str());
07387 Error e( eMessageIdParserError,
07388 __FUNCTION__, __FILE__, __LINE__ );
07389 e.saveContextData( "Parser error message", message );
07390 e.saveContextData( "Filename", yyloc.begin.filename );
07391 e.saveContextData( "StartLine", yyloc.begin.line );
07392 e.saveContextData( "EndLine", yyloc.end.line );
07393 inDriver.setParserError( e );
07394 error( yyloc, message );
07395 YYABORT;
07396 }
07397 else
07398 {
07399 (yyval.logicValueAttributes) = ((yysemantic_stack_[(2) - (1)].logicValueAttributes)) ? (yysemantic_stack_[(2) - (1)].logicValueAttributes) : new LogicValueAttributes();
07400 (yyval.logicValueAttributes)->setWeakLogicValue( logicVal );
07401 }
07402 }
07403 break;
07404
07405 case 575:
07406
07407
07408 #line 5627 "Parser.yy"
07409 {
07410 boost::scoped_ptr<NameData> pNameData( (yysemantic_stack_[(2) - (2)].nameData) );
07411 std::string name = pNameData->mName;
07412 EdifContextSharedPtr ctx = inDriver.getContext();
07413 LogicValueSharedPtr logicVal;
07414 SimulationInfoSharedPtr simuInfo
07415 = ctx->getCurrentSimulationInfo();
07416 logicVal = simuInfo->findLogicValue( name );
07417 if( !logicVal )
07418 {
07419 std::string message = constructErrorMessage(
07420 "Logic Value %s not found",
07421 name.c_str() );
07422 log("%s\n", message.c_str());
07423 Error e( eMessageIdParserError,
07424 __FUNCTION__, __FILE__, __LINE__ );
07425 e.saveContextData( "Parser error message", message );
07426 e.saveContextData( "Filename", yyloc.begin.filename );
07427 e.saveContextData( "StartLine", yyloc.begin.line );
07428 e.saveContextData( "EndLine", yyloc.end.line );
07429 inDriver.setParserError( e );
07430 error( yyloc, message );
07431 YYABORT;
07432 }
07433 else
07434 {
07435 (yyval.logicValueAttributes) = ((yysemantic_stack_[(2) - (1)].logicValueAttributes)) ? (yysemantic_stack_[(2) - (1)].logicValueAttributes) : new LogicValueAttributes();
07436 (yyval.logicValueAttributes)->setStrongLogicValue( logicVal );
07437 }
07438 }
07439 break;
07440
07441 case 576:
07442
07443
07444 #line 5658 "Parser.yy"
07445 {
07446 (yyval.logicValueAttributes) = ((yysemantic_stack_[(2) - (1)].logicValueAttributes)) ? (yysemantic_stack_[(2) - (1)].logicValueAttributes) : new LogicValueAttributes();
07447 std::list< LogicValueSharedPtr > logicValues;
07448 boost::scoped_ptr<LogicListData> logicListData( (yysemantic_stack_[(2) - (2)].logicListData) );
07449 if( NULL != (yysemantic_stack_[(2) - (2)].logicListData) && !(yysemantic_stack_[(2) - (2)].logicListData)->mNameDataList.empty() )
07450 {
07451 for( std::list<NameData *>::iterator it
07452 = logicListData->mNameDataList.begin();
07453 it != logicListData->mNameDataList.end(); it++ )
07454 {
07455 NameData *pNameData = *it;
07456 std::string name = pNameData->mName;
07457 EdifContextSharedPtr ctx = inDriver.getContext();
07458 LogicValueSharedPtr logicVal;
07459 SimulationInfoSharedPtr simuInfo
07460 = ctx->getCurrentSimulationInfo();
07461 logicVal = simuInfo->findLogicValue( name );
07462 if( !logicVal )
07463 {
07464 std::string message = constructErrorMessage(
07465 "Logic Value %s not found",
07466 name.c_str() );
07467 log("%s\n", message.c_str());
07468 Error e( eMessageIdParserError,
07469 __FUNCTION__, __FILE__, __LINE__ );
07470 e.saveContextData( "Parser error message", message );
07471 e.saveContextData( "Filename", yyloc.begin.filename );
07472 e.saveContextData( "StartLine", yyloc.begin.line );
07473 e.saveContextData( "EndLine", yyloc.end.line );
07474 inDriver.setParserError( e );
07475 error( yyloc, message );
07476 YYABORT;
07477 }
07478 else
07479 {
07480 if( !logicValues.empty() )
07481 {
07482 std::list< LogicValueSharedPtr >::iterator logicIt
07483 = std::find( logicValues.begin(), logicValues.end(), logicVal );
07484 if( logicIt != logicValues.end() )
07485 {
07486 std::string message = constructErrorMessage(
07487 "Logic value %s already exist in dominates list",
07488 name.c_str());
07489 log("%s\n", message.c_str());
07490 Error e( eMessageIdParserError,
07491 __FUNCTION__, __FILE__, __LINE__ );
07492 e.saveContextData( "Parser error message", message );
07493 e.saveContextData( "Filename", yyloc.begin.filename );
07494 e.saveContextData( "StartLine", yyloc.begin.line );
07495 e.saveContextData( "EndLine", yyloc.end.line );
07496 inDriver.setParserError( e );
07497 error( yyloc, message );
07498 YYABORT;
07499 }
07500 else
07501 {
07502 logicValues.push_back( logicVal );
07503 }
07504 }
07505 else
07506 {
07507 logicValues.push_back( logicVal );
07508 }
07509 }
07510 }
07511 (yyval.logicValueAttributes)->setDominatedLogicValues( logicValues );
07512 }
07513 }
07514 break;
07515
07516 case 577:
07517
07518
07519 #line 5728 "Parser.yy"
07520 {
07521 EdifContextSharedPtr ctx = inDriver.getContext();
07522 boost::scoped_ptr<LogicRefData> logicRefData( (yysemantic_stack_[(2) - (2)].logicRefData) );
07523 std::string logicValName = logicRefData->mLogicName->mName;
07524 std::string libName;
07525 bool isLocalLib = ( NULL == logicRefData->mLibraryName );
07526 if( isLocalLib )
07527 {
07528 libName = ctx->getCurrentLibrary()->getName();
07529 }
07530 else
07531 {
07532 libName = logicRefData->mLibraryName->mName;
07533 }
07534 LibrarySharedPtr library
07535 = ctx->getRoot()->findLibrary( libName ) ;
07536 if( !library )
07537 {
07538 std::string message = constructErrorMessage(
07539 "Library %s not found",
07540 libName.c_str() );
07541 log("%s\n", message.c_str());
07542 Error e( eMessageIdParserError,
07543 __FUNCTION__, __FILE__, __LINE__ );
07544 e.saveContextData( "Parser error message", message );
07545 e.saveContextData( "Filename", yyloc.begin.filename );
07546 e.saveContextData( "StartLine", yyloc.begin.line );
07547 e.saveContextData( "EndLine", yyloc.end.line );
07548 inDriver.setParserError( e );
07549 error( yyloc, message );
07550 YYABORT;
07551 }
07552 LogicValueSharedPtr logicVal;
07553 SimulationInfoSharedPtr simuInfo
07554 = library->getSimulationInfo();
07555 if( !simuInfo )
07556 {
07557 std::string message = constructErrorMessage(
07558 "SimulatioInfo not found in %s library",
07559 library->getName().c_str() );
07560 log("%s\n", message.c_str());
07561 Error e( eMessageIdParserError,
07562 __FUNCTION__, __FILE__, __LINE__ );
07563 e.saveContextData( "Parser error message", message );
07564 e.saveContextData( "Filename", yyloc.begin.filename );
07565 e.saveContextData( "StartLine", yyloc.begin.line );
07566 e.saveContextData( "EndLine", yyloc.end.line );
07567 inDriver.setParserError( e );
07568 error( yyloc, message );
07569 YYABORT;
07570 }
07571 logicVal = simuInfo->findLogicValue( logicValName );
07572 if( !logicVal )
07573 {
07574 std::string message = constructErrorMessage(
07575 "Logic Value %s not found",
07576 logicValName.c_str() );
07577 log("%s\n", message.c_str());
07578 Error e( eMessageIdParserError,
07579 __FUNCTION__, __FILE__, __LINE__ );
07580 e.saveContextData( "Parser error message", message );
07581 e.saveContextData( "Filename", yyloc.begin.filename );
07582 e.saveContextData( "StartLine", yyloc.begin.line );
07583 e.saveContextData( "EndLine", yyloc.end.line );
07584 inDriver.setParserError( e );
07585 error( yyloc, message );
07586 YYABORT;
07587 }
07588 else
07589 {
07590 (yyval.logicValueAttributes) = ((yysemantic_stack_[(2) - (1)].logicValueAttributes)) ? (yysemantic_stack_[(2) - (1)].logicValueAttributes) : new LogicValueAttributes();
07591 LogicValueAttributes::LogicMap *logicMap
07592 = new LogicValueAttributes::LogicMap();
07593 logicMap->mLogicRef = logicValName;
07594 logicMap->mLibraryRef = libName;
07595 logicMap->mLogicMapType
07596 = LogicValueAttributes::LogicMap::eLogicMapTypeOutput;
07597 (yyval.logicValueAttributes)->addLogicMap( logicMap );
07598 }
07599 }
07600 break;
07601
07602 case 578:
07603
07604
07605 #line 5809 "Parser.yy"
07606 {
07607 EdifContextSharedPtr ctx = inDriver.getContext();
07608 boost::scoped_ptr<LogicRefData> logicRefData( (yysemantic_stack_[(2) - (2)].logicRefData) );
07609 std::string logicValName = logicRefData->mLogicName->mName;
07610 std::string libName;
07611 bool isLocalLib = ( NULL == logicRefData->mLibraryName );
07612 if( isLocalLib )
07613 {
07614 libName = ctx->getCurrentLibrary()->getName();
07615 }
07616 else
07617 {
07618 libName = logicRefData->mLibraryName->mName;
07619 }
07620 LibrarySharedPtr library
07621 = ctx->getRoot()->findLibrary( libName ) ;
07622 if( !library )
07623 {
07624 std::string message = constructErrorMessage(
07625 "Library %s not found",
07626 libName.c_str() );
07627 log("%s\n", message.c_str());
07628 Error e( eMessageIdParserError,
07629 __FUNCTION__, __FILE__, __LINE__ );
07630 e.saveContextData( "Parser error message", message );
07631 e.saveContextData( "Filename", yyloc.begin.filename );
07632 e.saveContextData( "StartLine", yyloc.begin.line );
07633 e.saveContextData( "EndLine", yyloc.end.line );
07634 inDriver.setParserError( e );
07635 error( yyloc, message );
07636 YYABORT;
07637 }
07638 LogicValueSharedPtr logicVal;
07639 SimulationInfoSharedPtr simuInfo
07640 = library->getSimulationInfo();
07641 if( !simuInfo )
07642 {
07643 std::string message = constructErrorMessage(
07644 "SimulatioInfo not found in %s library",
07645 library->getName().c_str() );
07646 log("%s\n", message.c_str());
07647 Error e( eMessageIdParserError,
07648 __FUNCTION__, __FILE__, __LINE__ );
07649 e.saveContextData( "Parser error message", message );
07650 e.saveContextData( "Filename", yyloc.begin.filename );
07651 e.saveContextData( "StartLine", yyloc.begin.line );
07652 e.saveContextData( "EndLine", yyloc.end.line );
07653 inDriver.setParserError( e );
07654 error( yyloc, message );
07655 YYABORT;
07656 }
07657 logicVal = simuInfo->findLogicValue( logicValName );
07658 if( !logicVal )
07659 {
07660 std::string message = constructErrorMessage(
07661 "Logic Value %s not found",
07662 logicValName.c_str() );
07663 log("%s\n", message.c_str());
07664 Error e( eMessageIdParserError,
07665 __FUNCTION__, __FILE__, __LINE__ );
07666 e.saveContextData( "Parser error message", message );
07667 e.saveContextData( "Filename", yyloc.begin.filename );
07668 e.saveContextData( "StartLine", yyloc.begin.line );
07669 e.saveContextData( "EndLine", yyloc.end.line );
07670 inDriver.setParserError( e );
07671 error( yyloc, message );
07672 YYABORT;
07673 }
07674 else
07675 {
07676 (yyval.logicValueAttributes) = ((yysemantic_stack_[(2) - (1)].logicValueAttributes)) ? (yysemantic_stack_[(2) - (1)].logicValueAttributes) : new LogicValueAttributes();
07677 LogicValueAttributes::LogicMap *logicMap
07678 = new LogicValueAttributes::LogicMap();
07679 logicMap->mLogicRef = logicValName;
07680 logicMap->mLibraryRef = libName;
07681 logicMap->mLogicMapType
07682 = LogicValueAttributes::LogicMap::eLogicMapTypeInput;
07683 (yyval.logicValueAttributes)->addLogicMap( logicMap );
07684 }
07685 }
07686 break;
07687
07688 case 579:
07689
07690
07691 #line 5890 "Parser.yy"
07692 {
07693 (yyval.logicValueAttributes) = ((yysemantic_stack_[(2) - (1)].logicValueAttributes)) ? (yysemantic_stack_[(2) - (1)].logicValueAttributes) : new LogicValueAttributes();
07694 (yyval.logicValueAttributes)->setIsIsolated( true );
07695 }
07696 break;
07697
07698 case 580:
07699
07700
07701 #line 5895 "Parser.yy"
07702 {
07703 (yyval.logicValueAttributes) = ((yysemantic_stack_[(2) - (1)].logicValueAttributes)) ? (yysemantic_stack_[(2) - (1)].logicValueAttributes) : new LogicValueAttributes();
07704 std::list< LogicValueSharedPtr > logicValues;
07705 boost::scoped_ptr<LogicListData> logicListData( (yysemantic_stack_[(2) - (2)].logicListData) );
07706 if( NULL != (yysemantic_stack_[(2) - (2)].logicListData) && !(yysemantic_stack_[(2) - (2)].logicListData)->mNameDataList.empty() )
07707 {
07708 for( std::list<NameData *>::iterator it
07709 = logicListData->mNameDataList.begin();
07710 it != logicListData->mNameDataList.end(); it++ )
07711 {
07712 NameData *pNameData = *it;
07713 std::string name = pNameData->mName;
07714 EdifContextSharedPtr ctx = inDriver.getContext();
07715 LogicValueSharedPtr logicVal;
07716 SimulationInfoSharedPtr simuInfo
07717 = ctx->getCurrentSimulationInfo();
07718 logicVal = simuInfo->findLogicValue( name );
07719 if( !logicVal )
07720 {
07721 std::string message = constructErrorMessage(
07722 "Logic Value %s not found",
07723 name.c_str() );
07724 log("%s\n", message.c_str());
07725 Error e( eMessageIdParserError,
07726 __FUNCTION__, __FILE__, __LINE__ );
07727 e.saveContextData( "Parser error message", message );
07728 e.saveContextData( "Filename", yyloc.begin.filename );
07729 e.saveContextData( "StartLine", yyloc.begin.line );
07730 e.saveContextData( "EndLine", yyloc.end.line );
07731 inDriver.setParserError( e );
07732 error( yyloc, message );
07733 YYABORT;
07734 }
07735 else
07736 {
07737 if( !logicValues.empty() )
07738 {
07739 std::list< LogicValueSharedPtr >::iterator logicIt
07740 = std::find( logicValues.begin(), logicValues.end(), logicVal );
07741 if( logicIt != logicValues.end() )
07742 {
07743 std::string message = constructErrorMessage(
07744 "Logic value %s already exist in resolve list",
07745 name.c_str());
07746 log("%s\n", message.c_str());
07747 Error e( eMessageIdParserError,
07748 __FUNCTION__, __FILE__, __LINE__ );
07749 e.saveContextData( "Parser error message", message );
07750 e.saveContextData( "Filename", yyloc.begin.filename );
07751 e.saveContextData( "StartLine", yyloc.begin.line );
07752 e.saveContextData( "EndLine", yyloc.end.line );
07753 inDriver.setParserError( e );
07754 error( yyloc, message );
07755 YYABORT;
07756 }
07757 else
07758 {
07759 logicValues.push_back( logicVal );
07760 }
07761 }
07762 else
07763 {
07764 logicValues.push_back( logicVal );
07765 }
07766 }
07767 }
07768 (yyval.logicValueAttributes)->setResolvedLogicValues( logicValues );
07769 }
07770 }
07771 break;
07772
07773 case 581:
07774
07775
07776 #line 5965 "Parser.yy"
07777 {
07778 (yyval.logicValueAttributes) = (yysemantic_stack_[(2) - (1)].logicValueAttributes);
07779 }
07780 break;
07781
07782 case 582:
07783
07784
07785 #line 5969 "Parser.yy"
07786 {
07787 (yyval.logicValueAttributes) = (yysemantic_stack_[(2) - (1)].logicValueAttributes);
07788 EdifContextSharedPtr ctx = inDriver.getContext();
07789 LogicValueSharedPtr logicVal = ctx->getCurrentLogicValue();
07790 logicVal->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
07791 delete (yysemantic_stack_[(2) - (2)].stringVal);
07792 }
07793 break;
07794
07795 case 583:
07796
07797
07798 #line 5977 "Parser.yy"
07799 {
07800 (yyval.logicValueAttributes) = (yysemantic_stack_[(2) - (1)].logicValueAttributes);
07801 EdifContextSharedPtr ctx = inDriver.getContext();
07802 LogicValueSharedPtr logicVal = ctx->getCurrentLogicValue();
07803 logicVal->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
07804 delete (yysemantic_stack_[(2) - (2)].stringVal);
07805 }
07806 break;
07807
07808 case 584:
07809
07810
07811 #line 5987 "Parser.yy"
07812 {
07813 LogicElementSharedPtr logicElem;
07814 EdifContextSharedPtr ctx
07815 = inDriver.getContext();
07816 try
07817 {
07818 ctx->getFactory()->create( logicElem );
07819 logicElem->setType( LogicElement::eTypeWaveForm );
07820 }
07821 catch( Error &e )
07822 {
07823 std::string message = constructErrorMessage(
07824 "Unable to create logicWaveForm" );
07825 log("%s\n", message.c_str());
07826 e.setCurrentLocation( __FUNCTION__,
07827 __FILE__, __LINE__ );
07828 e.saveContextData( "Parser error message", message );
07829 e.saveContextData( "Filename", yyloc.begin.filename );
07830 e.saveContextData( "StartLine", yyloc.begin.line );
07831 e.saveContextData( "EndLine", yyloc.end.line );
07832 inDriver.setParserError( e );
07833 error( yyloc, message );
07834 YYABORT;
07835 }
07836 if(ctx->getLogicElementDepth() == 0 )
07837 {
07838 LogicalResponseSharedPtr logicalResponse
07839 = ctx->getCurrentLogicalResponse();
07840 if( logicalResponse )
07841 {
07842 logicalResponse->setLogicWaveForm( logicElem );
07843 }
07844
07845 WaveValueSharedPtr waveValue
07846 = ctx->getCurrentWaveValue();
07847 if( waveValue )
07848 {
07849 waveValue->setLogicWaveform( logicElem );
07850 }
07851 }
07852 ctx->pushLogicElement( logicElem );
07853 ctx->incrementLogicElementDepth();
07854 }
07855 break;
07856
07857 case 585:
07858
07859
07860 #line 6030 "Parser.yy"
07861 {
07862 EdifContextSharedPtr ctx = inDriver.getContext();
07863 LogicElementSharedPtr currentLogicElem
07864 = ctx->getCurrentLogicElement();
07865 ctx->popLogicElement();
07866 LogicElementSharedPtr parentLogicElem;
07867 if(ctx->getLogicElementDepth() > 1 )
07868 {
07869 parentLogicElem = ctx->getCurrentLogicElement();
07870 }
07871 ctx->decrementLogicElementDepth();
07872 if( parentLogicElem )
07873 {
07874 parentLogicElem->setRelationType(
07875 LogicElement::eRelationTypeParent );
07876 currentLogicElem->setRelationType(
07877 LogicElement::eRelationTypeChild );
07878
07879
07880
07881
07882
07883
07884
07885
07886
07887
07888
07889
07890 parentLogicElem->addChildLogicElement( currentLogicElem );
07891 }
07892 else
07893 {
07894 ctx->pushLogicElement( currentLogicElem );
07895 }
07896 }
07897 break;
07898
07899 case 604:
07900
07901
07902 #line 6101 "Parser.yy"
07903 {
07904 (yyval.nameData) = (yysemantic_stack_[(6) - (3)].nameData);
07905 (yyval.nameData)->mIndices.push_back( (yysemantic_stack_[(6) - (4)].integerVal) );
07906 if( (yysemantic_stack_[(6) - (5)].arrayDimensions) )
07907 {
07908 (yyval.nameData)->mIndices.insert( (yyval.nameData)->mIndices.end(),
07909 (yysemantic_stack_[(6) - (5)].arrayDimensions)->begin(), (yysemantic_stack_[(6) - (5)].arrayDimensions)->end() );
07910 delete (yysemantic_stack_[(6) - (5)].arrayDimensions);
07911 }
07912 }
07913 break;
07914
07915 case 605:
07916
07917
07918 #line 6114 "Parser.yy"
07919 {
07920 (yyval.arrayDimensions) = NULL;
07921 }
07922 break;
07923
07924 case 607:
07925
07926
07927 #line 6121 "Parser.yy"
07928 {
07929 if( (yysemantic_stack_[(6) - (4)].integerVal) );
07930 delete (yysemantic_stack_[(6) - (3)].nameData);
07931 }
07932 break;
07933
07934 case 609:
07935
07936
07937 #line 6129 "Parser.yy"
07938 {
07939 delete (yysemantic_stack_[(1) - (1)].arrayDimensions);
07940 }
07941 break;
07942
07943 case 610:
07944
07945
07946 #line 6135 "Parser.yy"
07947 {
07948 if( NULL == (yysemantic_stack_[(4) - (3)].valueData) )
07949 {
07950 (yyval.valueData) = new ValueData();
07951 (yyval.valueData)->mValues.push_back( Value(
07952 Value::eValueTypeMiNoMax ) );
07953 }
07954 else
07955 {
07956 (yyval.valueData) = (yysemantic_stack_[(4) - (3)].valueData);
07957 }
07958 }
07959 break;
07960
07961 case 611:
07962
07963
07964 #line 6150 "Parser.yy"
07965 {
07966 (yyval.valueData) = NULL;
07967 }
07968 break;
07969
07970 case 612:
07971
07972
07973 #line 6154 "Parser.yy"
07974 {
07975 (yyval.valueData) = ( (yysemantic_stack_[(2) - (1)].valueData) ) ? (yysemantic_stack_[(2) - (1)].valueData) : new ValueData();
07976 (yyval.valueData)->mValues.push_back( Value(
07977 Value::eValueTypeMiNoMax,
07978 (yysemantic_stack_[(2) - (2)].valueData)->mValues[0].get<Value::MiNoMax>() ) );
07979 delete (yysemantic_stack_[(2) - (2)].valueData);
07980 }
07981 break;
07982
07983 case 613:
07984
07985
07986 #line 6162 "Parser.yy"
07987 {
07988 (yyval.valueData) = ( (yysemantic_stack_[(2) - (1)].valueData) ) ? (yysemantic_stack_[(2) - (1)].valueData) : new ValueData();
07989 (yyval.valueData)->mValues.push_back( Value(
07990 Value::eValueTypeMiNoMax,
07991 (yysemantic_stack_[(2) - (2)].valueData)->mValues[0].get<Value::MiNoMax>() ) );
07992 delete (yysemantic_stack_[(2) - (2)].valueData);
07993 }
07994 break;
07995
07996 case 614:
07997
07998
07999 #line 6170 "Parser.yy"
08000 {
08001 (yyval.valueData) = (yysemantic_stack_[(2) - (2)].valueData);
08002 if( (yysemantic_stack_[(2) - (1)].valueData) )
08003 {
08004 (yysemantic_stack_[(2) - (1)].valueData)->mValues.insert( (yysemantic_stack_[(2) - (1)].valueData)->mValues.end(),
08005 (yyval.valueData)->mValues.begin(), (yyval.valueData)->mValues.end() );
08006 (yyval.valueData)->mValues = (yysemantic_stack_[(2) - (1)].valueData)->mValues;
08007 delete (yysemantic_stack_[(2) - (1)].valueData);
08008 }
08009 }
08010 break;
08011
08012 case 615:
08013
08014
08015 #line 6183 "Parser.yy"
08016 {
08017 (yyval.valueData) = (yysemantic_stack_[(4) - (3)].valueData);
08018 }
08019 break;
08020
08021 case 616:
08022
08023
08024 #line 6189 "Parser.yy"
08025 {
08026 (yyval.valueData) = (yysemantic_stack_[(1) - (1)].valueData);
08027 }
08028 break;
08029
08030 case 617:
08031
08032
08033 #line 6193 "Parser.yy"
08034 {
08035 (yyval.valueData) = (yysemantic_stack_[(2) - (1)].valueData);
08036 }
08037 break;
08038
08039 case 618:
08040
08041
08042 #line 6199 "Parser.yy"
08043 {
08044 (yyval.valueData) = (yysemantic_stack_[(1) - (1)].valueData);
08045 }
08046 break;
08047
08048 case 619:
08049
08050
08051 #line 6203 "Parser.yy"
08052 {
08053 Value::MiNoMax val;
08054 Value::Number num( (yysemantic_stack_[(1) - (1)].pairData)->mX, (yysemantic_stack_[(1) - (1)].pairData)->mY );
08055 val.setNominal( num );
08056 (yyval.valueData) = new ValueData();
08057 (yyval.valueData)->mValues.push_back(
08058 Value( Value::eValueTypeMiNoMax, val ) );
08059 delete (yysemantic_stack_[(1) - (1)].pairData);
08060 }
08061 break;
08062
08063 case 620:
08064
08065
08066 #line 6215 "Parser.yy"
08067 {
08068 Value::MiNoMax val;
08069 if( (yysemantic_stack_[(6) - (3)].pairData) )
08070 {
08071 Value::Number num( (yysemantic_stack_[(6) - (3)].pairData)->mX, (yysemantic_stack_[(6) - (3)].pairData)->mY );
08072 val.setMin( num );
08073 }
08074 if( (yysemantic_stack_[(6) - (4)].pairData) )
08075 {
08076 Value::Number num( (yysemantic_stack_[(6) - (4)].pairData)->mX, (yysemantic_stack_[(6) - (4)].pairData)->mY );
08077 val.setNominal( num );
08078 }
08079 if( (yysemantic_stack_[(6) - (5)].pairData) )
08080 {
08081 Value::Number num( (yysemantic_stack_[(6) - (5)].pairData)->mX, (yysemantic_stack_[(6) - (5)].pairData)->mY );
08082 val.setMax( num );
08083 }
08084 (yyval.valueData) = new ValueData();
08085 (yyval.valueData)->mValues.push_back(
08086 Value( Value::eValueTypeMiNoMax, val ) );
08087 delete (yysemantic_stack_[(6) - (3)].pairData);
08088 delete (yysemantic_stack_[(6) - (4)].pairData);
08089 delete (yysemantic_stack_[(6) - (5)].pairData);
08090 }
08091 break;
08092
08093 case 621:
08094
08095
08096 #line 6242 "Parser.yy"
08097 {
08098 (yyval.pairData) = (yysemantic_stack_[(1) - (1)].pairData);
08099 }
08100 break;
08101
08102 case 622:
08103
08104
08105 #line 6246 "Parser.yy"
08106 {
08107 (yyval.pairData) = NULL;
08108 }
08109 break;
08110
08111 case 623:
08112
08113
08114 #line 6250 "Parser.yy"
08115 {
08116 (yyval.pairData) = NULL;
08117 }
08118 break;
08119
08120 case 627:
08121
08122
08123 #line 6263 "Parser.yy"
08124 {
08125 InterfaceJoinedInfoSharedPtr joinedInfo;
08126 EdifContextSharedPtr ctx
08127 = inDriver.getContext();
08128 try
08129 {
08130 ctx->getFactory()->create( joinedInfo );
08131 joinedInfo->setJoinedType(
08132 InterfaceJoinedInfo::eJoinedTypeMust );
08133 }
08134 catch( Error &e )
08135 {
08136 std::string message = constructErrorMessage(
08137 "Unable to create must joined info" );
08138 log("%s\n", message.c_str());
08139 e.setCurrentLocation( __FUNCTION__,
08140 __FILE__, __LINE__ );
08141 e.saveContextData( "Parser error message", message );
08142 e.saveContextData( "Filename", yyloc.begin.filename );
08143 e.saveContextData( "StartLine", yyloc.begin.line );
08144 e.saveContextData( "EndLine", yyloc.end.line );
08145 inDriver.setParserError( e );
08146 error( yyloc, message );
08147 YYABORT;
08148 }
08149 if(ctx->getInterfaceJoinedInfoDepth() == 0 )
08150 {
08151 ctx->getCurrentView()->addInterfaceJoinedInfo( joinedInfo );
08152 }
08153 ctx->pushInterfaceJoinedInfo( joinedInfo );
08154 ctx->incrementInterfaceJoinedInfoDepth();
08155 }
08156 break;
08157
08158 case 628:
08159
08160
08161 #line 6295 "Parser.yy"
08162 {
08163 EdifContextSharedPtr ctx = inDriver.getContext();
08164 InterfaceJoinedInfoSharedPtr currentJoinedInfo
08165 = ctx->getCurrentInterfaceJoinedInfo();
08166 ctx->popInterfaceJoinedInfo();
08167 InterfaceJoinedInfoSharedPtr parentJoinedInfo;
08168 if(ctx->getInterfaceJoinedInfoDepth() > 1 )
08169 {
08170 parentJoinedInfo = ctx->getCurrentInterfaceJoinedInfo();
08171 }
08172 ctx->decrementInterfaceJoinedInfoDepth();
08173 if( parentJoinedInfo )
08174 {
08175 parentJoinedInfo->setRelationType(
08176 InterfaceJoinedInfo::eRelationTypeParent );
08177 currentJoinedInfo->setRelationType(
08178 InterfaceJoinedInfo::eRelationTypeChild );
08179
08180 size_t parentJoinedInfoSize = parentJoinedInfo->getSize();
08181 size_t currentJoinedInfoSize = currentJoinedInfo->getSize();
08182
08183 log("Parent joined info Size :: %d\n",
08184 parentJoinedInfoSize );
08185 log("Current joined info Size :: %d\n",
08186 currentJoinedInfoSize );
08187
08188
08189
08190
08191 std::vector< InterfaceJoinedInfoSharedPtr > outJoinedInfos;
08192 parentJoinedInfo->getChildren( outJoinedInfos );
08193
08194 std::list< PortSharedPtr > outPorts;
08195 parentJoinedInfo->getPorts( outPorts );
08196
08197 std::list< PortListSharedPtr > outPortLists;
08198 parentJoinedInfo->getPortLists( outPortLists );
08199
08200 if( parentJoinedInfoSize != 0 )
08201 {
08202 if( parentJoinedInfoSize
08203 == currentJoinedInfoSize )
08204 {
08205 parentJoinedInfo->addChildJoinedInfo(
08206 currentJoinedInfo );
08207 }
08208 else
08209 {
08210 std::string message = constructErrorMessage(
08211 "Child joined info can't be added, port size mismatch %d with %d",
08212 parentJoinedInfoSize,
08213 currentJoinedInfoSize);
08214 log("%s\n", message.c_str());
08215 Error e( eMessageIdParserError,
08216 __FUNCTION__, __FILE__, __LINE__ );
08217 e.saveContextData( "Parser error message", message );
08218 e.saveContextData( "Filename", yyloc.begin.filename );
08219 e.saveContextData( "StartLine", yyloc.begin.line );
08220 e.saveContextData( "EndLine", yyloc.end.line );
08221 inDriver.setParserError( e );
08222 error( yyloc, message );
08223 YYABORT;
08224 }
08225 }
08226 else
08227 {
08228 parentJoinedInfo->addChildJoinedInfo(
08229 currentJoinedInfo );
08230 }
08231 }
08232 else
08233 {
08234 ctx->pushInterfaceJoinedInfo( currentJoinedInfo );
08235 }
08236 }
08237 break;
08238
08239 case 630:
08240
08241
08242 #line 6374 "Parser.yy"
08243 {
08244 boost::scoped_ptr<PortRefData> portData( (yysemantic_stack_[(2) - (2)].portRefData) );
08245 NameData *portNameData = portData->mPortName;
08246 std::string name = portNameData->mName;
08247 EdifContextSharedPtr ctx
08248 = inDriver.getContext();
08249 ViewSharedPtr view = ctx->getCurrentView();
08250
08251 PortRefData *currPortRef = (yysemantic_stack_[(2) - (2)].portRefData);
08252 PortRefData *nextPortRef = portData->mParentPort;
08253 std::vector< std::string > nestedNames;
08254 nestedNames.push_back(currPortRef->mPortName->mName);
08255 while( nextPortRef )
08256 {
08257 currPortRef = nextPortRef;
08258 nestedNames.push_back( nextPortRef->mPortName->mName );
08259 nextPortRef = currPortRef->mParentPort;
08260 }
08261 bool isPort = ( NULL == currPortRef->mInstanceName );
08262 std::string topName = *(nestedNames.rbegin());
08263 if( isPort )
08264 {
08265 PortSharedPtr port = view->findPort( topName );
08266 if( !port )
08267 {
08268 std::string message = constructErrorMessage(
08269 "No port %s found in view %s\n",
08270 name.c_str(),
08271 view->getName().c_str());
08272 log("%s\n", message.c_str());
08273 Error e( eMessageIdParserError,
08274 __FUNCTION__, __FILE__, __LINE__ );
08275 e.saveContextData( "Parser error message", message );
08276 e.saveContextData( "Filename", yyloc.begin.filename );
08277 e.saveContextData( "StartLine", yyloc.begin.line );
08278 e.saveContextData( "EndLine", yyloc.end.line );
08279 inDriver.setParserError( e );
08280 error( yyloc, message );
08281 YYABORT;
08282 }
08283
08284 InterfaceJoinedInfoSharedPtr currentJoinedInfo
08285 = ctx->getCurrentInterfaceJoinedInfo();
08286 try
08287 {
08288 connectibleFinder( nestedNames, port );
08289 if( !portData->mPortName->mIndices.empty() )
08290 {
08291 port = port->get( portData->mPortName->mIndices );
08292 }
08293
08294 std::list< PortSharedPtr > outPorts;
08295 currentJoinedInfo->getPorts( outPorts );
08296
08297 if( !outPorts.empty() )
08298 {
08299 PortSharedPtr firstPort = outPorts.front();
08300 std::list< PortSharedPtr >::iterator it
08301 = std::find( outPorts.begin(), outPorts.end(),
08302 port);
08303 if( it != outPorts.end() )
08304 {
08305 std::string message = constructErrorMessage(
08306 "Port %s already exist in mustJoin info",
08307 port->getName().c_str() );
08308 log("%s\n", message.c_str());
08309 Error e( eMessageIdParserError,
08310 __FUNCTION__, __FILE__, __LINE__ );
08311 e.saveContextData( "Parser error message", message );
08312 e.saveContextData( "Filename", yyloc.begin.filename );
08313 e.saveContextData( "StartLine", yyloc.begin.line );
08314 e.saveContextData( "EndLine", yyloc.end.line );
08315 inDriver.setParserError( e );
08316 error( yyloc, message );
08317 YYABORT;
08318 }
08319 else
08320 {
08321 if( firstPort->getSize() == port->getSize() )
08322 {
08323 currentJoinedInfo->addPort( port );
08324 }
08325 else
08326 {
08327 std::string message = constructErrorMessage(
08328 "Port %s can't be added, port size mismatch %d with %d",
08329 name.c_str(),
08330 firstPort->getSize(),
08331 port->getSize());
08332 log("%s\n", message.c_str());
08333 Error e( eMessageIdParserError,
08334 __FUNCTION__, __FILE__, __LINE__ );
08335 e.saveContextData( "Parser error message", message );
08336 e.saveContextData( "Filename", yyloc.begin.filename );
08337 e.saveContextData( "StartLine", yyloc.begin.line );
08338 e.saveContextData( "EndLine", yyloc.end.line );
08339 inDriver.setParserError( e );
08340 error( yyloc, message );
08341 YYABORT;
08342 }
08343 }
08344 }
08345 else
08346 {
08347 currentJoinedInfo->addPort( port );
08348 }
08349 }
08350 catch( Error &e )
08351 {
08352 e.setCurrentLocation(
08353 __FUNCTION__, __FILE__, __LINE__ );
08354 throw;
08355 }
08356 }
08357 else
08358 {
08359 }
08360 }
08361 break;
08362
08363 case 631:
08364
08365
08366 #line 6493 "Parser.yy"
08367 {
08368 if( NULL != (yysemantic_stack_[(2) - (2)].portListData) && !(yysemantic_stack_[(2) - (2)].portListData)->mPortRefs.empty() )
08369 {
08370 boost::scoped_ptr<PortListData> portListData( (yysemantic_stack_[(2) - (2)].portListData) );
08371 std::string message;
08372
08373 EdifContextSharedPtr ctx = inDriver.getContext();
08374 PortListSharedPtr portList;
08375 ctx->getFactory()->create( portList );
08376
08377 InterfaceJoinedInfoSharedPtr currentJoinedInfo
08378 = ctx->getCurrentInterfaceJoinedInfo();
08379
08380 for( std::vector<PortRefData *>::iterator it
08381 = portListData->mPortRefs.begin();
08382 it != portListData->mPortRefs.end(); ++it )
08383 {
08384 PortRefData *portData = *it;
08385 std::vector< std::string > nestedNames;
08386 PortRefData *currPortRef = *it;
08387 PortRefData *nextPortRef = portData->mParentPort;
08388 nestedNames.push_back(currPortRef->mPortName->mName);
08389 while( nextPortRef )
08390 {
08391 currPortRef = nextPortRef;
08392 nestedNames.push_back( nextPortRef->mPortName->mName );
08393 nextPortRef = currPortRef->mParentPort;
08394 }
08395 bool isPort = ( NULL == currPortRef->mInstanceName );
08396 NameData *portNameData = currPortRef->mPortName;
08397 std::string topName = *(nestedNames.rbegin());
08398 ViewSharedPtr view = ctx->getCurrentView();
08399 if( isPort )
08400 {
08401 PortSharedPtr port = view->findPort( topName );
08402 if( !port )
08403 {
08404 std::string message = constructErrorMessage(
08405 "No port %s found in view %s\n",
08406 portNameData->mName.c_str(),
08407 view->getName().c_str());
08408 log("%s\n", message.c_str());
08409 Error e( eMessageIdParserError,
08410 __FUNCTION__, __FILE__, __LINE__ );
08411 e.saveContextData( "Parser error message", message );
08412 e.saveContextData( "Filename", yyloc.begin.filename );
08413 e.saveContextData( "StartLine", yyloc.begin.line );
08414 e.saveContextData( "EndLine", yyloc.end.line );
08415 inDriver.setParserError( e );
08416 error( yyloc, message );
08417 YYABORT;
08418 }
08419
08420 try
08421 {
08422 connectibleFinder( nestedNames, port );
08423 if( !portData->mPortName->mIndices.empty() )
08424 {
08425 port = port->get( portData->mPortName->mIndices );
08426 }
08427 portList->addChildPort( port );
08428 }
08429 catch( Error &e )
08430 {
08431 std::string message = constructErrorMessage(
08432 "Unable to connect port : %s",
08433 port->getName().c_str());
08434 log("%s\n", message.c_str());
08435 e.setCurrentLocation( __FUNCTION__,
08436 __FILE__, __LINE__ );
08437 e.saveContextData( "Parser error message", message );
08438 e.saveContextData( "Filename", yyloc.begin.filename );
08439 e.saveContextData( "StartLine", yyloc.begin.line );
08440 e.saveContextData( "EndLine", yyloc.end.line );
08441 inDriver.setParserError( e );
08442 error( yyloc, message );
08443 YYABORT;
08444 }
08445 }
08446 else
08447 {
08448 }
08449 }
08450 if( currentJoinedInfo->getSize() == portList->getSize() )
08451 {
08452 currentJoinedInfo->addPortList( portList );
08453 }
08454 else
08455 {
08456 std::string message = constructErrorMessage(
08457 "Port size mismatch %d with %d",
08458 currentJoinedInfo->getSize(),
08459 portList->getSize());
08460 log("%s\n", message.c_str());
08461 Error e( eMessageIdParserError,
08462 __FUNCTION__, __FILE__, __LINE__ );
08463 e.saveContextData( "Parser error message", message );
08464 e.saveContextData( "Filename", yyloc.begin.filename );
08465 e.saveContextData( "StartLine", yyloc.begin.line );
08466 e.saveContextData( "EndLine", yyloc.end.line );
08467 inDriver.setParserError( e );
08468 error( yyloc, message );
08469 YYABORT;
08470 }
08471 }
08472 }
08473 break;
08474
08475 case 634:
08476
08477
08478 #line 6604 "Parser.yy"
08479 {
08480 (yyval.nameData) = (yysemantic_stack_[(4) - (3)].nameData);
08481 }
08482 break;
08483
08484 case 635:
08485
08486
08487 #line 6610 "Parser.yy"
08488 {
08489 (yyval.nameData) = new NameData();
08490 (yyval.nameData)->mName = *(yysemantic_stack_[(1) - (1)].stringVal);
08491 delete (yysemantic_stack_[(1) - (1)].stringVal);
08492 }
08493 break;
08494
08495 case 637:
08496
08497
08498 #line 6619 "Parser.yy"
08499 {
08500 delete (yysemantic_stack_[(1) - (1)].stringVal);
08501 }
08502 break;
08503
08504 case 638:
08505
08506
08507 #line 6623 "Parser.yy"
08508 {
08509 delete (yysemantic_stack_[(1) - (1)].nameData);
08510 }
08511 break;
08512
08513 case 639:
08514
08515
08516 #line 6627 "Parser.yy"
08517 {
08518 delete (yysemantic_stack_[(1) - (1)].nameData);
08519 }
08520 break;
08521
08522 case 640:
08523
08524
08525 #line 6633 "Parser.yy"
08526 {
08527 (yyval.nameData) = new NameData();
08528 (yyval.nameData)->mName = *(yysemantic_stack_[(1) - (1)].stringVal);
08529 delete (yysemantic_stack_[(1) - (1)].stringVal);
08530 }
08531 break;
08532
08533 case 641:
08534
08535
08536 #line 6639 "Parser.yy"
08537 {
08538 (yyval.nameData) = (yysemantic_stack_[(1) - (1)].nameData);
08539 }
08540 break;
08541
08542 case 642:
08543
08544
08545 #line 6643 "Parser.yy"
08546 {
08547 (yyval.nameData) = (yysemantic_stack_[(1) - (1)].nameData);
08548 }
08549 break;
08550
08551 case 643:
08552
08553
08554 #line 6649 "Parser.yy"
08555 {
08556 (yyval.nameData) = new NameData();
08557 (yyval.nameData)->mName = *(yysemantic_stack_[(1) - (1)].stringVal);
08558 delete (yysemantic_stack_[(1) - (1)].stringVal);
08559 }
08560 break;
08561
08562 case 644:
08563
08564
08565 #line 6655 "Parser.yy"
08566 {
08567 (yyval.nameData) = (yysemantic_stack_[(1) - (1)].nameData);
08568 }
08569 break;
08570
08571 case 645:
08572
08573
08574 #line 6661 "Parser.yy"
08575 {
08576 (yyval.nameData) = new NameData();
08577 (yyval.nameData)->mName = *(yysemantic_stack_[(1) - (1)].stringVal);
08578 delete (yysemantic_stack_[(1) - (1)].stringVal);
08579 }
08580 break;
08581
08582 case 646:
08583
08584
08585 #line 6667 "Parser.yy"
08586 {
08587 (yyval.nameData) = (yysemantic_stack_[(1) - (1)].nameData);
08588 }
08589 break;
08590
08591 case 647:
08592
08593
08594 #line 6673 "Parser.yy"
08595 {
08596 boost::scoped_ptr<NameData> pNameData( (yysemantic_stack_[(3) - (3)].nameData) );
08597 std::string name = pNameData->mName;
08598 EdifContextSharedPtr ctx = inDriver.getContext();
08599 NetSharedPtr net;
08600 ViewSharedPtr view = ctx->getCurrentView();
08601 NetBundleSharedPtr bundle
08602 = ctx->getCurrentNetBundleContext();
08603 bool bExistingNetFound = false;
08604 if( bundle )
08605 {
08606 typedef std::vector<NetSharedPtr > NBList;
08607 NBList children;
08608 bundle->getChildren( children );
08609 for( NBList::iterator it = children.begin();
08610 it != children.end(); it++ )
08611 {
08612 if( (*it)->getName() == name )
08613 {
08614 bExistingNetFound = true;
08615 }
08616 }
08617 }
08618 else
08619 {
08620 net = view->findNet( name );
08621 bExistingNetFound = false;
08622 }
08623 if( bExistingNetFound )
08624 {
08625 std::string message = constructErrorMessage(
08626 "View %s already contains a net of name %s\n",
08627 view->getName().c_str(),
08628 net->getName().c_str() );
08629 log("%s\n", message.c_str());
08630 Error e( eMessageIdParserError,
08631 __FUNCTION__, __FILE__, __LINE__ );
08632 e.saveContextData( "Parser error message", message );
08633 e.saveContextData( "Filename", yyloc.begin.filename );
08634 e.saveContextData( "StartLine", yyloc.begin.line );
08635 e.saveContextData( "EndLine", yyloc.end.line );
08636 inDriver.setParserError( e );
08637 error( yyloc, message );
08638 YYABORT;
08639 }
08640 else
08641 {
08642 if( !pNameData->mIndices.empty() )
08643 {
08644 try
08645 {
08646 VectorNetSharedPtr vectorNet;
08647 ctx->getFactory()->create( vectorNet );
08648 vectorNet->setName( name );
08649 vectorNet->constructChildren(
08650 ctx->getFactory(),
08651 pNameData->mIndices );
08652 net = vectorNet;
08653 }
08654 catch( Error &e )
08655 {
08656 std::string message = constructErrorMessage(
08657 "Unable to create net : %s",
08658 net->getName().c_str());
08659 log("%s\n", message.c_str());
08660 e.setCurrentLocation( __FUNCTION__,
08661 __FILE__, __LINE__ );
08662 e.saveContextData( "Parser error message", message );
08663 e.saveContextData( "Filename", yyloc.begin.filename );
08664 e.saveContextData( "StartLine", yyloc.begin.line );
08665 e.saveContextData( "EndLine", yyloc.end.line );
08666 inDriver.setParserError( e );
08667 error( yyloc, message );
08668 YYABORT;
08669 }
08670 }
08671 else
08672 {
08673 try
08674 {
08675 ScalarNetSharedPtr scalarNet;
08676 ctx->getFactory()->create( scalarNet );
08677 net = scalarNet;
08678 net->setName( name );
08679 }
08680 catch( Error &e )
08681 {
08682 std::string message = constructErrorMessage(
08683 "Unable to create net : %s",
08684 net->getName().c_str());
08685 log("%s\n", message.c_str());
08686 e.setCurrentLocation( __FUNCTION__,
08687 __FILE__, __LINE__ );
08688 e.saveContextData( "Parser error message", message );
08689 e.saveContextData( "Filename", yyloc.begin.filename );
08690 e.saveContextData( "StartLine", yyloc.begin.line );
08691 e.saveContextData( "EndLine", yyloc.end.line );
08692 inDriver.setParserError( e );
08693 error( yyloc, message );
08694 YYABORT;
08695 }
08696 }
08697 if( !pNameData->mOriginalName.empty() )
08698 {
08699 net->setOriginalName(
08700 pNameData->mOriginalName );
08701 }
08702 #if 0
08703 if( bundle )
08704 {
08705 net->setParentCollection( bundle );
08706 bundle->addChild( net );
08707 log("Added net to existing bundle\n");
08708 }
08709 else
08710 {
08711 ctx->pushCurrentNet( net );
08712 NetSharedPtr currentNet = ctx->getCurrentNet();
08713 ctx->popCurrentNet();
08714
08715 NetSharedPtr parentNet = ctx->getCurrentNet();
08716 if( parentNet )
08717 {
08718 parentNet->addSubnet( currentNet );
08719 printf("Current net %s ",
08720 net->getName().c_str() );
08721 }
08722 else
08723 {
08724 view->addNet( net );
08725 net->setParent( view );
08726 }
08727 }
08728 #endif
08729 if( pNameData->mIndices.empty() )
08730 {
08731 log("Created scalar net %s ",
08732 net->getName().c_str() );
08733 }
08734 else
08735 {
08736 log("Created vector net %s with dimensions ",
08737 net->getName().c_str() );
08738 for( std::vector<size_t>::const_iterator it
08739 = pNameData->mIndices.begin();
08740 it != pNameData->mIndices.end(); ++it )
08741 {
08742 log("%lu ", *it );
08743 }
08744 }
08745 log("\n");
08746 }
08747 ctx->pushCurrentNet( net );
08748 ctx->pushPropertyContainer( net );
08749 }
08750 break;
08751
08752 case 648:
08753
08754
08755 #line 6828 "Parser.yy"
08756 {
08757 EdifContextSharedPtr ctx = inDriver.getContext();
08758 ViewSharedPtr view = ctx->getCurrentView();
08759 NetSharedPtr currentNet = ctx->getCurrentNet();
08760 if( (yysemantic_stack_[(7) - (6)].netAttributes) )
08761 {
08762 NetAttributesSharedPtr attrib( (yysemantic_stack_[(7) - (6)].netAttributes) );
08763 currentNet->setAttributes( attrib );
08764 }
08765 ctx->popCurrentNet();
08766 NetSharedPtr parentNet = ctx->getCurrentNet();
08767
08768 NetBundleSharedPtr bundle
08769 = ctx->getCurrentNetBundleContext();
08770 if( bundle )
08771 {
08772 if( parentNet )
08773 {
08774 parentNet->addSubnet( currentNet );
08775 }
08776 else
08777 {
08778 currentNet->setParentCollection( bundle );
08779 bundle->addChild( currentNet );
08780 }
08781 log("Added net to existing bundle\n");
08782 }
08783 else
08784 {
08785 if( parentNet )
08786 {
08787 parentNet->addSubnet( currentNet );
08788 }
08789 else
08790 {
08791 view->addNet( currentNet );
08792 currentNet->setParent( view );
08793 }
08794 }
08795 inDriver.getContext()->popPropertyContainer();
08796 }
08797 break;
08798
08799 case 649:
08800
08801
08802 #line 6872 "Parser.yy"
08803 {
08804 (yyval.netAttributes) = NULL;
08805 }
08806 break;
08807
08808 case 650:
08809
08810
08811 #line 6876 "Parser.yy"
08812 {
08813 (yyval.netAttributes) = ((yysemantic_stack_[(2) - (1)].netAttributes))?(yysemantic_stack_[(2) - (1)].netAttributes):new NetAttributes();
08814 (yyval.netAttributes)->setCriticality( (yysemantic_stack_[(2) - (2)].integerVal) );
08815 }
08816 break;
08817
08818 case 651:
08819
08820
08821 #line 6881 "Parser.yy"
08822 {
08823 boost::scoped_ptr<NetDelay> netDelay( (yysemantic_stack_[(2) - (2)].netDelay) );
08824 (yyval.netAttributes) = ((yysemantic_stack_[(2) - (1)].netAttributes))?(yysemantic_stack_[(2) - (1)].netAttributes):new NetAttributes();
08825 (yyval.netAttributes)->setNetDelay( *netDelay );
08826 }
08827 break;
08828
08829 case 652:
08830
08831
08832 #line 6887 "Parser.yy"
08833 {
08834 (yyval.netAttributes) = (yysemantic_stack_[(2) - (1)].netAttributes);
08835 }
08836 break;
08837
08838 case 653:
08839
08840
08841 #line 6891 "Parser.yy"
08842 {
08843 (yyval.netAttributes) = (yysemantic_stack_[(2) - (1)].netAttributes);
08844 }
08845 break;
08846
08847 case 654:
08848
08849
08850 #line 6895 "Parser.yy"
08851 {
08852 (yyval.netAttributes) = (yysemantic_stack_[(2) - (1)].netAttributes);
08853 }
08854 break;
08855
08856 case 655:
08857
08858
08859 #line 6899 "Parser.yy"
08860 {
08861 (yyval.netAttributes) = (yysemantic_stack_[(2) - (1)].netAttributes);
08862 }
08863 break;
08864
08865 case 656:
08866
08867
08868 #line 6903 "Parser.yy"
08869 {
08870 (yyval.netAttributes) = (yysemantic_stack_[(2) - (1)].netAttributes);
08871 }
08872 break;
08873
08874 case 657:
08875
08876
08877 #line 6907 "Parser.yy"
08878 {
08879 (yyval.netAttributes) = (yysemantic_stack_[(2) - (1)].netAttributes);
08880 EdifContextSharedPtr ctx = inDriver.getContext();
08881 NetSharedPtr net = ctx->getCurrentNet();
08882 net->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
08883 delete (yysemantic_stack_[(2) - (2)].stringVal);
08884 }
08885 break;
08886
08887 case 658:
08888
08889
08890 #line 6915 "Parser.yy"
08891 {
08892 (yyval.netAttributes) = (yysemantic_stack_[(2) - (1)].netAttributes);
08893 EdifContextSharedPtr ctx = inDriver.getContext();
08894 NetSharedPtr net = ctx->getCurrentNet();
08895 net->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
08896 delete (yysemantic_stack_[(2) - (2)].stringVal);
08897 }
08898 break;
08899
08900 case 661:
08901
08902
08903 #line 6929 "Parser.yy"
08904 {
08905 if( (yysemantic_stack_[(2) - (2)].netDelay) );
08906 }
08907 break;
08908
08909 case 662:
08910
08911
08912 #line 6933 "Parser.yy"
08913 {
08914 if( (yysemantic_stack_[(2) - (2)].integerVal) );
08915 }
08916 break;
08917
08918 case 664:
08919
08920
08921 #line 6938 "Parser.yy"
08922 {
08923 delete (yysemantic_stack_[(2) - (2)].stringVal);
08924 }
08925 break;
08926
08927 case 665:
08928
08929
08930 #line 6944 "Parser.yy"
08931 {
08932 boost::scoped_ptr<NameData> pNameData( (yysemantic_stack_[(3) - (3)].nameData) );
08933 std::string name = pNameData->mName;
08934 EdifContextSharedPtr ctx
08935 = inDriver.getContext();
08936 NetSharedPtr net;
08937 ViewSharedPtr view = ctx->getCurrentView();
08938 NetBundleSharedPtr bundle
08939 = ctx->getCurrentNetBundleContext();
08940 if( bundle )
08941 {
08942 typedef std::vector<NetSharedPtr > NBList;
08943 NBList children;
08944 bundle->getChildren( children );
08945 for( NBList::iterator it = children.begin();
08946 it != children.end(); it++ )
08947 {
08948 if( (*it)->getName() == name )
08949 {
08950 net = *it;
08951 }
08952 }
08953 }
08954 else
08955 {
08956 net = view->findNet( name );
08957 }
08958 if( net )
08959 {
08960 log("Found existing net\n");
08961 std::string message = constructErrorMessage(
08962 "View %s already contains a net of name %s\n",
08963 view->getName().c_str(),
08964 net->getName().c_str() );
08965 Error e( eMessageIdParserError,
08966 __FUNCTION__, __FILE__, __LINE__ );
08967 e.saveContextData( "Parser error message", message );
08968 e.saveContextData( "Filename", yyloc.begin.filename );
08969 e.saveContextData( "StartLine", yyloc.begin.line );
08970 e.saveContextData( "EndLine", yyloc.end.line );
08971 inDriver.setParserError( e );
08972 error( yyloc, message );
08973 YYABORT;
08974 }
08975 else
08976 {
08977 try
08978 {
08979 NetBundleSharedPtr netBundle;
08980 ctx->getFactory()->create( netBundle );
08981 ctx->pushNetBundleContext( netBundle );
08982 net = netBundle;
08983 }
08984 catch( Error &e )
08985 {
08986 std::string message = constructErrorMessage(
08987 "Unable to create net bundle : %s",
08988 net->getName().c_str());
08989 log("%s\n", message.c_str());
08990 e.setCurrentLocation( __FUNCTION__,
08991 __FILE__, __LINE__ );
08992 e.saveContextData( "Parser error message", message );
08993 e.saveContextData( "Filename", yyloc.begin.filename );
08994 e.saveContextData( "StartLine", yyloc.begin.line );
08995 e.saveContextData( "EndLine", yyloc.end.line );
08996 inDriver.setParserError( e );
08997 error( yyloc, message );
08998 YYABORT;
08999 }
09000 net->setName( name );
09001 net->setParent( view );
09002 if( !pNameData->mOriginalName.empty() )
09003 {
09004 net->setOriginalName( pNameData->mOriginalName );
09005 }
09006 if( bundle )
09007 {
09008 net->setParentCollection( bundle );
09009 bundle->addChild( net );
09010 log("Added net to existing bundle\n");
09011 }
09012 else
09013 {
09014 view->addNet( net );
09015 }
09016 log( "Created net bundle %s\n",
09017 net->getName().c_str() );
09018 }
09019
09020 }
09021 break;
09022
09023 case 666:
09024
09025
09026 #line 7034 "Parser.yy"
09027 {
09028 EdifContextSharedPtr ctx
09029 = inDriver.getContext();
09030
09031 ctx->popNetBundleContext();
09032 }
09033 break;
09034
09035 case 671:
09036
09037
09038 #line 7047 "Parser.yy"
09039 {
09040 EdifContextSharedPtr ctx = inDriver.getContext();
09041 NetBundleSharedPtr bundle
09042 = ctx->getCurrentNetBundleContext();
09043 bundle->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
09044 delete (yysemantic_stack_[(2) - (2)].stringVal);
09045 }
09046 break;
09047
09048 case 672:
09049
09050
09051 #line 7055 "Parser.yy"
09052 {
09053 EdifContextSharedPtr ctx = inDriver.getContext();
09054 NetBundleSharedPtr bundle
09055 = ctx->getCurrentNetBundleContext();
09056 bundle->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
09057 delete (yysemantic_stack_[(2) - (2)].stringVal);
09058 }
09059 break;
09060
09061 case 673:
09062
09063
09064 #line 7065 "Parser.yy"
09065 {
09066 (yyval.netDelay) = (yysemantic_stack_[(5) - (4)].netDelay);
09067 (yyval.netDelay)->setDerivation(
09068 static_cast<Derivation>( (yysemantic_stack_[(5) - (3)].integerVal) ) );
09069 }
09070 break;
09071
09072 case 674:
09073
09074
09075 #line 7074 "Parser.yy"
09076 {
09077 (yyval.netDelay) = (yysemantic_stack_[(1) - (1)].netDelay);
09078 }
09079 break;
09080
09081 case 675:
09082
09083
09084 #line 7078 "Parser.yy"
09085 {
09086 (yyval.netDelay) = ( (yysemantic_stack_[(2) - (1)].netDelay)) ? (yysemantic_stack_[(2) - (1)].netDelay) : new NetDelay();
09087 EdifContextSharedPtr ctx
09088 = inDriver.getContext();
09089 LogicElementSharedPtr logicElem
09090 = ctx->getCurrentLogicElement();
09091 if( logicElem )
09092 {
09093 (yyval.netDelay)->setTransition( logicElem );
09094 }
09095 }
09096 break;
09097
09098 case 676:
09099
09100
09101 #line 7090 "Parser.yy"
09102 {
09103 (yyval.netDelay) = ( (yysemantic_stack_[(2) - (1)].netDelay)) ? (yysemantic_stack_[(2) - (1)].netDelay) : new NetDelay();
09104 EdifContextSharedPtr ctx
09105 = inDriver.getContext();
09106 LogicElementSharedPtr logicElem
09107 = ctx->getCurrentLogicElement();
09108 if( logicElem )
09109 {
09110 (yyval.netDelay)->setTransition( logicElem );
09111 }
09112 }
09113 break;
09114
09115 case 677:
09116
09117
09118 #line 7104 "Parser.yy"
09119 {
09120 (yyval.netDelay) = (yysemantic_stack_[(4) - (3)].netDelay);
09121 }
09122 break;
09123
09124 case 678:
09125
09126
09127 #line 7110 "Parser.yy"
09128 {
09129 boost::scoped_ptr<ValueData> data( (yysemantic_stack_[(1) - (1)].valueData) );
09130 (yyval.netDelay) = new NetDelay();
09131 (yyval.netDelay)->setDelay( data->mValues[0].get<Value::MiNoMax>() );
09132 }
09133 break;
09134
09135 case 679:
09136
09137
09138 #line 7116 "Parser.yy"
09139 {
09140 boost::scoped_ptr<ValueData> data( (yysemantic_stack_[(1) - (1)].valueData) );
09141 (yyval.netDelay) = new NetDelay();
09142 (yyval.netDelay)->setDelay( data->mValues[0].get<Value::MiNoMax>() );
09143 }
09144 break;
09145
09146 case 684:
09147
09148
09149 #line 7132 "Parser.yy"
09150 {
09151 boost::scoped_ptr<NameData> netData( (yysemantic_stack_[(1) - (1)].nameData) );
09152 std::string name = netData->mName;
09153 EdifContextSharedPtr ctx
09154 = inDriver.getContext();
09155 ViewSharedPtr view = ctx->getCurrentView();
09156 NetSharedPtr net = view->findNet( name );
09157 if( !net )
09158 {
09159 std::string message = constructErrorMessage(
09160 "No Net %s found in view %s\n",
09161 name.c_str(),
09162 view->getName().c_str());
09163 log("%s\n", message.c_str());
09164 Error e( eMessageIdParserError,
09165 __FUNCTION__, __FILE__, __LINE__ );
09166 e.saveContextData( "Parser error message", message );
09167 e.saveContextData( "Filename", yyloc.begin.filename );
09168 e.saveContextData( "StartLine", yyloc.begin.line );
09169 e.saveContextData( "EndLine", yyloc.end.line );
09170 inDriver.setParserError( e );
09171 error( yyloc, message );
09172 YYABORT;
09173 }
09174 else
09175 {
09176 EventSharedPtr event
09177 = ctx->getCurrentEvent();
09178 event->addNet( net );
09179 }
09180 }
09181 break;
09182
09183 case 693:
09184
09185
09186 #line 7180 "Parser.yy"
09187 {
09188 delete (yysemantic_stack_[(2) - (2)].stringVal);
09189 }
09190 break;
09191
09192 case 694:
09193
09194
09195 #line 7184 "Parser.yy"
09196 {
09197 delete (yysemantic_stack_[(2) - (2)].stringVal);
09198 }
09199 break;
09200
09201 case 706:
09202
09203
09204 #line 7211 "Parser.yy"
09205 {
09206 NetRefData *nData = (yysemantic_stack_[(5) - (4)].netRefData);
09207 if( nData )
09208 {
09209 if( nData->mNetName )
09210 {
09211 (yyval.netRefData) = new NetRefData();
09212 (yyval.netRefData)->mParentNet = nData;
09213 (yyval.netRefData)->mView = nData->mView;
09214 nData->mView = NULL;
09215 }
09216 else
09217 {
09218 if( nData->mInstanceName
09219 || nData->mView )
09220 {
09221 (yyval.netRefData) = nData;
09222 }
09223 }
09224 }
09225 else
09226 {
09227 (yyval.netRefData) = new NetRefData();
09228 }
09229 (yyval.netRefData)->mNetName = (yysemantic_stack_[(5) - (3)].nameData);
09230 }
09231 break;
09232
09233 case 707:
09234
09235
09236 #line 7240 "Parser.yy"
09237 {
09238 (yyval.netRefData) = NULL;
09239 }
09240 break;
09241
09242 case 708:
09243
09244
09245 #line 7244 "Parser.yy"
09246 {
09247 (yyval.netRefData) = (yysemantic_stack_[(1) - (1)].netRefData);
09248 }
09249 break;
09250
09251 case 709:
09252
09253
09254 #line 7248 "Parser.yy"
09255 {
09256 (yyval.netRefData) = new NetRefData();
09257 (yyval.netRefData)->mInstanceName = (yysemantic_stack_[(1) - (1)].instanceRef)->mName;
09258 (yyval.netRefData)->mView = (yysemantic_stack_[(1) - (1)].instanceRef)->mView;
09259 delete (yysemantic_stack_[(1) - (1)].instanceRef);
09260 }
09261 break;
09262
09263 case 710:
09264
09265
09266 #line 7255 "Parser.yy"
09267 {
09268 (yyval.netRefData) = new NetRefData();
09269 (yyval.netRefData)->mView = (yysemantic_stack_[(1) - (1)].viewRefData);
09270 }
09271 break;
09272
09273 case 712:
09274
09275
09276 #line 7265 "Parser.yy"
09277 {
09278 PermutableSharedPtr permutable;
09279 EdifContextSharedPtr ctx
09280 = inDriver.getContext();
09281 try
09282 {
09283 ctx->getFactory()->create( permutable );
09284 permutable->setIsNonPermutable( true );
09285 }
09286 catch( Error &e )
09287 {
09288 std::string message = constructErrorMessage(
09289 "Unable to create Permutable" );
09290 log("%s\n", message.c_str());
09291 e.setCurrentLocation( __FUNCTION__,
09292 __FILE__, __LINE__ );
09293 e.saveContextData( "Parser error message", message );
09294 e.saveContextData( "Filename", yyloc.begin.filename );
09295 e.saveContextData( "StartLine", yyloc.begin.line );
09296 e.saveContextData( "EndLine", yyloc.end.line );
09297 inDriver.setParserError( e );
09298 error( yyloc, message );
09299 YYABORT;
09300 }
09301 ctx->pushPermutable( permutable );
09302 ctx->incrementPermutableDepth();
09303 }
09304 break;
09305
09306 case 713:
09307
09308
09309 #line 7292 "Parser.yy"
09310 {
09311 EdifContextSharedPtr ctx = inDriver.getContext();
09312 PermutableSharedPtr currentPermutable
09313 = ctx->getCurrentPermutable();
09314 ctx->popPermutable();
09315 PermutableSharedPtr parentPermutable;
09316 if(ctx->getPermutableDepth() > 1 )
09317 {
09318 parentPermutable = ctx->getCurrentPermutable();
09319 }
09320 ctx->decrementPermutableDepth();
09321 if( parentPermutable )
09322 {
09323 parentPermutable->setPermutableType(
09324 Permutable::ePermutableParent );
09325 currentPermutable->setPermutableType(
09326 Permutable::ePermutableChild );
09327
09328 size_t parentPermutableSize = parentPermutable->getSize();
09329 size_t currentPermutableSize = currentPermutable->getSize();
09330
09331 log("Parent permutable Size :: %d\n",
09332 parentPermutableSize );
09333 log("Current permutable Size :: %d\n",
09334 currentPermutableSize );
09335 std::vector< PermutableSharedPtr > outPermutables;
09336 parentPermutable->getChildren( outPermutables );
09337 std::vector< PortSharedPtr > outPorts;
09338 parentPermutable->getPorts( outPorts );
09339
09340 if( !outPermutables.empty() || !outPorts.empty() )
09341 {
09342 if( parentPermutableSize
09343 == currentPermutableSize )
09344 {
09345 parentPermutable->addChildPermutable(
09346 currentPermutable );
09347 }
09348 else
09349 {
09350 std::string message = constructErrorMessage(
09351 "Child permutable can't be added, port size mismatch %d with %d",
09352 parentPermutableSize,
09353 currentPermutableSize);
09354 log("%s\n", message.c_str());
09355 Error e( eMessageIdParserError,
09356 __FUNCTION__, __FILE__, __LINE__ );
09357 e.saveContextData( "Parser error message", message );
09358 e.saveContextData( "Filename", yyloc.begin.filename );
09359 e.saveContextData( "StartLine", yyloc.begin.line );
09360 e.saveContextData( "EndLine", yyloc.end.line );
09361 inDriver.setParserError( e );
09362 error( yyloc, message );
09363 YYABORT;
09364 }
09365 }
09366 else
09367 {
09368 parentPermutable->addChildPermutable(
09369 currentPermutable );
09370 }
09371 }
09372 else
09373 {
09374 ctx->pushPermutable( currentPermutable );
09375 }
09376 }
09377 break;
09378
09379 case 715:
09380
09381
09382 #line 7363 "Parser.yy"
09383 {
09384 boost::scoped_ptr<PortRefData> portData( (yysemantic_stack_[(2) - (2)].portRefData) );
09385 NameData *portNameData = portData->mPortName;
09386 std::string name = portNameData->mName;
09387 EdifContextSharedPtr ctx
09388 = inDriver.getContext();
09389 ViewSharedPtr view = ctx->getCurrentView();
09390 if( view && ( View::eTypeGraphic == view->getType() ||
09391 View::eTypeDocument == view->getType() ) )
09392 {
09393 std::string message = constructErrorMessage(
09394 "Permutable can not be used in this view type");
09395 log("%s\n", message.c_str());
09396 Error e( eMessageIdErrorNullPointer,
09397 __FUNCTION__, __FILE__, __LINE__ );
09398 throw e;
09399 }
09400 PortRefData *currPortRef = (yysemantic_stack_[(2) - (2)].portRefData);
09401 PortRefData *nextPortRef = portData->mParentPort;
09402 std::vector< std::string > nestedNames;
09403 nestedNames.push_back(currPortRef->mPortName->mName);
09404 while( nextPortRef )
09405 {
09406 currPortRef = nextPortRef;
09407 nestedNames.push_back( nextPortRef->mPortName->mName );
09408 nextPortRef = currPortRef->mParentPort;
09409 }
09410 bool isPort = ( NULL == currPortRef->mInstanceName );
09411 std::string topName = *(nestedNames.rbegin());
09412 if( isPort )
09413 {
09414 PortSharedPtr port = view->findPort( topName );
09415 if( !port )
09416 {
09417 std::string message = constructErrorMessage(
09418 "No port %s found in view %s\n",
09419 name.c_str(),
09420 view->getName().c_str());
09421 log("%s\n", message.c_str());
09422 Error e( eMessageIdParserError,
09423 __FUNCTION__, __FILE__, __LINE__ );
09424 e.saveContextData( "Parser error message", message );
09425 e.saveContextData( "Filename", yyloc.begin.filename );
09426 e.saveContextData( "StartLine", yyloc.begin.line );
09427 e.saveContextData( "EndLine", yyloc.end.line );
09428 inDriver.setParserError( e );
09429 error( yyloc, message );
09430 YYABORT;
09431 }
09432 PermutableSharedPtr currentPermutable
09433 = ctx->getCurrentPermutable();
09434 try
09435 {
09436 connectibleFinder( nestedNames, port );
09437 if( !portData->mPortName->mIndices.empty() )
09438 {
09439 port = port->get( portData->mPortName->mIndices );
09440 }
09441
09442 std::vector< PortSharedPtr > outPorts;
09443 currentPermutable->getPorts( outPorts );
09444
09445 if( !outPorts.empty() )
09446 {
09447 PortSharedPtr firstPort = outPorts.front();
09448 std::vector< PortSharedPtr >::iterator it
09449 = std::find( outPorts.begin(), outPorts.end(),
09450 port);
09451 if( it != outPorts.end() )
09452 {
09453 std::string message = constructErrorMessage(
09454 "Port %s already exist in permutable",
09455 port->getName().c_str() );
09456 log("%s\n", message.c_str());
09457 Error e( eMessageIdParserError,
09458 __FUNCTION__, __FILE__, __LINE__ );
09459 e.saveContextData( "Parser error message", message );
09460 e.saveContextData( "Filename", yyloc.begin.filename );
09461 e.saveContextData( "StartLine", yyloc.begin.line );
09462 e.saveContextData( "EndLine", yyloc.end.line );
09463 inDriver.setParserError( e );
09464 error( yyloc, message );
09465 YYABORT;
09466 }
09467 else
09468 {
09469 if( firstPort->getSize() == port->getSize() )
09470 {
09471 currentPermutable->addPort( port );
09472 }
09473 else
09474 {
09475 std::string message = constructErrorMessage(
09476 "Port %s can't be added, port size mismatch %d with %d",
09477 name.c_str(),
09478 firstPort->getSize(),
09479 port->getSize());
09480 log("%s\n", message.c_str());
09481 Error e( eMessageIdParserError,
09482 __FUNCTION__, __FILE__, __LINE__ );
09483 e.saveContextData( "Parser error message", message );
09484 e.saveContextData( "Filename", yyloc.begin.filename );
09485 e.saveContextData( "StartLine", yyloc.begin.line );
09486 e.saveContextData( "EndLine", yyloc.end.line );
09487 inDriver.setParserError( e );
09488 error( yyloc, message );
09489 YYABORT;
09490 }
09491 }
09492 }
09493 else
09494 {
09495 currentPermutable->addPort( port );
09496 }
09497 }
09498 catch( Error &e )
09499 {
09500 e.setCurrentLocation(
09501 __FUNCTION__, __FILE__, __LINE__ );
09502 throw;
09503 }
09504 }
09505 }
09506 break;
09507
09508 case 719:
09509
09510
09511 #line 7494 "Parser.yy"
09512 {
09513 delete (yysemantic_stack_[(2) - (2)].stringVal);
09514 }
09515 break;
09516
09517 case 720:
09518
09519
09520 #line 7498 "Parser.yy"
09521 {
09522 delete (yysemantic_stack_[(2) - (2)].stringVal);
09523 }
09524 break;
09525
09526 case 724:
09527
09528
09529 #line 7509 "Parser.yy"
09530 {
09531 delete (yysemantic_stack_[(2) - (2)].stringVal);
09532 }
09533 break;
09534
09535 case 725:
09536
09537
09538 #line 7513 "Parser.yy"
09539 {
09540 delete (yysemantic_stack_[(2) - (2)].stringVal);
09541 }
09542 break;
09543
09544 case 726:
09545
09546
09547 #line 7519 "Parser.yy"
09548 {
09549 if( NULL == (yysemantic_stack_[(4) - (3)].valueData) )
09550 {
09551 (yyval.valueData) = new ValueData();
09552 (yyval.valueData)->mValues.push_back( Value(
09553 Value::eValueTypeNumber ) );
09554 }
09555 else
09556 {
09557 (yyval.valueData) = (yysemantic_stack_[(4) - (3)].valueData);
09558 }
09559 }
09560 break;
09561
09562 case 727:
09563
09564
09565 #line 7534 "Parser.yy"
09566 {
09567 (yyval.valueData) = NULL;
09568 }
09569 break;
09570
09571 case 728:
09572
09573
09574 #line 7538 "Parser.yy"
09575 {
09576 (yyval.valueData) = ( (yysemantic_stack_[(2) - (1)].valueData) ) ? (yysemantic_stack_[(2) - (1)].valueData) : new ValueData();
09577 (yyval.valueData)->mValues.push_back( Value( Value::eValueTypeNumber,
09578 Value::Number( (yysemantic_stack_[(2) - (2)].pairData)->mX, (yysemantic_stack_[(2) - (2)].pairData)->mY ) ) );
09579 delete (yysemantic_stack_[(2) - (2)].pairData);
09580 }
09581 break;
09582
09583 case 729:
09584
09585
09586 #line 7545 "Parser.yy"
09587 {
09588 (yyval.valueData) = ( (yysemantic_stack_[(2) - (1)].valueData) ) ? (yysemantic_stack_[(2) - (1)].valueData) : new ValueData();
09589 (yyval.valueData)->mValues.push_back( Value( Value::eValueTypeNumber,
09590 Value::Number( (yysemantic_stack_[(2) - (2)].pairData)->mX, (yysemantic_stack_[(2) - (2)].pairData)->mY ) ) );
09591 delete (yysemantic_stack_[(2) - (2)].pairData);
09592 }
09593 break;
09594
09595 case 730:
09596
09597
09598 #line 7552 "Parser.yy"
09599 {
09600 (yyval.valueData) = (yysemantic_stack_[(2) - (2)].valueData);
09601 if( (yysemantic_stack_[(2) - (1)].valueData) )
09602 {
09603 (yysemantic_stack_[(2) - (1)].valueData)->mValues.insert( (yysemantic_stack_[(2) - (1)].valueData)->mValues.end(),
09604 (yyval.valueData)->mValues.begin(), (yyval.valueData)->mValues.end() );
09605 (yyval.valueData)->mValues = (yysemantic_stack_[(2) - (1)].valueData)->mValues;
09606 delete (yysemantic_stack_[(2) - (1)].valueData);
09607 }
09608 }
09609 break;
09610
09611 case 731:
09612
09613
09614 #line 7565 "Parser.yy"
09615 {
09616 (yyval.pairData) = (yysemantic_stack_[(4) - (3)].pairData);
09617 }
09618 break;
09619
09620 case 732:
09621
09622
09623 #line 7571 "Parser.yy"
09624 {
09625 (yyval.pairData) = (yysemantic_stack_[(1) - (1)].pairData);
09626 }
09627 break;
09628
09629 case 733:
09630
09631
09632 #line 7575 "Parser.yy"
09633 {
09634 (yyval.pairData) = (yysemantic_stack_[(2) - (1)].pairData);
09635 }
09636 break;
09637
09638 case 738:
09639
09640
09641 #line 7587 "Parser.yy"
09642 {
09643 delete (yysemantic_stack_[(2) - (2)].stringVal);
09644 }
09645 break;
09646
09647 case 743:
09648
09649
09650 #line 7599 "Parser.yy"
09651 {
09652 delete (yysemantic_stack_[(2) - (2)].stringVal);
09653 }
09654 break;
09655
09656 case 744:
09657
09658
09659 #line 7603 "Parser.yy"
09660 {
09661 delete (yysemantic_stack_[(2) - (2)].stringVal);
09662 }
09663 break;
09664
09665 case 745:
09666
09667
09668 #line 7609 "Parser.yy"
09669 {
09670 (yyval.pairData) = (yysemantic_stack_[(5) - (4)].pairData);
09671 }
09672 break;
09673
09674 case 758:
09675
09676
09677 #line 7635 "Parser.yy"
09678 {
09679 delete (yysemantic_stack_[(4) - (3)].pairData);
09680 }
09681 break;
09682
09683 case 762:
09684
09685
09686 #line 7646 "Parser.yy"
09687 {
09688 delete (yysemantic_stack_[(2) - (2)].stringVal);
09689 }
09690 break;
09691
09692 case 763:
09693
09694
09695 #line 7650 "Parser.yy"
09696 {
09697 delete (yysemantic_stack_[(2) - (2)].stringVal);
09698 }
09699 break;
09700
09701 case 767:
09702
09703
09704 #line 7661 "Parser.yy"
09705 {
09706 delete (yysemantic_stack_[(2) - (2)].stringVal);
09707 }
09708 break;
09709
09710 case 768:
09711
09712
09713 #line 7665 "Parser.yy"
09714 {
09715 delete (yysemantic_stack_[(2) - (2)].stringVal);
09716 }
09717 break;
09718
09719 case 769:
09720
09721
09722 #line 7671 "Parser.yy"
09723 {
09724 if( (yysemantic_stack_[(6) - (3)].integerVal) );
09725 }
09726 break;
09727
09728 case 772:
09729
09730
09731 #line 7681 "Parser.yy"
09732 {
09733 (yyval.stringVal) = (yysemantic_stack_[(4) - (3)].stringVal);
09734 }
09735 break;
09736
09737 case 774:
09738
09739
09740 #line 7690 "Parser.yy"
09741 {
09742 delete (yysemantic_stack_[(1) - (1)].nameData);
09743 }
09744 break;
09745
09746 case 782:
09747
09748
09749 #line 7701 "Parser.yy"
09750 {
09751 delete (yysemantic_stack_[(2) - (2)].stringVal);
09752 }
09753 break;
09754
09755 case 783:
09756
09757
09758 #line 7705 "Parser.yy"
09759 {
09760 delete (yysemantic_stack_[(2) - (2)].stringVal);
09761 }
09762 break;
09763
09764 case 788:
09765
09766
09767 #line 7721 "Parser.yy"
09768 {
09769 EdifContextSharedPtr ctx
09770 = inDriver.getContext();
09771 ObjectFactorySharedPtr factory
09772 = ctx->getFactory();
09773 boost::scoped_ptr<NameData> nameData( (yysemantic_stack_[(6) - (3)].nameData) );
09774 boost::scoped_ptr<ValueData> valueData( (yysemantic_stack_[(6) - (4)].valueData) );
09775 ParameterSharedPtr param;
09776 if( (yysemantic_stack_[(6) - (3)].nameData)->mIndices.empty() )
09777 {
09778 try
09779 {
09780 SingleParameterSharedPtr single;
09781 factory->create( single );
09782 param = single;
09783 param->setName( nameData->mName );
09784 if( !nameData->mOriginalName.empty() )
09785 {
09786 param->setOriginalName( nameData->mOriginalName );
09787 }
09788 param->setValue( valueData->mValues[0] );
09789 }
09790 catch( Error &e )
09791 {
09792 e.setCurrentLocation(
09793 __FUNCTION__, __FILE__, __LINE__ );
09794 throw;
09795 }
09796 }
09797 else
09798 {
09799 size_t arraySize = accumulate(
09800 nameData->mIndices.begin(),
09801 nameData->mIndices.end(), 1,
09802 std::multiplies<size_t>());
09803 if( valueData->mValues.size() != arraySize )
09804 {
09805 std::string message = constructErrorMessage(
09806 "Size mismatch %d with %d", valueData->mValues.size(),
09807 nameData->mIndices.size() );
09808 log("%s\n", message.c_str());
09809 Error e( eMessageIdParserError,
09810 __FUNCTION__, __FILE__, __LINE__ );
09811 e.saveContextData( "Parser error message", message );
09812 e.saveContextData( "Filename", yyloc.begin.filename );
09813 e.saveContextData( "StartLine", yyloc.begin.line );
09814 e.saveContextData( "EndLine", yyloc.end.line );
09815 inDriver.setParserError( e );
09816 error( yyloc, message );
09817 YYABORT;
09818 }
09819 try
09820 {
09821 ParameterArraySharedPtr array;
09822 factory->create( array );
09823 array->setName( nameData->mName );
09824 if( !nameData->mOriginalName.empty() )
09825 {
09826 array->setOriginalName( nameData->mOriginalName );
09827 }
09828 array->constructChildren( factory,
09829 (yysemantic_stack_[(6) - (3)].nameData)->mIndices );
09830 param = array;
09831 std::vector< ParameterSharedPtr > children;
09832 param->getChildren( children );
09833 std::vector< ParameterSharedPtr >::iterator it = children.begin();
09834 std::vector< ParameterSharedPtr >::iterator end = children.end();
09835 size_t i = 0;
09836 for(; it != end; ++it, i++ )
09837 {
09838 (*it)->setValue( valueData->mValues[i] );
09839 }
09840 }
09841 catch( Error &e )
09842 {
09843 e.setCurrentLocation(
09844 __FUNCTION__, __FILE__, __LINE__ );
09845 throw;
09846 }
09847 }
09848 param->setUnit( static_cast<Unit>( (yysemantic_stack_[(6) - (5)].integerVal) ) );
09849 ViewSharedPtr view = ctx->getCurrentView();
09850 ParameterContext context
09851 = view->getParameterContext();
09852 view->getParameters()->set(
09853 context, nameData->mName, param );
09854 log("New param %s created for context %lu\n",
09855 nameData->mName.c_str(), context );
09856 }
09857 break;
09858
09859 case 789:
09860
09861
09862 #line 7813 "Parser.yy"
09863 {
09864 (yyval.integerVal) = 0;
09865 }
09866 break;
09867
09868 case 791:
09869
09870
09871 #line 7820 "Parser.yy"
09872 {
09873 (yyval.paramAssignInfo) = new ParamAssignInfo();
09874 (yyval.paramAssignInfo)->mNameData = (yysemantic_stack_[(5) - (3)].nameData);
09875 (yyval.paramAssignInfo)->mValueData = (yysemantic_stack_[(5) - (4)].valueData);
09876 }
09877 break;
09878
09879 case 795:
09880
09881
09882 #line 7835 "Parser.yy"
09883 {
09884 PathDelaySharedPtr pathDelay;
09885 EdifContextSharedPtr ctx
09886 = inDriver.getContext();
09887 try
09888 {
09889 ctx->getFactory()->create( pathDelay );
09890 }
09891 catch( Error &e )
09892 {
09893 std::string message = constructErrorMessage(
09894 "Unable to create pathDelay" );
09895 log("%s\n", message.c_str());
09896 e.setCurrentLocation( __FUNCTION__,
09897 __FILE__, __LINE__ );
09898 e.saveContextData( "Parser error message", message );
09899 e.saveContextData( "Filename", yyloc.begin.filename );
09900 e.saveContextData( "StartLine", yyloc.begin.line );
09901 e.saveContextData( "EndLine", yyloc.end.line );
09902 inDriver.setParserError( e );
09903 error( yyloc, message );
09904 YYABORT;
09905 }
09906 ctx->setCurrentPathDelay( pathDelay );
09907 TimingSharedPtr timing = ctx->getCurrentTiming();
09908 timing->addPathDelay( pathDelay );
09909 }
09910 break;
09911
09912 case 796:
09913
09914
09915 #line 7862 "Parser.yy"
09916 {
09917 EdifContextSharedPtr ctx = inDriver.getContext();
09918 ctx->setCurrentPathDelay( PathDelaySharedPtr() );
09919 }
09920 break;
09921
09922 case 798:
09923
09924
09925 #line 7870 "Parser.yy"
09926 {
09927 EdifContextSharedPtr ctx = inDriver.getContext();
09928 PathDelaySharedPtr pathDelay
09929 = ctx->getCurrentPathDelay();
09930 EventSharedPtr event
09931 = ctx->getCurrentEvent();
09932 event->setType( Event::eTypeEvent );
09933 pathDelay->addEvent( event );
09934 ctx->setCurrentEvent( EventSharedPtr() );
09935 }
09936 break;
09937
09938 case 799:
09939
09940
09941 #line 7883 "Parser.yy"
09942 {
09943 boost::scoped_ptr<ValueData> data( (yysemantic_stack_[(4) - (3)].valueData) );
09944 EdifContextSharedPtr ctx = inDriver.getContext();
09945 PathDelaySharedPtr pathDelay
09946 = ctx->getCurrentPathDelay();
09947 pathDelay->setDelay( data->mValues[0].get<Value::MiNoMax>() );
09948 }
09949 break;
09950
09951 case 802:
09952
09953
09954 #line 7897 "Parser.yy"
09955 {
09956 if( (yysemantic_stack_[(4) - (3)].integerVal) );
09957 }
09958 break;
09959
09960 case 803:
09961
09962
09963 #line 7903 "Parser.yy"
09964 {
09965 PermutableSharedPtr permutable;
09966 EdifContextSharedPtr ctx
09967 = inDriver.getContext();
09968 try
09969 {
09970 ctx->getFactory()->create( permutable );
09971 permutable->setIsNonPermutable( false );
09972 }
09973 catch( Error &e )
09974 {
09975 std::string message = constructErrorMessage(
09976 "Unable to create Permutable" );
09977 log("%s\n", message.c_str());
09978 e.setCurrentLocation( __FUNCTION__,
09979 __FILE__, __LINE__ );
09980 e.saveContextData( "Parser error message", message );
09981 e.saveContextData( "Filename", yyloc.begin.filename );
09982 e.saveContextData( "StartLine", yyloc.begin.line );
09983 e.saveContextData( "EndLine", yyloc.end.line );
09984 inDriver.setParserError( e );
09985 error( yyloc, message );
09986 YYABORT;
09987 }
09988 if(ctx->getPermutableDepth() == 0 )
09989 {
09990 ctx->getCurrentView()->addPermutable( permutable );
09991 }
09992 ctx->pushPermutable( permutable );
09993 ctx->incrementPermutableDepth();
09994 }
09995 break;
09996
09997 case 804:
09998
09999
10000 #line 7934 "Parser.yy"
10001 {
10002 EdifContextSharedPtr ctx = inDriver.getContext();
10003 PermutableSharedPtr currentPermutable
10004 = ctx->getCurrentPermutable();
10005 ctx->popPermutable();
10006 PermutableSharedPtr parentPermutable;
10007 if(ctx->getPermutableDepth() > 1 )
10008 {
10009 parentPermutable = ctx->getCurrentPermutable();
10010 }
10011 ctx->decrementPermutableDepth();
10012 if( parentPermutable )
10013 {
10014 parentPermutable->setPermutableType(
10015 Permutable::ePermutableParent );
10016 currentPermutable->setPermutableType(
10017 Permutable::ePermutableChild );
10018
10019 size_t parentPermutableSize = parentPermutable->getSize();
10020 size_t currentPermutableSize = currentPermutable->getSize();
10021
10022 log("Parent permutable Size :: %d\n",
10023 parentPermutableSize );
10024 log("Current permutable Size :: %d\n",
10025 currentPermutableSize );
10026 std::vector< PermutableSharedPtr > outPermutables;
10027 parentPermutable->getChildren( outPermutables );
10028 std::vector< PortSharedPtr > outPorts;
10029 parentPermutable->getPorts( outPorts );
10030
10031 if( !outPermutables.empty() || !outPorts.empty() )
10032 {
10033 if( parentPermutableSize
10034 == currentPermutableSize )
10035 {
10036 parentPermutable->addChildPermutable(
10037 currentPermutable );
10038 }
10039 else
10040 {
10041 std::string message = constructErrorMessage(
10042 "Child permutable can't be added, port size mismatch %d with %d",
10043 parentPermutableSize,
10044 currentPermutableSize);
10045 log("%s\n", message.c_str());
10046 Error e( eMessageIdParserError,
10047 __FUNCTION__, __FILE__, __LINE__ );
10048 e.saveContextData( "Parser error message", message );
10049 e.saveContextData( "Filename", yyloc.begin.filename );
10050 e.saveContextData( "StartLine", yyloc.begin.line );
10051 e.saveContextData( "EndLine", yyloc.end.line );
10052 inDriver.setParserError( e );
10053 error( yyloc, message );
10054 YYABORT;
10055 }
10056 }
10057 else
10058 {
10059 parentPermutable->addChildPermutable(
10060 currentPermutable );
10061 }
10062 }
10063 else
10064 {
10065 ctx->pushPermutable( currentPermutable );
10066 }
10067 }
10068 break;
10069
10070 case 806:
10071
10072
10073 #line 8005 "Parser.yy"
10074 {
10075 boost::scoped_ptr<PortRefData> portData( (yysemantic_stack_[(2) - (2)].portRefData) );
10076 NameData *portNameData = portData->mPortName;
10077 std::string name = portNameData->mName;
10078 EdifContextSharedPtr ctx
10079 = inDriver.getContext();
10080 ViewSharedPtr view = ctx->getCurrentView();
10081 if( view && ( View::eTypeGraphic == view->getType() ||
10082 View::eTypeDocument == view->getType() ) )
10083 {
10084 std::string message = constructErrorMessage(
10085 "Permutable can not be used in this view type");
10086 log("%s\n", message.c_str());
10087 Error e( eMessageIdErrorNullPointer,
10088 __FUNCTION__, __FILE__, __LINE__ );
10089 throw e;
10090 }
10091 PortRefData *currPortRef = (yysemantic_stack_[(2) - (2)].portRefData);
10092 PortRefData *nextPortRef = portData->mParentPort;
10093 std::vector< std::string > nestedNames;
10094 nestedNames.push_back(currPortRef->mPortName->mName);
10095 while( nextPortRef )
10096 {
10097 currPortRef = nextPortRef;
10098 nestedNames.push_back( nextPortRef->mPortName->mName );
10099 nextPortRef = currPortRef->mParentPort;
10100 }
10101 bool isPort = ( NULL == currPortRef->mInstanceName );
10102 std::string topName = *(nestedNames.rbegin());
10103 if( isPort )
10104 {
10105 PortSharedPtr port = view->findPort( topName );
10106 if( !port )
10107 {
10108 std::string message = constructErrorMessage(
10109 "No port %s found in view %s\n",
10110 name.c_str(),
10111 view->getName().c_str());
10112 log("%s\n", message.c_str());
10113 Error e( eMessageIdParserError,
10114 __FUNCTION__, __FILE__, __LINE__ );
10115 e.saveContextData( "Parser error message", message );
10116 e.saveContextData( "Filename", yyloc.begin.filename );
10117 e.saveContextData( "StartLine", yyloc.begin.line );
10118 e.saveContextData( "EndLine", yyloc.end.line );
10119 inDriver.setParserError( e );
10120 error( yyloc, message );
10121 YYABORT;
10122 }
10123 PermutableSharedPtr currentPermutable
10124 = ctx->getCurrentPermutable();
10125 try
10126 {
10127 connectibleFinder( nestedNames, port );
10128 if( !portData->mPortName->mIndices.empty() )
10129 {
10130 port = port->get( portData->mPortName->mIndices );
10131 }
10132
10133 std::vector< PortSharedPtr > outPorts;
10134 currentPermutable->getPorts( outPorts );
10135
10136 if( !outPorts.empty() )
10137 {
10138 PortSharedPtr firstPort = outPorts.front();
10139 std::vector< PortSharedPtr >::iterator it
10140 = std::find( outPorts.begin(), outPorts.end(),
10141 port);
10142 if( it != outPorts.end() )
10143 {
10144 std::string message = constructErrorMessage(
10145 "Port %s already exist in permutable",
10146 port->getName().c_str() );
10147 log("%s\n", message.c_str());
10148 Error e( eMessageIdParserError,
10149 __FUNCTION__, __FILE__, __LINE__ );
10150 e.saveContextData( "Parser error message", message );
10151 e.saveContextData( "Filename", yyloc.begin.filename );
10152 e.saveContextData( "StartLine", yyloc.begin.line );
10153 e.saveContextData( "EndLine", yyloc.end.line );
10154 inDriver.setParserError( e );
10155 error( yyloc, message );
10156 YYABORT;
10157 }
10158 else
10159 {
10160 if( firstPort->getSize() == port->getSize() )
10161 {
10162 currentPermutable->addPort( port );
10163 }
10164 else
10165 {
10166 std::string message = constructErrorMessage(
10167 "Port %s can't be added, port size mismatch %d with %d",
10168 name.c_str(),
10169 firstPort->getSize(),
10170 port->getSize());
10171 log("%s\n", message.c_str());
10172 Error e( eMessageIdParserError,
10173 __FUNCTION__, __FILE__, __LINE__ );
10174 e.saveContextData( "Parser error message", message );
10175 e.saveContextData( "Filename", yyloc.begin.filename );
10176 e.saveContextData( "StartLine", yyloc.begin.line );
10177 e.saveContextData( "EndLine", yyloc.end.line );
10178 inDriver.setParserError( e );
10179 error( yyloc, message );
10180 YYABORT;
10181 }
10182 }
10183 }
10184 else
10185 {
10186 currentPermutable->addPort( port );
10187 }
10188 }
10189 catch( Error &e )
10190 {
10191 e.setCurrentLocation(
10192 __FUNCTION__, __FILE__, __LINE__ );
10193 throw;
10194 }
10195 }
10196 }
10197 break;
10198
10199 case 812:
10200
10201
10202 #line 8140 "Parser.yy"
10203 {
10204 if( NULL == (yysemantic_stack_[(4) - (3)].valueData) )
10205 {
10206 (yyval.valueData) = new ValueData();
10207 (yyval.valueData)->mValues.push_back( Value(
10208 Value::eValueTypePoint ) );
10209 }
10210 else
10211 {
10212 (yyval.valueData) = (yysemantic_stack_[(4) - (3)].valueData);
10213 }
10214 }
10215 break;
10216
10217 case 813:
10218
10219
10220 #line 8155 "Parser.yy"
10221 {
10222 (yyval.valueData) = NULL;
10223 }
10224 break;
10225
10226 case 814:
10227
10228
10229 #line 8159 "Parser.yy"
10230 {
10231 (yyval.valueData) = ( (yysemantic_stack_[(2) - (1)].valueData) ) ? (yysemantic_stack_[(2) - (1)].valueData) : new ValueData();
10232 (yyval.valueData)->mValues.push_back( Value(
10233 Value::eValueTypePoint,
10234 Value::Point( (yysemantic_stack_[(2) - (2)].pairData)->mX, (yysemantic_stack_[(2) - (2)].pairData)->mY ) ) );
10235 delete (yysemantic_stack_[(2) - (2)].pairData);
10236 }
10237 break;
10238
10239 case 815:
10240
10241
10242 #line 8167 "Parser.yy"
10243 {
10244 (yyval.valueData) = ( (yysemantic_stack_[(2) - (1)].valueData) ) ? (yysemantic_stack_[(2) - (1)].valueData) : new ValueData();
10245 (yyval.valueData)->mValues.push_back( Value(
10246 Value::eValueTypePoint,
10247 Value::Point( (yysemantic_stack_[(2) - (2)].pairData)->mX, (yysemantic_stack_[(2) - (2)].pairData)->mY ) ) );
10248 delete (yysemantic_stack_[(2) - (2)].pairData);
10249 }
10250 break;
10251
10252 case 816:
10253
10254
10255 #line 8175 "Parser.yy"
10256 {
10257 (yyval.valueData) = (yysemantic_stack_[(2) - (2)].valueData);
10258 if( (yysemantic_stack_[(2) - (1)].valueData) )
10259 {
10260 (yysemantic_stack_[(2) - (1)].valueData)->mValues.insert( (yysemantic_stack_[(2) - (1)].valueData)->mValues.end(),
10261 (yyval.valueData)->mValues.begin(), (yyval.valueData)->mValues.end() );
10262 (yyval.valueData)->mValues = (yysemantic_stack_[(2) - (1)].valueData)->mValues;
10263 delete (yysemantic_stack_[(2) - (1)].valueData);
10264 }
10265 }
10266 break;
10267
10268 case 817:
10269
10270
10271 #line 8188 "Parser.yy"
10272 {
10273 (yyval.pairData) = (yysemantic_stack_[(4) - (3)].pairData);
10274 }
10275 break;
10276
10277 case 818:
10278
10279
10280 #line 8194 "Parser.yy"
10281 {
10282 (yyval.pairData) = (yysemantic_stack_[(1) - (1)].pairData);
10283 }
10284 break;
10285
10286 case 819:
10287
10288
10289 #line 8198 "Parser.yy"
10290 {
10291 (yyval.pairData) = (yysemantic_stack_[(2) - (1)].pairData);
10292 }
10293 break;
10294
10295 case 822:
10296
10297
10298 #line 8208 "Parser.yy"
10299 {
10300 delete (yysemantic_stack_[(2) - (2)].pairData);
10301 }
10302 break;
10303
10304 case 823:
10305
10306
10307 #line 8214 "Parser.yy"
10308 {
10309 (yyval.pairData) = new PairData( (yysemantic_stack_[(5) - (3)].integerVal), (yysemantic_stack_[(5) - (4)].integerVal) );
10310 }
10311 break;
10312
10313 case 827:
10314
10315
10316 #line 8227 "Parser.yy"
10317 {
10318 boost::scoped_ptr<NameData> pNameData((yysemantic_stack_[(3) - (3)].nameData));
10319 std::string name = pNameData->mName;
10320 EdifContextSharedPtr ctx
10321 = inDriver.getContext();
10322 PortSharedPtr port;
10323 ViewSharedPtr view = ctx->getCurrentView();
10324 PortBundleSharedPtr bundle
10325 = ctx->getCurrentPortBundleContext();
10326 bool bExistingPortFound = false;
10327 if( bundle )
10328 {
10329 typedef std::vector<PortSharedPtr > PBList;
10330 PBList children;
10331 bundle->getChildren( children );
10332 for( PBList::iterator it = children.begin();
10333 it != children.end(); it++ )
10334 {
10335 if( (*it)->getName() == name )
10336 {
10337 bExistingPortFound = true;
10338 }
10339 }
10340 }
10341 else
10342 {
10343 port = view->findPort( name );
10344 bExistingPortFound = port;
10345 }
10346 if( bExistingPortFound )
10347 {
10348 if( !ctx->getIsViewBeingLinked() )
10349 {
10350 log("Existing port %s already found..Ignoring\n",
10351 port->getName().c_str());
10352 #if 0
10353 std::string message = constructErrorMessage(
10354 "View %s already contains a port of name %s\n",
10355 view->getName().c_str(),
10356 port->getName().c_str() );
10357 log("%s\n", message.c_str());
10358 Error e( eMessageIdParserError,
10359 __FUNCTION__, __FILE__, __LINE__ );
10360 e.saveContextData( "Parser error message", message );
10361 e.saveContextData( "Filename", yyloc.begin.filename );
10362 e.saveContextData( "StartLine", yyloc.begin.line );
10363 e.saveContextData( "EndLine", yyloc.end.line );
10364 inDriver.setParserError( e );
10365 error( yyloc, message );
10366 YYABORT;
10367 #endif
10368 }
10369 }
10370 else
10371 {
10372 if( !pNameData->mIndices.empty() )
10373 {
10374 try
10375 {
10376 VectorPortSharedPtr vectorPort;
10377 ctx->getFactory()->create( vectorPort );
10378 vectorPort->setName( name );
10379 vectorPort->constructChildren(
10380 ctx->getFactory(),
10381 pNameData->mIndices );
10382 port = vectorPort;
10383 }
10384 catch( Error &e )
10385 {
10386 std::string message = constructErrorMessage(
10387 "Unable to create vector port : %s",
10388 port->getName().c_str());
10389 log("%s\n", message.c_str());
10390 e.setCurrentLocation( __FUNCTION__,
10391 __FILE__, __LINE__ );
10392 e.saveContextData( "Parser error message", message );
10393 e.saveContextData( "Filename", yyloc.begin.filename );
10394 e.saveContextData( "StartLine", yyloc.begin.line );
10395 e.saveContextData( "EndLine", yyloc.end.line );
10396 inDriver.setParserError( e );
10397 error( yyloc, message );
10398 YYABORT;
10399 }
10400 }
10401 else
10402 {
10403 try
10404 {
10405 ScalarPortSharedPtr scalarPort;
10406 ctx->getFactory()->create( scalarPort );
10407 port = scalarPort;
10408 port->setName( name );
10409 }
10410 catch( Error &e )
10411 {
10412 std::string message = constructErrorMessage(
10413 "Unable to create port : %s",
10414 port->getName().c_str());
10415 log("%s\n", message.c_str());
10416 e.setCurrentLocation( __FUNCTION__,
10417 __FILE__, __LINE__ );
10418 e.saveContextData( "Parser error message", message );
10419 e.saveContextData( "Filename", yyloc.begin.filename );
10420 e.saveContextData( "StartLine", yyloc.begin.line );
10421 e.saveContextData( "EndLine", yyloc.end.line );
10422 inDriver.setParserError( e );
10423 error( yyloc, message );
10424 YYABORT;
10425 }
10426 }
10427 if( !pNameData->mOriginalName.empty() )
10428 {
10429 port->setOriginalName(
10430 pNameData->mOriginalName );
10431 }
10432 port->setParent( view );
10433 if( bundle )
10434 {
10435 port->setParentCollection( bundle );
10436 bundle->addChild( port );
10437 log("Added port to existing bundle\n");
10438 }
10439 else
10440 {
10441 view->addPort( port );
10442 }
10443 if( pNameData->mIndices.empty() )
10444 {
10445 log("Created scalar port %s ",
10446 port->getName().c_str() );
10447 }
10448 else
10449 {
10450 log("Created vector port %s with dimensions ",
10451 port->getName().c_str() );
10452 for( std::vector<size_t>::const_iterator it
10453 = pNameData->mIndices.begin();
10454 it != pNameData->mIndices.end(); ++it )
10455 {
10456 log("%lu ", *it );
10457 }
10458 }
10459 log("\n");
10460 }
10461 ctx->setCurrentPort( port );
10462 ctx->pushPropertyContainer( port );
10463 }
10464 break;
10465
10466 case 828:
10467
10468
10469 #line 8374 "Parser.yy"
10470 {
10471 EdifContextSharedPtr ctx = inDriver.getContext();
10472 if( (yysemantic_stack_[(6) - (5)].portAttributes) )
10473 {
10474 boost::shared_ptr<PortAttributes> attrib( (yysemantic_stack_[(6) - (5)].portAttributes) );
10475 ctx->getCurrentPort()->setAttributes( attrib );
10476 }
10477 ctx->setCurrentPort( PortSharedPtr() );
10478 ctx->popPropertyContainer();
10479 }
10480 break;
10481
10482 case 829:
10483
10484
10485 #line 8387 "Parser.yy"
10486 {
10487 (yyval.portAttributes) = NULL;
10488 }
10489 break;
10490
10491 case 830:
10492
10493
10494 #line 8391 "Parser.yy"
10495 {
10496 (yyval.portAttributes) = (yysemantic_stack_[(2) - (1)].portAttributes);
10497 }
10498 break;
10499
10500 case 831:
10501
10502
10503 #line 8395 "Parser.yy"
10504 {
10505 (yyval.portAttributes) = ((yysemantic_stack_[(2) - (1)].portAttributes))?(yysemantic_stack_[(2) - (1)].portAttributes):new PortAttributes();
10506 Value::Boolean unused = (yysemantic_stack_[(2) - (2)].integerVal);
10507 Value val( Value::eValueTypeBoolean, unused );
10508 (yyval.portAttributes)->setUnused( val );
10509 }
10510 break;
10511
10512 case 832:
10513
10514
10515 #line 8402 "Parser.yy"
10516 {
10517 boost::scoped_ptr<PortDelay> delay( (yysemantic_stack_[(2) - (2)].portDelay) );
10518 (yyval.portAttributes) = ((yysemantic_stack_[(2) - (1)].portAttributes))?(yysemantic_stack_[(2) - (1)].portAttributes):new PortAttributes();
10519 (yyval.portAttributes)->setPortDelay( *delay );
10520 }
10521 break;
10522
10523 case 833:
10524
10525
10526 #line 8408 "Parser.yy"
10527 {
10528 (yyval.portAttributes) = ((yysemantic_stack_[(2) - (1)].portAttributes))?(yysemantic_stack_[(2) - (1)].portAttributes):new PortAttributes();
10529 boost::scoped_ptr<std::string> data((yysemantic_stack_[(2) - (2)].stringVal));
10530 Value val( Value::eValueTypeString, *data );
10531 (yyval.portAttributes)->setDesignator( val );
10532 }
10533 break;
10534
10535 case 834:
10536
10537
10538 #line 8415 "Parser.yy"
10539 {
10540 boost::scoped_ptr<PairData> data((yysemantic_stack_[(2) - (2)].pairData));
10541 Value::Number num( data->mX, data->mY );
10542 Value val( Value::eValueTypeNumber, num );
10543 (yyval.portAttributes) = ((yysemantic_stack_[(2) - (1)].portAttributes))?(yysemantic_stack_[(2) - (1)].portAttributes):new PortAttributes();
10544 (yyval.portAttributes)->setDcFaninLoad( val );
10545 }
10546 break;
10547
10548 case 835:
10549
10550
10551 #line 8423 "Parser.yy"
10552 {
10553 boost::scoped_ptr<PairData> data((yysemantic_stack_[(2) - (2)].pairData));
10554 Value::Number num( data->mX, data->mY );
10555 Value val( Value::eValueTypeNumber, num );
10556 (yyval.portAttributes) = ((yysemantic_stack_[(2) - (1)].portAttributes))?(yysemantic_stack_[(2) - (1)].portAttributes):new PortAttributes();
10557 (yyval.portAttributes)->setDcFanoutLoad( val );
10558 }
10559 break;
10560
10561 case 836:
10562
10563
10564 #line 8431 "Parser.yy"
10565 {
10566 boost::scoped_ptr<PairData> data((yysemantic_stack_[(2) - (2)].pairData));
10567 Value::Number num( data->mX, data->mY );
10568 Value val( Value::eValueTypeNumber, num );
10569 (yyval.portAttributes) = ((yysemantic_stack_[(2) - (1)].portAttributes))?(yysemantic_stack_[(2) - (1)].portAttributes):new PortAttributes();
10570 (yyval.portAttributes)->setDcMaxFanin( val );
10571 }
10572 break;
10573
10574 case 837:
10575
10576
10577 #line 8439 "Parser.yy"
10578 {
10579 boost::scoped_ptr<PairData> data((yysemantic_stack_[(2) - (2)].pairData));
10580 Value::Number num( data->mX, data->mY );
10581 Value val( Value::eValueTypeNumber, num );
10582 (yyval.portAttributes) = ((yysemantic_stack_[(2) - (1)].portAttributes))?(yysemantic_stack_[(2) - (1)].portAttributes):new PortAttributes();
10583 (yyval.portAttributes)->setDcMaxFanout( val );
10584 }
10585 break;
10586
10587 case 838:
10588
10589
10590 #line 8447 "Parser.yy"
10591 {
10592 boost::scoped_ptr<ValueData> data((yysemantic_stack_[(2) - (2)].valueData));
10593 (yyval.portAttributes) = ((yysemantic_stack_[(2) - (1)].portAttributes))?(yysemantic_stack_[(2) - (1)].portAttributes):new PortAttributes();
10594 (yyval.portAttributes)->setAcLoad( data->mValues[0] );
10595 }
10596 break;
10597
10598 case 839:
10599
10600
10601 #line 8453 "Parser.yy"
10602 {
10603 (yyval.portAttributes) = (yysemantic_stack_[(2) - (1)].portAttributes);
10604 }
10605 break;
10606
10607 case 840:
10608
10609
10610 #line 8457 "Parser.yy"
10611 {
10612 (yyval.portAttributes) = (yysemantic_stack_[(2) - (1)].portAttributes);
10613 EdifContextSharedPtr ctx = inDriver.getContext();
10614 PortSharedPtr port = ctx->getCurrentPort();
10615 port->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
10616 delete (yysemantic_stack_[(2) - (2)].stringVal);
10617 }
10618 break;
10619
10620 case 841:
10621
10622
10623 #line 8465 "Parser.yy"
10624 {
10625 (yyval.portAttributes) = (yysemantic_stack_[(2) - (1)].portAttributes);
10626 EdifContextSharedPtr ctx = inDriver.getContext();
10627 PortSharedPtr port = ctx->getCurrentPort();
10628 port->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
10629 delete (yysemantic_stack_[(2) - (2)].stringVal);
10630 }
10631 break;
10632
10633 case 842:
10634
10635
10636 #line 8475 "Parser.yy"
10637 {
10638 boost::scoped_ptr<PortRefData> portData( (yysemantic_stack_[(3) - (3)].portRefData) );
10639 EdifContextSharedPtr ctx
10640 = inDriver.getContext();
10641 std::vector< std::string > nestedNames;
10642 PortRefData *currPortRef = (yysemantic_stack_[(3) - (3)].portRefData);
10643 PortRefData *nextPortRef = portData->mParentPort;
10644 nestedNames.push_back(currPortRef->mPortName->mName);
10645 while( nextPortRef )
10646 {
10647 currPortRef = nextPortRef;
10648 nestedNames.push_back( nextPortRef->mPortName->mName );
10649 nextPortRef = currPortRef->mParentPort;
10650 }
10651 bool isPort = ( NULL == currPortRef->mInstanceName );
10652 NameData *portNameData = currPortRef->mPortName;
10653 std::string topName = *(nestedNames.rbegin());
10654 CellSharedPtr cell = ctx->getCurrentCell();
10655 ViewSharedPtr view = cell->findView(
10656 portData->mView->mViewName->mName );
10657 if( !view )
10658 {
10659 std::string message = constructErrorMessage(
10660 "No view %s found",
10661 portData->mView->mViewName->mName.c_str());
10662 log("%s\n", message.c_str());
10663 Error e( eMessageIdParserError,
10664 __FUNCTION__, __FILE__, __LINE__ );
10665 e.saveContextData( "Parser error message", message );
10666 e.saveContextData( "Filename", yyloc.begin.filename );
10667 e.saveContextData( "StartLine", yyloc.begin.line );
10668 e.saveContextData( "EndLine", yyloc.end.line );
10669 inDriver.setParserError( e );
10670 error( yyloc, message );
10671 YYABORT;
10672 }
10673 if( isPort )
10674 {
10675 PortSharedPtr port = view->findPort( topName );
10676 if( !port )
10677 {
10678 std::string message = constructErrorMessage(
10679 "No port %s found",
10680 portNameData->mName.c_str());
10681 log("%s\n", message.c_str());
10682 Error e( eMessageIdParserError,
10683 __FUNCTION__, __FILE__, __LINE__ );
10684 e.saveContextData( "Parser error message", message );
10685 e.saveContextData( "Filename", yyloc.begin.filename );
10686 e.saveContextData( "StartLine", yyloc.begin.line );
10687 e.saveContextData( "EndLine", yyloc.end.line );
10688 inDriver.setParserError( e );
10689 error( yyloc, message );
10690 YYABORT;
10691 }
10692 try
10693 {
10694 connectibleFinder( nestedNames, port );
10695 if( !portData->mPortName->mIndices.empty() )
10696 {
10697 port = port->get( portData->mPortName->mIndices );
10698 }
10699 ctx->setCurrentPort( port );
10700 ctx->pushPropertyContainer( port );
10701 }
10702 catch( Error &e )
10703 {
10704 e.setCurrentLocation(
10705 __FUNCTION__, __FILE__, __LINE__ );
10706 throw;
10707 }
10708 }
10709 else
10710 {
10711 NameData *instanceName
10712 = currPortRef->mInstanceName;
10713 InstanceSharedPtr instance
10714 = view->findInstance(
10715 instanceName->mName );
10716 if( !instance )
10717 {
10718 std::string message = constructErrorMessage(
10719 "Instance %s not known",
10720 instanceName->mName.c_str() );
10721 log("%s\n", message.c_str());
10722 Error e( eMessageIdParserError,
10723 __FUNCTION__, __FILE__, __LINE__ );
10724 e.saveContextData( "Parser error message", message );
10725 e.saveContextData( "Filename", yyloc.begin.filename );
10726 e.saveContextData( "StartLine", yyloc.begin.line );
10727 e.saveContextData( "EndLine", yyloc.end.line );
10728 inDriver.setParserError( e );
10729 error( yyloc, message );
10730 YYABORT;
10731 }
10732 if( !instanceName->mIndices.empty() )
10733 {
10734 InstanceSharedPtr bit
10735 = instance->get( instanceName->mIndices );
10736 instance = bit;
10737 }
10738 PortReferenceSharedPtr portRef
10739 = instance->findPortReference( topName );
10740 if( !portRef )
10741 {
10742 std::string message = constructErrorMessage(
10743 "No port ref %s found",
10744 portNameData->mName.c_str());
10745 log("%s\n", message.c_str());
10746 Error e( eMessageIdParserError,
10747 __FUNCTION__, __FILE__, __LINE__ );
10748 e.saveContextData( "Parser error message", message );
10749 e.saveContextData( "Filename", yyloc.begin.filename );
10750 e.saveContextData( "StartLine", yyloc.begin.line );
10751 e.saveContextData( "EndLine", yyloc.end.line );
10752 inDriver.setParserError( e );
10753 error( yyloc, message );
10754 YYABORT;
10755 }
10756 try
10757 {
10758 connectibleFinder( nestedNames, portRef );
10759 if( !portData->mPortName->mIndices.empty() )
10760 {
10761 portRef = portRef->get( portData->mPortName->mIndices );
10762 }
10763 ctx->setCurrentPortRef( portRef );
10764 ctx->pushPropertyContainer( portRef );
10765 }
10766 catch( Error &e )
10767 {
10768 std::string message = constructErrorMessage(
10769 "Unable to connect port ref : %s",
10770 portRef->getName().c_str());
10771 log("%s\n", message.c_str());
10772 e.setCurrentLocation( __FUNCTION__,
10773 __FILE__, __LINE__ );
10774 e.saveContextData( "Parser error message", message );
10775 e.saveContextData( "Filename", yyloc.begin.filename );
10776 e.saveContextData( "StartLine", yyloc.begin.line );
10777 e.saveContextData( "EndLine", yyloc.end.line );
10778 inDriver.setParserError( e );
10779 error( yyloc, message );
10780 YYABORT;
10781 }
10782 }
10783 }
10784 break;
10785
10786 case 843:
10787
10788
10789 #line 8622 "Parser.yy"
10790 {
10791 EdifContextSharedPtr ctx
10792 = inDriver.getContext();
10793 if( (yysemantic_stack_[(6) - (5)].portAttributes) )
10794 {
10795 boost::shared_ptr<PortAttributes>
10796 attrib( (yysemantic_stack_[(6) - (5)].portAttributes) );
10797 PortSharedPtr port
10798 = ctx->getCurrentPort();
10799 if( port )
10800 {
10801 port->setAttributes( attrib );
10802 }
10803 else
10804 {
10805 ctx->getCurrentPortRef()
10806 ->setAttributes( attrib );
10807 }
10808 }
10809 ctx->setCurrentPort( PortSharedPtr() );
10810 ctx->setCurrentPortRef(
10811 PortReferenceSharedPtr() );
10812 ctx->popPropertyContainer();
10813 }
10814 break;
10815
10816 case 844:
10817
10818
10819 #line 8649 "Parser.yy"
10820 {
10821 (yyval.portAttributes) = NULL;
10822 }
10823 break;
10824
10825 case 845:
10826
10827
10828 #line 8653 "Parser.yy"
10829 {
10830 (yyval.portAttributes) = ((yysemantic_stack_[(2) - (1)].portAttributes))?(yysemantic_stack_[(2) - (1)].portAttributes):new PortAttributes();
10831 Value::Boolean unused = (yysemantic_stack_[(2) - (2)].integerVal);
10832 Value val( Value::eValueTypeBoolean, unused );
10833 (yyval.portAttributes)->setUnused( val );
10834 }
10835 break;
10836
10837 case 846:
10838
10839
10840 #line 8660 "Parser.yy"
10841 {
10842 boost::scoped_ptr<PortDelay> delay( (yysemantic_stack_[(2) - (2)].portDelay) );
10843 (yyval.portAttributes) = ((yysemantic_stack_[(2) - (1)].portAttributes))?(yysemantic_stack_[(2) - (1)].portAttributes):new PortAttributes();
10844 (yyval.portAttributes)->setPortDelay( *delay );
10845 }
10846 break;
10847
10848 case 847:
10849
10850
10851 #line 8666 "Parser.yy"
10852 {
10853 (yyval.portAttributes) = ((yysemantic_stack_[(2) - (1)].portAttributes))?(yysemantic_stack_[(2) - (1)].portAttributes):new PortAttributes();
10854 boost::scoped_ptr<std::string> data((yysemantic_stack_[(2) - (2)].stringVal));
10855 Value val( Value::eValueTypeString, *data );
10856 (yyval.portAttributes)->setDesignator( val );
10857 }
10858 break;
10859
10860 case 848:
10861
10862
10863 #line 8673 "Parser.yy"
10864 {
10865 boost::scoped_ptr<PairData> data((yysemantic_stack_[(2) - (2)].pairData));
10866 Value::Number num( data->mX, data->mY );
10867 Value val( Value::eValueTypeNumber, num );
10868 (yyval.portAttributes) = ((yysemantic_stack_[(2) - (1)].portAttributes))?(yysemantic_stack_[(2) - (1)].portAttributes):new PortAttributes();
10869 (yyval.portAttributes)->setDcFaninLoad( val );
10870 }
10871 break;
10872
10873 case 849:
10874
10875
10876 #line 8681 "Parser.yy"
10877 {
10878 boost::scoped_ptr<PairData> data((yysemantic_stack_[(2) - (2)].pairData));
10879 Value::Number num( data->mX, data->mY );
10880 Value val( Value::eValueTypeNumber, num );
10881 (yyval.portAttributes) = ((yysemantic_stack_[(2) - (1)].portAttributes))?(yysemantic_stack_[(2) - (1)].portAttributes):new PortAttributes();
10882 (yyval.portAttributes)->setDcFanoutLoad( val );
10883 }
10884 break;
10885
10886 case 850:
10887
10888
10889 #line 8689 "Parser.yy"
10890 {
10891 boost::scoped_ptr<PairData> data((yysemantic_stack_[(2) - (2)].pairData));
10892 Value::Number num( data->mX, data->mY );
10893 Value val( Value::eValueTypeNumber, num );
10894 (yyval.portAttributes) = ((yysemantic_stack_[(2) - (1)].portAttributes))?(yysemantic_stack_[(2) - (1)].portAttributes):new PortAttributes();
10895 (yyval.portAttributes)->setDcMaxFanin( val );
10896 }
10897 break;
10898
10899 case 851:
10900
10901
10902 #line 8697 "Parser.yy"
10903 {
10904 boost::scoped_ptr<PairData> data((yysemantic_stack_[(2) - (2)].pairData));
10905 Value::Number num( data->mX, data->mY );
10906 Value val( Value::eValueTypeNumber, num );
10907 (yyval.portAttributes) = ((yysemantic_stack_[(2) - (1)].portAttributes))?(yysemantic_stack_[(2) - (1)].portAttributes):new PortAttributes();
10908 (yyval.portAttributes)->setDcMaxFanout( val );
10909 }
10910 break;
10911
10912 case 852:
10913
10914
10915 #line 8705 "Parser.yy"
10916 {
10917 boost::scoped_ptr<ValueData> data((yysemantic_stack_[(2) - (2)].valueData));
10918 (yyval.portAttributes) = ((yysemantic_stack_[(2) - (1)].portAttributes))?(yysemantic_stack_[(2) - (1)].portAttributes):new PortAttributes();
10919 (yyval.portAttributes)->setAcLoad( data->mValues[0] );
10920 }
10921 break;
10922
10923 case 853:
10924
10925
10926 #line 8711 "Parser.yy"
10927 {
10928 (yyval.portAttributes) = (yysemantic_stack_[(2) - (1)].portAttributes);
10929 }
10930 break;
10931
10932 case 854:
10933
10934
10935 #line 8715 "Parser.yy"
10936 {
10937 (yyval.portAttributes) = (yysemantic_stack_[(2) - (1)].portAttributes);
10938 delete (yysemantic_stack_[(2) - (2)].stringVal);
10939 }
10940 break;
10941
10942 case 855:
10943
10944
10945 #line 8722 "Parser.yy"
10946 {
10947 boost::scoped_ptr<NameData> nameData( (yysemantic_stack_[(3) - (3)].nameData) );
10948 std::string name = nameData->mName;
10949 EdifContextSharedPtr ctx = inDriver.getContext();
10950 PortSharedPtr port;
10951 ViewSharedPtr view = ctx->getCurrentView();
10952 PortBundleSharedPtr bundle
10953 = ctx->getCurrentPortBundleContext();
10954 bool bExistingPortFound = false;
10955 if( bundle )
10956 {
10957 typedef std::vector<PortSharedPtr > PBList;
10958 PBList children;
10959 bundle->getChildren( children );
10960 for( PBList::iterator it = children.begin();
10961 it != children.end(); it++ )
10962 {
10963 if( (*it)->getName() == name )
10964 {
10965 bExistingPortFound = true;
10966 }
10967 }
10968 }
10969 else
10970 {
10971 port = view->findPort( name );
10972 bExistingPortFound = port;
10973 }
10974 if( bExistingPortFound )
10975 {
10976 if( !ctx->getIsViewBeingLinked() )
10977 {
10978 std::string message = constructErrorMessage(
10979 "View %s already contains a port of name %s\n",
10980 view->getName().c_str(),
10981 port->getName().c_str() );
10982 log("%s\n", message.c_str());
10983 Error e( eMessageIdParserError,
10984 __FUNCTION__, __FILE__, __LINE__ );
10985 e.saveContextData( "Parser error message", message );
10986 e.saveContextData( "Filename", yyloc.begin.filename );
10987 e.saveContextData( "StartLine", yyloc.begin.line );
10988 e.saveContextData( "EndLine", yyloc.end.line );
10989 inDriver.setParserError( e );
10990 error( yyloc, message );
10991 YYABORT;
10992 }
10993 }
10994 else
10995 {
10996 try
10997 {
10998 PortBundleSharedPtr portBundle;
10999 ctx->getFactory()->create( portBundle );
11000 ctx->pushPortBundleContext( portBundle );
11001 port = portBundle;
11002 }
11003 catch( Error &e )
11004 {
11005 std::string message = constructErrorMessage(
11006 "Unable to create port bundle : %s",
11007 port->getName().c_str());
11008 log("%s\n", message.c_str());
11009 e.setCurrentLocation( __FUNCTION__,
11010 __FILE__, __LINE__ );
11011 e.saveContextData( "Parser error message", message );
11012 e.saveContextData( "Filename", yyloc.begin.filename );
11013 e.saveContextData( "StartLine", yyloc.begin.line );
11014 e.saveContextData( "EndLine", yyloc.end.line );
11015 inDriver.setParserError( e );
11016 error( yyloc, message );
11017 YYABORT;
11018 }
11019 port->setName( name );
11020 if( !nameData->mOriginalName.empty() )
11021 {
11022 port->setOriginalName( nameData->mOriginalName );
11023 }
11024 port->setParent( view );
11025 if( bundle )
11026 {
11027 port->setParentCollection( bundle );
11028 bundle->addChild( port );
11029 log("Added port to existing bundle\n");
11030 }
11031 else
11032 {
11033 view->addPort( port );
11034 }
11035 log( "Created port bundle %s\n",
11036 port->getName().c_str() );
11037 }
11038 ctx->setCurrentPort( port );
11039 }
11040 break;
11041
11042 case 856:
11043
11044
11045 #line 8816 "Parser.yy"
11046 {
11047 inDriver.getContext()->popPortBundleContext();
11048 inDriver.getContext()->setCurrentPort(
11049 PortSharedPtr() );
11050 }
11051 break;
11052
11053 case 859:
11054
11055
11056 #line 8826 "Parser.yy"
11057 {
11058 EdifContextSharedPtr ctx = inDriver.getContext();
11059 PortBundleSharedPtr bundle
11060 = ctx->getCurrentPortBundleContext();
11061 bundle->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
11062 delete (yysemantic_stack_[(2) - (2)].stringVal);
11063 }
11064 break;
11065
11066 case 860:
11067
11068
11069 #line 8834 "Parser.yy"
11070 {
11071 EdifContextSharedPtr ctx = inDriver.getContext();
11072 PortBundleSharedPtr bundle
11073 = ctx->getCurrentPortBundleContext();
11074 bundle->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
11075 delete (yysemantic_stack_[(2) - (2)].stringVal);
11076 }
11077 break;
11078
11079 case 861:
11080
11081
11082 #line 8844 "Parser.yy"
11083 {
11084 (yyval.portDelay) = (yysemantic_stack_[(5) - (4)].portDelay);
11085 (yyval.portDelay)->setDerivation(
11086 static_cast<Derivation>( (yysemantic_stack_[(5) - (3)].integerVal) ) );
11087 inDriver.getLexer()->setAppendToBuffer( false );
11088 inDriver.getLexer()->resetBuffer();
11089 }
11090 break;
11091
11092 case 862:
11093
11094
11095 #line 8854 "Parser.yy"
11096 {
11097 inDriver.getLexer()->setAppendToBuffer( true );
11098 inDriver.getLexer()->resetBuffer();
11099 (yyval.portDelay) = (yysemantic_stack_[(1) - (1)].portDelay);
11100 }
11101 break;
11102
11103 case 863:
11104
11105
11106 #line 8860 "Parser.yy"
11107 {
11108 inDriver.getLexer()->setAppendToBuffer( true );
11109 inDriver.getLexer()->resetBuffer();
11110 (yyval.portDelay) = (yysemantic_stack_[(1) - (1)].portDelay);
11111 }
11112 break;
11113
11114 case 864:
11115
11116
11117 #line 8866 "Parser.yy"
11118 {
11119 (yyval.portDelay) = ( (yysemantic_stack_[(2) - (1)].portDelay) ) ? (yysemantic_stack_[(2) - (1)].portDelay) : new PortDelay();
11120 EdifContextSharedPtr ctx
11121 = inDriver.getContext();
11122 LogicElementSharedPtr logicElem
11123 = ctx->getCurrentLogicElement();
11124 if( logicElem )
11125 {
11126 (yyval.portDelay)->setTransition( logicElem );
11127 }
11128 }
11129 break;
11130
11131 case 865:
11132
11133
11134 #line 8878 "Parser.yy"
11135 {
11136 (yyval.portDelay) = ( (yysemantic_stack_[(2) - (1)].portDelay) ) ? (yysemantic_stack_[(2) - (1)].portDelay) : new PortDelay();
11137 EdifContextSharedPtr ctx
11138 = inDriver.getContext();
11139 LogicElementSharedPtr logicElem
11140 = ctx->getCurrentLogicElement();
11141 if( logicElem )
11142 {
11143 (yyval.portDelay)->setTransition( logicElem );
11144 }
11145 }
11146 break;
11147
11148 case 870:
11149
11150
11151 #line 8900 "Parser.yy"
11152 {
11153 boost::scoped_ptr<NameData> portData( (yysemantic_stack_[(1) - (1)].nameData) );
11154 std::string name = portData->mName;
11155 EdifContextSharedPtr ctx
11156 = inDriver.getContext();
11157 ViewSharedPtr view = ctx->getCurrentView();
11158 PortSharedPtr port = view->findPort( name );
11159 if( !port )
11160 {
11161 std::string message = constructErrorMessage(
11162 "No port %s found in view %s\n",
11163 name.c_str(),
11164 view->getName().c_str());
11165 log("%s\n", message.c_str());
11166 Error e( eMessageIdParserError,
11167 __FUNCTION__, __FILE__, __LINE__ );
11168 e.saveContextData( "Parser error message", message );
11169 e.saveContextData( "Filename", yyloc.begin.filename );
11170 e.saveContextData( "StartLine", yyloc.begin.line );
11171 e.saveContextData( "EndLine", yyloc.end.line );
11172 inDriver.setParserError( e );
11173 error( yyloc, message );
11174 YYABORT;
11175 }
11176 else
11177 {
11178 EventSharedPtr event
11179 = ctx->getCurrentEvent();
11180 event->addPort( port );
11181 }
11182 }
11183 break;
11184
11185 case 885:
11186
11187
11188 #line 8954 "Parser.yy"
11189 {
11190 delete (yysemantic_stack_[(2) - (2)].stringVal);
11191 }
11192 break;
11193
11194 case 886:
11195
11196
11197 #line 8958 "Parser.yy"
11198 {
11199 delete (yysemantic_stack_[(2) - (2)].stringVal);
11200 }
11201 break;
11202
11203 case 887:
11204
11205
11206 #line 8964 "Parser.yy"
11207 {
11208 (yyval.portInst) = (yysemantic_stack_[(4) - (3)].portInst);
11209 }
11210 break;
11211
11212 case 888:
11213
11214
11215 #line 8970 "Parser.yy"
11216 {
11217 (yyval.portInst) = new PortInstData();
11218 (yyval.portInst)->mRefData = (yysemantic_stack_[(1) - (1)].portRefData);
11219 }
11220 break;
11221
11222 case 889:
11223
11224
11225 #line 8975 "Parser.yy"
11226 {
11227 (yyval.portInst) = new PortInstData();
11228 (yyval.portInst)->mRefData = new PortRefData();
11229 (yyval.portInst)->mRefData->mPortName = (yysemantic_stack_[(1) - (1)].nameData);
11230 }
11231 break;
11232
11233 case 890:
11234
11235
11236 #line 8981 "Parser.yy"
11237 {
11238 (yyval.portInst) = ((yysemantic_stack_[(2) - (1)].portInst))?(yysemantic_stack_[(2) - (1)].portInst):new PortInstData();
11239 (yyval.portInst)->mAttribute = ( (yyval.portInst)->mAttribute )
11240 ? (yyval.portInst)->mAttribute
11241 : new PortAttributes();
11242 Value::Boolean unused = (yysemantic_stack_[(2) - (2)].integerVal);
11243 Value val( Value::eValueTypeBoolean, unused );
11244 (yyval.portInst)->mAttribute->setUnused( val );
11245 }
11246 break;
11247
11248 case 891:
11249
11250
11251 #line 8991 "Parser.yy"
11252 {
11253 (yyval.portInst) = ((yysemantic_stack_[(2) - (1)].portInst))?(yysemantic_stack_[(2) - (1)].portInst):new PortInstData();
11254 (yyval.portInst)->mAttribute = ( (yyval.portInst)->mAttribute )
11255 ? (yyval.portInst)->mAttribute
11256 : new PortAttributes();
11257 boost::scoped_ptr<PortDelay> delay( (yysemantic_stack_[(2) - (2)].portDelay) );
11258 (yyval.portInst)->mAttribute->setPortDelay( *delay );
11259 }
11260 break;
11261
11262 case 892:
11263
11264
11265 #line 9000 "Parser.yy"
11266 {
11267 (yyval.portInst) = ((yysemantic_stack_[(2) - (1)].portInst))?(yysemantic_stack_[(2) - (1)].portInst):new PortInstData();
11268 (yyval.portInst)->mAttribute = ( (yyval.portInst)->mAttribute )
11269 ? (yyval.portInst)->mAttribute
11270 : new PortAttributes();
11271 boost::scoped_ptr<std::string> data((yysemantic_stack_[(2) - (2)].stringVal));
11272 Value val( Value::eValueTypeString, *data );
11273 (yyval.portInst)->mAttribute->setDesignator( val );
11274 }
11275 break;
11276
11277 case 893:
11278
11279
11280 #line 9010 "Parser.yy"
11281 {
11282 boost::scoped_ptr<PairData> data((yysemantic_stack_[(2) - (2)].pairData));
11283 Value::Number num( data->mX, data->mY );
11284 Value val( Value::eValueTypeNumber, num );
11285 (yyval.portInst) = ((yysemantic_stack_[(2) - (1)].portInst))?(yysemantic_stack_[(2) - (1)].portInst):new PortInstData();
11286 (yyval.portInst)->mAttribute = ( (yyval.portInst)->mAttribute )
11287 ? (yyval.portInst)->mAttribute
11288 : new PortAttributes();
11289 (yyval.portInst)->mAttribute->setDcFaninLoad( val );
11290 }
11291 break;
11292
11293 case 894:
11294
11295
11296 #line 9021 "Parser.yy"
11297 {
11298 boost::scoped_ptr<PairData> data((yysemantic_stack_[(2) - (2)].pairData));
11299 Value::Number num( data->mX, data->mY );
11300 Value val( Value::eValueTypeNumber, num );
11301 (yyval.portInst) = ((yysemantic_stack_[(2) - (1)].portInst))?(yysemantic_stack_[(2) - (1)].portInst):new PortInstData();
11302 (yyval.portInst)->mAttribute = ( (yyval.portInst)->mAttribute )
11303 ? (yyval.portInst)->mAttribute
11304 : new PortAttributes();
11305 (yyval.portInst)->mAttribute->setDcFanoutLoad( val );
11306 }
11307 break;
11308
11309 case 895:
11310
11311
11312 #line 9032 "Parser.yy"
11313 {
11314 boost::scoped_ptr<PairData> data((yysemantic_stack_[(2) - (2)].pairData));
11315 Value::Number num( data->mX, data->mY );
11316 Value val( Value::eValueTypeNumber, num );
11317 (yyval.portInst) = ((yysemantic_stack_[(2) - (1)].portInst))?(yysemantic_stack_[(2) - (1)].portInst):new PortInstData();
11318 (yyval.portInst)->mAttribute = ( (yyval.portInst)->mAttribute )
11319 ? (yyval.portInst)->mAttribute
11320 : new PortAttributes();
11321 (yyval.portInst)->mAttribute->setDcMaxFanin( val );
11322 }
11323 break;
11324
11325 case 896:
11326
11327
11328 #line 9043 "Parser.yy"
11329 {
11330 boost::scoped_ptr<PairData> data((yysemantic_stack_[(2) - (2)].pairData));
11331 Value::Number num( data->mX, data->mY );
11332 Value val( Value::eValueTypeNumber, num );
11333 (yyval.portInst) = ((yysemantic_stack_[(2) - (1)].portInst))?(yysemantic_stack_[(2) - (1)].portInst):new PortInstData();
11334 (yyval.portInst)->mAttribute = ( (yyval.portInst)->mAttribute )
11335 ? (yyval.portInst)->mAttribute
11336 : new PortAttributes();
11337 (yyval.portInst)->mAttribute->setDcMaxFanout( val );
11338 }
11339 break;
11340
11341 case 897:
11342
11343
11344 #line 9054 "Parser.yy"
11345 {
11346 boost::scoped_ptr<ValueData> data((yysemantic_stack_[(2) - (2)].valueData));
11347 (yyval.portInst) = ((yysemantic_stack_[(2) - (1)].portInst))?(yysemantic_stack_[(2) - (1)].portInst):new PortInstData();
11348 (yyval.portInst)->mAttribute = ( (yyval.portInst)->mAttribute )
11349 ? (yyval.portInst)->mAttribute
11350 : new PortAttributes();
11351 (yyval.portInst)->mAttribute->setAcLoad( data->mValues[0] );
11352 }
11353 break;
11354
11355 case 898:
11356
11357
11358 #line 9063 "Parser.yy"
11359 {
11360 (yyval.portInst) = (yysemantic_stack_[(2) - (1)].portInst);
11361 }
11362 break;
11363
11364 case 899:
11365
11366
11367 #line 9067 "Parser.yy"
11368 {
11369 (yyval.portInst) = (yysemantic_stack_[(2) - (1)].portInst);
11370 delete (yysemantic_stack_[(2) - (2)].stringVal);
11371 }
11372 break;
11373
11374 case 900:
11375
11376
11377 #line 9072 "Parser.yy"
11378 {
11379 (yyval.portInst) = (yysemantic_stack_[(2) - (1)].portInst);
11380 delete (yysemantic_stack_[(2) - (2)].stringVal);
11381 }
11382 break;
11383
11384 case 905:
11385
11386
11387 #line 9087 "Parser.yy"
11388 {
11389 (yyval.portListData) = (yysemantic_stack_[(4) - (3)].portListData);
11390 }
11391 break;
11392
11393 case 906:
11394
11395
11396 #line 9093 "Parser.yy"
11397 {
11398 (yyval.portListData) = NULL;
11399 }
11400 break;
11401
11402 case 907:
11403
11404
11405 #line 9097 "Parser.yy"
11406 {
11407 (yyval.portListData) = ((yysemantic_stack_[(2) - (1)].portListData))?(yysemantic_stack_[(2) - (1)].portListData):new PortListData();
11408 (yyval.portListData)->mPortRefs.push_back( (yysemantic_stack_[(2) - (2)].portRefData) );
11409 }
11410 break;
11411
11412 case 908:
11413
11414
11415 #line 9102 "Parser.yy"
11416 {
11417 (yyval.portListData) = ((yysemantic_stack_[(2) - (1)].portListData))?(yysemantic_stack_[(2) - (1)].portListData):new PortListData();
11418 PortRefData *portRef = new PortRefData();
11419 portRef->mPortName = (yysemantic_stack_[(2) - (2)].nameData);
11420 (yyval.portListData)->mPortRefs.push_back( portRef );
11421 }
11422 break;
11423
11424 case 909:
11425
11426
11427 #line 9111 "Parser.yy"
11428 {
11429 if( (yysemantic_stack_[(5) - (3)].nameData) )
11430 {
11431 boost::scoped_ptr<NameData> nameData( (yysemantic_stack_[(5) - (3)].nameData) );
11432 std::string name = nameData->mName;
11433 EdifContextSharedPtr ctx = inDriver.getContext();
11434 PortListAliasSharedPtr portlistAlias;
11435 ctx->getFactory()->create( portlistAlias );
11436 portlistAlias->setName( name );
11437
11438 if( NULL != (yysemantic_stack_[(5) - (4)].portListData) && !(yysemantic_stack_[(5) - (4)].portListData)->mPortRefs.empty() )
11439 {
11440 boost::scoped_ptr<PortListData> portListData( (yysemantic_stack_[(5) - (4)].portListData) );
11441 std::string message;
11442
11443 EdifContextSharedPtr ctx = inDriver.getContext();
11444 PortListSharedPtr portList;
11445 ctx->getFactory()->create( portList );
11446
11447 for( std::vector<PortRefData *>::iterator it
11448 = portListData->mPortRefs.begin();
11449 it != portListData->mPortRefs.end(); ++it )
11450 {
11451 PortRefData *portData = *it;
11452 std::vector< std::string > nestedNames;
11453 PortRefData *currPortRef = *it;
11454 PortRefData *nextPortRef = portData->mParentPort;
11455 nestedNames.push_back(currPortRef->mPortName->mName);
11456 while( nextPortRef )
11457 {
11458 currPortRef = nextPortRef;
11459 nestedNames.push_back( nextPortRef->mPortName->mName );
11460 nextPortRef = currPortRef->mParentPort;
11461 }
11462 bool isPort = ( NULL == currPortRef->mInstanceName );
11463 NameData *portNameData = currPortRef->mPortName;
11464 std::string topName = *(nestedNames.rbegin());
11465 ViewSharedPtr view = ctx->getCurrentView();
11466 if( isPort )
11467 {
11468 PortSharedPtr port = view->findPort( topName );
11469 if( !port )
11470 {
11471 std::string message = constructErrorMessage(
11472 "No port %s found in view %s\n",
11473 portNameData->mName.c_str(),
11474 view->getName().c_str());
11475 log("%s\n", message.c_str());
11476 Error e( eMessageIdParserError,
11477 __FUNCTION__, __FILE__, __LINE__ );
11478 e.saveContextData( "Parser error message", message );
11479 e.saveContextData( "Filename", yyloc.begin.filename );
11480 e.saveContextData( "StartLine", yyloc.begin.line );
11481 e.saveContextData( "EndLine", yyloc.end.line );
11482 inDriver.setParserError( e );
11483 error( yyloc, message );
11484 YYABORT;
11485 }
11486
11487 try
11488 {
11489 connectibleFinder( nestedNames, port );
11490 if( !portData->mPortName->mIndices.empty() )
11491 {
11492 port = port->get( portData->mPortName->mIndices );
11493 }
11494 portList->addChildPort( port );
11495 }
11496 catch( Error &e )
11497 {
11498 std::string message = constructErrorMessage(
11499 "Unable to connect port : %s",
11500 port->getName().c_str());
11501 log("%s\n", message.c_str());
11502 e.setCurrentLocation( __FUNCTION__,
11503 __FILE__, __LINE__ );
11504 e.saveContextData( "Parser error message", message );
11505 e.saveContextData( "Filename", yyloc.begin.filename );
11506 e.saveContextData( "StartLine", yyloc.begin.line );
11507 e.saveContextData( "EndLine", yyloc.end.line );
11508 inDriver.setParserError( e );
11509 error( yyloc, message );
11510 YYABORT;
11511 }
11512 }
11513 else
11514 {
11515 }
11516 }
11517 portlistAlias->setPortList( portList );
11518 }
11519 SimulateSharedPtr simulate
11520 = ctx->getCurrentSimulate();
11521 try
11522 {
11523 simulate->addPortListAlias( portlistAlias );
11524 }
11525 catch( Error &e )
11526 {
11527 std::string message = constructErrorMessage(
11528 "Unable to add port list alias : %s",
11529 portlistAlias->getName().c_str());
11530 log("%s\n", message.c_str());
11531 e.setCurrentLocation( __FUNCTION__,
11532 __FILE__, __LINE__ );
11533 e.saveContextData( "Parser error message", message );
11534 e.saveContextData( "Filename", yyloc.begin.filename );
11535 e.saveContextData( "StartLine", yyloc.begin.line );
11536 e.saveContextData( "EndLine", yyloc.end.line );
11537 inDriver.setParserError( e );
11538 error( yyloc, message );
11539 YYABORT;
11540 }
11541 }
11542 }
11543 break;
11544
11545 case 914:
11546
11547
11548 #line 9235 "Parser.yy"
11549 {
11550 delete (yysemantic_stack_[(2) - (2)].stringVal);
11551 }
11552 break;
11553
11554 case 915:
11555
11556
11557 #line 9239 "Parser.yy"
11558 {
11559 delete (yysemantic_stack_[(2) - (2)].stringVal);
11560 }
11561 break;
11562
11563 case 917:
11564
11565
11566 #line 9246 "Parser.yy"
11567 {
11568 delete (yysemantic_stack_[(1) - (1)].nameData);
11569 }
11570 break;
11571
11572 case 929:
11573
11574
11575 #line 9272 "Parser.yy"
11576 {
11577 PortRefData *pData = (yysemantic_stack_[(5) - (4)].portRefData);
11578 if( pData )
11579 {
11580 if( pData->mPortName )
11581 {
11582 (yyval.portRefData) = new PortRefData();
11583 (yyval.portRefData)->mParentPort = pData;
11584 (yyval.portRefData)->mView = pData->mView;
11585 pData->mView = NULL;
11586 }
11587 else
11588 {
11589 if( pData->mInstanceName
11590 || pData->mView )
11591 {
11592 (yyval.portRefData) = pData;
11593 }
11594 }
11595 }
11596 else
11597 {
11598 (yyval.portRefData) = new PortRefData();
11599 }
11600 (yyval.portRefData)->mPortName = (yysemantic_stack_[(5) - (3)].nameData);
11601 }
11602 break;
11603
11604 case 930:
11605
11606
11607 #line 9301 "Parser.yy"
11608 {
11609 (yyval.portRefData) = NULL;
11610 }
11611 break;
11612
11613 case 931:
11614
11615
11616 #line 9305 "Parser.yy"
11617 {
11618 (yyval.portRefData) = (yysemantic_stack_[(1) - (1)].portRefData);
11619 }
11620 break;
11621
11622 case 932:
11623
11624
11625 #line 9309 "Parser.yy"
11626 {
11627 (yyval.portRefData) = new PortRefData();
11628 (yyval.portRefData)->mInstanceName = (yysemantic_stack_[(1) - (1)].instanceRef)->mName;
11629 (yyval.portRefData)->mView = (yysemantic_stack_[(1) - (1)].instanceRef)->mView;
11630 delete (yysemantic_stack_[(1) - (1)].instanceRef);
11631 }
11632 break;
11633
11634 case 933:
11635
11636
11637 #line 9316 "Parser.yy"
11638 {
11639 (yyval.portRefData) = new PortRefData();
11640 (yyval.portRefData)->mView = (yysemantic_stack_[(1) - (1)].viewRefData);
11641 }
11642 break;
11643
11644 case 934:
11645
11646
11647 #line 9323 "Parser.yy"
11648 {
11649 (yyval.pairStrData) = new PairStrData( *(yysemantic_stack_[(5) - (3)].stringVal), *(yysemantic_stack_[(5) - (4)].stringVal) );
11650 }
11651 break;
11652
11653 case 935:
11654
11655
11656 #line 9329 "Parser.yy"
11657 {
11658 (yyval.stringVal) = new std::string();
11659 }
11660 break;
11661
11662 case 936:
11663
11664
11665 #line 9333 "Parser.yy"
11666 {
11667 (yyval.stringVal) = (yysemantic_stack_[(1) - (1)].stringVal);
11668
11669 }
11670 break;
11671
11672 case 940:
11673
11674
11675 #line 9347 "Parser.yy"
11676 {
11677 boost::scoped_ptr<NameData> nameData((yysemantic_stack_[(3) - (3)].nameData));
11678 if( !nameData->mIndices.empty() )
11679 {
11680 std::string message = constructErrorMessage(
11681 "Property %s cannot be an array",
11682 nameData->mName.c_str() );
11683 log("%s\n", message.c_str());
11684 Error e( eMessageIdParserError,
11685 __FUNCTION__, __FILE__, __LINE__ );
11686 e.saveContextData( "Parser error message", message );
11687 e.saveContextData( "Filename", yyloc.begin.filename );
11688 e.saveContextData( "StartLine", yyloc.begin.line );
11689 e.saveContextData( "EndLine", yyloc.end.line );
11690 inDriver.setParserError( e );
11691 error( yyloc, message );
11692 YYABORT;
11693 }
11694 PropertySharedPtr property;
11695 EdifContextSharedPtr ctx
11696 = inDriver.getContext();
11697 try
11698 {
11699 ctx->getFactory()->create( property );
11700 }
11701 catch( Error &e )
11702 {
11703 std::string message = constructErrorMessage(
11704 "Unable to create Property : %s",
11705 nameData->mName.c_str());
11706 log("%s\n", message.c_str());
11707 e.setCurrentLocation( __FUNCTION__,
11708 __FILE__, __LINE__ );
11709 e.saveContextData( "Parser error message", message );
11710 e.saveContextData( "Filename", yyloc.begin.filename );
11711 e.saveContextData( "StartLine", yyloc.begin.line );
11712 e.saveContextData( "EndLine", yyloc.end.line );
11713 inDriver.setParserError( e );
11714 error( yyloc, message );
11715 YYABORT;
11716 }
11717 property->setName( nameData->mName.c_str() );
11718 if( !nameData->mOriginalName.empty() )
11719 {
11720 property->setOriginalName( nameData->mOriginalName );
11721 }
11722 ctx->pushProperty( property );
11723 ctx->incrementPropertyDepth();
11724 }
11725 break;
11726
11727 case 941:
11728
11729
11730 #line 9396 "Parser.yy"
11731 {
11732 EdifContextSharedPtr ctx
11733 = inDriver.getContext();
11734 PropertySharedPtr currentP
11735 = ctx->getCurrentProperty();
11736 ctx->popProperty();
11737 PropertySharedPtr parentP;
11738 if(ctx->getPropertyDepth() > 1 )
11739 {
11740 parentP = ctx->getCurrentProperty();
11741 }
11742 ctx->decrementPropertyDepth();
11743 PropertyContainerSharedPtr container
11744 =ctx->getCurrentPropertyContainer();
11745 if( parentP )
11746 {
11747 parentP->addChildProperty(
11748 currentP->getName(), currentP );
11749 }
11750 else
11751 {
11752 if( ctx->getIsInInstance() )
11753 {
11754
11755 ctx->pushProperty( currentP );
11756 }
11757 else
11758 {
11759 if( container )
11760 {
11761 container->setProperty(
11762 currentP->getName(), currentP );
11763 }
11764 else
11765 {
11766 log("Property %s is being discarded\n",
11767 currentP->getName().c_str());
11768 }
11769 }
11770 }
11771 }
11772 break;
11773
11774 case 942:
11775
11776
11777 #line 9440 "Parser.yy"
11778 {
11779 boost::scoped_ptr<ValueData> value( (yysemantic_stack_[(1) - (1)].valueData) );
11780 if( value->mValues.size() > 1 )
11781 {
11782 std::string message = constructErrorMessage(
11783 "Property value cannot be an array" );
11784 log("%s\n", message.c_str());
11785 Error e( eMessageIdParserError,
11786 __FUNCTION__, __FILE__, __LINE__ );
11787 e.saveContextData( "Parser error message", message );
11788 e.saveContextData( "Filename", yyloc.begin.filename );
11789 e.saveContextData( "StartLine", yyloc.begin.line );
11790 e.saveContextData( "EndLine", yyloc.end.line );
11791 inDriver.setParserError( e );
11792 error( yyloc, message );
11793 YYABORT;
11794 }
11795 inDriver.getContext()->getCurrentProperty()
11796 ->setValue( value->mValues[0] );
11797 }
11798 break;
11799
11800 case 943:
11801
11802
11803 #line 9461 "Parser.yy"
11804 {
11805 inDriver.getContext()->getCurrentProperty()
11806 ->setOwner( *(yysemantic_stack_[(2) - (2)].stringVal) );
11807 delete (yysemantic_stack_[(2) - (2)].stringVal);
11808 }
11809 break;
11810
11811 case 944:
11812
11813
11814 #line 9467 "Parser.yy"
11815 {
11816 inDriver.getContext()->getCurrentProperty()
11817 ->setUnit( static_cast<Unit>((yysemantic_stack_[(2) - (2)].integerVal)) );
11818 }
11819 break;
11820
11821 case 946:
11822
11823
11824 #line 9473 "Parser.yy"
11825 {
11826 inDriver.getContext()->getCurrentProperty()
11827 ->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
11828 delete (yysemantic_stack_[(2) - (2)].stringVal);
11829 }
11830 break;
11831
11832 case 960:
11833
11834
11835 #line 9500 "Parser.yy"
11836 {
11837 delete (yysemantic_stack_[(2) - (2)].stringVal);
11838 }
11839 break;
11840
11841 case 961:
11842
11843
11844 #line 9504 "Parser.yy"
11845 {
11846 delete (yysemantic_stack_[(2) - (2)].stringVal);
11847 }
11848 break;
11849
11850 case 972:
11851
11852
11853 #line 9526 "Parser.yy"
11854 {
11855 delete (yysemantic_stack_[(5) - (3)].pairData);
11856 }
11857 break;
11858
11859 case 973:
11860
11861
11862 #line 9532 "Parser.yy"
11863 {
11864 delete (yysemantic_stack_[(1) - (1)].pairData);
11865 }
11866 break;
11867
11868 case 978:
11869
11870
11871 #line 9544 "Parser.yy"
11872 {
11873 delete (yysemantic_stack_[(2) - (2)].stringVal);
11874 }
11875 break;
11876
11877 case 979:
11878
11879
11880 #line 9548 "Parser.yy"
11881 {
11882 delete (yysemantic_stack_[(2) - (2)].stringVal);
11883 }
11884 break;
11885
11886 case 980:
11887
11888
11889 #line 9554 "Parser.yy"
11890 {
11891 (yyval.nameData) = (yysemantic_stack_[(5) - (3)].nameData);
11892 (yyval.nameData)->mOriginalName = *(yysemantic_stack_[(5) - (4)].stringVal);
11893 delete (yysemantic_stack_[(5) - (4)].stringVal);
11894 }
11895 break;
11896
11897 case 981:
11898
11899
11900 #line 9562 "Parser.yy"
11901 {
11902 (yyval.nameData) = new NameData();
11903 (yyval.nameData)->mName = *(yysemantic_stack_[(1) - (1)].stringVal);
11904 delete (yysemantic_stack_[(1) - (1)].stringVal);
11905 }
11906 break;
11907
11908 case 982:
11909
11910
11911 #line 9568 "Parser.yy"
11912 {
11913 (yyval.nameData) = (yysemantic_stack_[(1) - (1)].nameData);
11914 }
11915 break;
11916
11917 case 983:
11918
11919
11920 #line 9574 "Parser.yy"
11921 {
11922 (yyval.stringVal) = (yysemantic_stack_[(1) - (1)].stringVal);
11923 }
11924 break;
11925
11926 case 984:
11927
11928
11929 #line 9578 "Parser.yy"
11930 {
11931 (yyval.stringVal) = (yysemantic_stack_[(1) - (1)].stringVal);
11932 }
11933 break;
11934
11935 case 985:
11936
11937
11938 #line 9584 "Parser.yy"
11939 {
11940 (yyval.logicListData) = (yysemantic_stack_[(4) - (3)].logicListData);
11941 }
11942 break;
11943
11944 case 986:
11945
11946
11947 #line 9590 "Parser.yy"
11948 {
11949 (yyval.logicListData) = NULL;
11950 }
11951 break;
11952
11953 case 987:
11954
11955
11956 #line 9594 "Parser.yy"
11957 {
11958 (yyval.logicListData) = ((yysemantic_stack_[(2) - (1)].logicListData))?(yysemantic_stack_[(2) - (1)].logicListData):new LogicListData();
11959 (yyval.logicListData)->mNameDataList.push_back( (yysemantic_stack_[(2) - (2)].nameData) );
11960 }
11961 break;
11962
11963 case 989:
11964
11965
11966 #line 9604 "Parser.yy"
11967 {
11968 delete (yysemantic_stack_[(6) - (3)].pairData);
11969 delete (yysemantic_stack_[(6) - (4)].pairData);
11970 if( (yysemantic_stack_[(6) - (5)].integerVal) );
11971 }
11972 break;
11973
11974 case 990:
11975
11976
11977 #line 9612 "Parser.yy"
11978 {
11979 (yyval.pairData) = new PairData( (yysemantic_stack_[(1) - (1)].integerVal) );
11980 }
11981 break;
11982
11983 case 991:
11984
11985
11986 #line 9616 "Parser.yy"
11987 {
11988 (yyval.pairData) = new PairData( (yysemantic_stack_[(5) - (3)].integerVal), (yysemantic_stack_[(5) - (4)].integerVal) );
11989 }
11990 break;
11991
11992 case 992:
11993
11994
11995 #line 9622 "Parser.yy"
11996 {
11997 if( (yysemantic_stack_[(5) - (3)].integerVal) );
11998 if( (yysemantic_stack_[(5) - (4)].integerVal) );
11999 }
12000 break;
12001
12002 case 993:
12003
12004
12005 #line 9629 "Parser.yy"
12006 {
12007 if( (yysemantic_stack_[(5) - (3)].integerVal) );
12008 if( (yysemantic_stack_[(5) - (4)].integerVal) );
12009 }
12010 break;
12011
12012 case 995:
12013
12014
12015 #line 9639 "Parser.yy"
12016 {
12017 delete (yysemantic_stack_[(1) - (1)].stringVal);
12018 }
12019 break;
12020
12021 case 997:
12022
12023
12024 #line 9644 "Parser.yy"
12025 {
12026 delete (yysemantic_stack_[(2) - (2)].stringVal);
12027 }
12028 break;
12029
12030 case 1003:
12031
12032
12033 #line 9661 "Parser.yy"
12034 {
12035 SimulateSharedPtr simulate;
12036 EdifContextSharedPtr ctx
12037 = inDriver.getContext();
12038 try
12039 {
12040 ctx->getFactory()->create( simulate );
12041 }
12042 catch( Error &e )
12043 {
12044 std::string message = constructErrorMessage(
12045 "Unable to create simulate" );
12046 log("%s\n", message.c_str());
12047 e.setCurrentLocation( __FUNCTION__,
12048 __FILE__, __LINE__ );
12049 e.saveContextData( "Parser error message", message );
12050 e.saveContextData( "Filename", yyloc.begin.filename );
12051 e.saveContextData( "StartLine", yyloc.begin.line );
12052 e.saveContextData( "EndLine", yyloc.end.line );
12053 inDriver.setParserError( e );
12054 error( yyloc, message );
12055 YYABORT;
12056 }
12057 ctx->setCurrentSimulate( simulate );
12058 }
12059 break;
12060
12061 case 1004:
12062
12063
12064 #line 9686 "Parser.yy"
12065 {
12066
12067
12068
12069 }
12070 break;
12071
12072 case 1005:
12073
12074
12075 #line 9694 "Parser.yy"
12076 {
12077 if( (yysemantic_stack_[(1) - (1)].nameData) )
12078 {
12079 EdifContextSharedPtr ctx
12080 = inDriver.getContext();
12081 SimulateSharedPtr simulate
12082 = ctx->getCurrentSimulate();
12083 simulate->setName( (yysemantic_stack_[(1) - (1)].nameData)->mName );
12084 if( !(yysemantic_stack_[(1) - (1)].nameData)->mOriginalName.empty() )
12085 {
12086 simulate->setOriginalName( (yysemantic_stack_[(1) - (1)].nameData)->mOriginalName );
12087 }
12088 delete (yysemantic_stack_[(1) - (1)].nameData);
12089 }
12090 else
12091 {
12092
12093 }
12094 }
12095 break;
12096
12097 case 1009:
12098
12099
12100 #line 9717 "Parser.yy"
12101 {
12102 EdifContextSharedPtr ctx = inDriver.getContext();
12103 SimulateSharedPtr simulate
12104 = ctx->getCurrentSimulate();
12105 simulate->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
12106 delete (yysemantic_stack_[(2) - (2)].stringVal);
12107 }
12108 break;
12109
12110 case 1010:
12111
12112
12113 #line 9725 "Parser.yy"
12114 {
12115 EdifContextSharedPtr ctx = inDriver.getContext();
12116 SimulateSharedPtr simulate
12117 = ctx->getCurrentSimulate();
12118 simulate->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
12119 delete (yysemantic_stack_[(2) - (2)].stringVal);
12120 }
12121 break;
12122
12123 case 1011:
12124
12125
12126 #line 9735 "Parser.yy"
12127 {
12128 SimulationInfoSharedPtr simuInfo;
12129 EdifContextSharedPtr ctx
12130 = inDriver.getContext();
12131 try
12132 {
12133 ctx->getFactory()->create( simuInfo );
12134 }
12135 catch( Error &e )
12136 {
12137 std::string message = constructErrorMessage(
12138 "Unable to create simulation info" );
12139 log("%s\n", message.c_str());
12140 e.setCurrentLocation( __FUNCTION__,
12141 __FILE__, __LINE__ );
12142 e.saveContextData( "Parser error message", message );
12143 e.saveContextData( "Filename", yyloc.begin.filename );
12144 e.saveContextData( "StartLine", yyloc.begin.line );
12145 e.saveContextData( "EndLine", yyloc.end.line );
12146 inDriver.setParserError( e );
12147 error( yyloc, message );
12148 YYABORT;
12149 }
12150 ctx->setCurrentSimulationInfo( simuInfo );
12151 LibrarySharedPtr lib = ctx->getCurrentLibrary();
12152 lib->setSimulationInfo( simuInfo );
12153 }
12154 break;
12155
12156 case 1012:
12157
12158
12159 #line 9762 "Parser.yy"
12160 {
12161 EdifContextSharedPtr ctx = inDriver.getContext();
12162 ctx->setCurrentSimulationInfo(
12163 SimulationInfoSharedPtr() );
12164 }
12165 break;
12166
12167 case 1015:
12168
12169
12170 #line 9772 "Parser.yy"
12171 {
12172 EdifContextSharedPtr ctx = inDriver.getContext();
12173 SimulationInfoSharedPtr simuInfo
12174 = ctx->getCurrentSimulationInfo();
12175 simuInfo->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
12176 delete (yysemantic_stack_[(2) - (2)].stringVal);
12177 }
12178 break;
12179
12180 case 1016:
12181
12182
12183 #line 9780 "Parser.yy"
12184 {
12185 EdifContextSharedPtr ctx = inDriver.getContext();
12186 SimulationInfoSharedPtr simuInfo
12187 = ctx->getCurrentSimulationInfo();
12188 simuInfo->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
12189 delete (yysemantic_stack_[(2) - (2)].stringVal);
12190 }
12191 break;
12192
12193 case 1029:
12194
12195
12196 #line 9818 "Parser.yy"
12197 {
12198 StatusSharedPtr status;
12199 EdifContextSharedPtr ctx
12200 = inDriver.getContext();
12201 try
12202 {
12203 ctx->getFactory()->create( status );
12204 }
12205 catch( Error &e )
12206 {
12207 std::string message = constructErrorMessage(
12208 "Unable to create Status" );
12209 log("%s\n", message.c_str());
12210 e.setCurrentLocation( __FUNCTION__,
12211 __FILE__, __LINE__ );
12212 e.saveContextData( "Parser error message", message );
12213 e.saveContextData( "Filename", yyloc.begin.filename );
12214 e.saveContextData( "StartLine", yyloc.begin.line );
12215 e.saveContextData( "EndLine", yyloc.end.line );
12216 inDriver.setParserError( e );
12217 error( yyloc, message );
12218 YYABORT;
12219 }
12220 ctx->setCurrentStatus( status );
12221 }
12222 break;
12223
12224 case 1030:
12225
12226
12227 #line 9843 "Parser.yy"
12228 {
12229 EdifContextSharedPtr ctx = inDriver.getContext();
12230 StatusSharedPtr currentStatus
12231 = ctx->getCurrentStatus();
12232
12233 StatusContainerSharedPtr container
12234 = ctx->getCurrentStatusContainer();
12235 if( container )
12236 {
12237 container->addStatus( currentStatus );
12238 }
12239 else
12240 {
12241 log( "Status is being discarded\n" );
12242 }
12243 }
12244 break;
12245
12246 case 1033:
12247
12248
12249 #line 9864 "Parser.yy"
12250 {
12251 EdifContextSharedPtr ctx = inDriver.getContext();
12252 StatusSharedPtr status = ctx->getCurrentStatus();
12253 status->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
12254 delete (yysemantic_stack_[(2) - (2)].stringVal);
12255 }
12256 break;
12257
12258 case 1034:
12259
12260
12261 #line 9871 "Parser.yy"
12262 {
12263 EdifContextSharedPtr ctx = inDriver.getContext();
12264 StatusSharedPtr status = ctx->getCurrentStatus();
12265 status->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
12266 delete (yysemantic_stack_[(2) - (2)].stringVal);
12267 }
12268 break;
12269
12270 case 1039:
12271
12272
12273 #line 9888 "Parser.yy"
12274 {
12275 delete (yysemantic_stack_[(1) - (1)].pairData);
12276 }
12277 break;
12278
12279 case 1042:
12280
12281
12282 #line 9896 "Parser.yy"
12283 {
12284 (yyval.stringVal) = (yysemantic_stack_[(4) - (3)].stringVal);
12285 }
12286 break;
12287
12288 case 1043:
12289
12290
12291 #line 9902 "Parser.yy"
12292 {
12293 if( (yysemantic_stack_[(4) - (2)].stringVal) );
12294 if( NULL == (yysemantic_stack_[(4) - (3)].valueData) )
12295 {
12296 (yyval.valueData) = new ValueData();
12297 (yyval.valueData)->mValues.push_back( Value(
12298 Value::eValueTypeString ) );
12299 }
12300 else
12301 {
12302 (yyval.valueData) = (yysemantic_stack_[(4) - (3)].valueData);
12303 }
12304 }
12305 break;
12306
12307 case 1044:
12308
12309
12310 #line 9918 "Parser.yy"
12311 {
12312 (yyval.valueData) = NULL;
12313 }
12314 break;
12315
12316 case 1045:
12317
12318
12319 #line 9922 "Parser.yy"
12320 {
12321 (yyval.valueData) = ( (yysemantic_stack_[(2) - (1)].valueData) ) ? (yysemantic_stack_[(2) - (1)].valueData) : new ValueData();
12322 (yyval.valueData)->mValues.push_back( Value(
12323 Value::eValueTypeString, *(yysemantic_stack_[(2) - (2)].stringVal) ) );
12324 delete (yysemantic_stack_[(2) - (2)].stringVal);
12325 }
12326 break;
12327
12328 case 1046:
12329
12330
12331 #line 9929 "Parser.yy"
12332 {
12333 (yyval.valueData) = ( (yysemantic_stack_[(2) - (1)].valueData) ) ? (yysemantic_stack_[(2) - (1)].valueData) : new ValueData();
12334 (yyval.valueData)->mValues.push_back( Value(
12335 Value::eValueTypeString, *(yysemantic_stack_[(2) - (2)].stringVal) ) );
12336 delete (yysemantic_stack_[(2) - (2)].stringVal);
12337 }
12338 break;
12339
12340 case 1047:
12341
12342
12343 #line 9936 "Parser.yy"
12344 {
12345 (yyval.valueData) = (yysemantic_stack_[(2) - (2)].valueData);
12346 if( (yysemantic_stack_[(2) - (1)].valueData) )
12347 {
12348 (yysemantic_stack_[(2) - (1)].valueData)->mValues.insert( (yysemantic_stack_[(2) - (1)].valueData)->mValues.end(),
12349 (yyval.valueData)->mValues.begin(), (yyval.valueData)->mValues.end() );
12350 (yyval.valueData)->mValues = (yysemantic_stack_[(2) - (1)].valueData)->mValues;
12351 delete (yysemantic_stack_[(2) - (1)].valueData);
12352 }
12353 }
12354 break;
12355
12356 case 1048:
12357
12358
12359 #line 9949 "Parser.yy"
12360 {
12361 (yyval.stringVal) = (yysemantic_stack_[(1) - (1)].stringVal);
12362 }
12363 break;
12364
12365 case 1049:
12366
12367
12368 #line 9953 "Parser.yy"
12369 {
12370 (yyval.stringVal) = (yysemantic_stack_[(2) - (1)].stringVal);
12371 }
12372 break;
12373
12374 case 1050:
12375
12376
12377 #line 9959 "Parser.yy"
12378 {
12379 (yyval.nameData) = (yysemantic_stack_[(4) - (3)].nameData);
12380 }
12381 break;
12382
12383 case 1064:
12384
12385
12386 #line 9980 "Parser.yy"
12387 {
12388 delete (yysemantic_stack_[(2) - (2)].stringVal);
12389 }
12390 break;
12391
12392 case 1065:
12393
12394
12395 #line 9984 "Parser.yy"
12396 {
12397 delete (yysemantic_stack_[(2) - (2)].stringVal);
12398 }
12399 break;
12400
12401 case 1074:
12402
12403
12404 #line 10008 "Parser.yy"
12405 {
12406 delete (yysemantic_stack_[(1) - (1)].logicRefData);
12407 }
12408 break;
12409
12410 case 1081:
12411
12412
12413 #line 10022 "Parser.yy"
12414 {
12415 log("PRINT TECHNOLOGY \n");
12416 }
12417 break;
12418
12419 case 1087:
12420
12421
12422 #line 10033 "Parser.yy"
12423 {
12424 delete (yysemantic_stack_[(2) - (2)].stringVal);
12425 }
12426 break;
12427
12428 case 1088:
12429
12430
12431 #line 10037 "Parser.yy"
12432 {
12433 delete (yysemantic_stack_[(2) - (2)].stringVal);
12434 }
12435 break;
12436
12437 case 1089:
12438
12439
12440 #line 10043 "Parser.yy"
12441 {
12442 if( (yysemantic_stack_[(4) - (3)].integerVal) );
12443 }
12444 break;
12445
12446 case 1091:
12447
12448
12449 #line 10052 "Parser.yy"
12450 {
12451 EdifContextSharedPtr ctx = inDriver.getContext();
12452 ForbiddenEventSharedPtr forbiddenEvent
12453 = ctx->getCurrentForbiddenEvent();
12454 EventSharedPtr event
12455 = ctx->getCurrentEvent();
12456 event->setType( Event::eTypeEvent );
12457 forbiddenEvent->setStartTimeInterval( event );
12458 ctx->setCurrentEvent( EventSharedPtr() );
12459 }
12460 break;
12461
12462 case 1092:
12463
12464
12465 #line 10063 "Parser.yy"
12466 {
12467 boost::scoped_ptr<PairData> data( (yysemantic_stack_[(1) - (1)].pairData) );
12468 Value::Number num( data->mX, data->mY );
12469 Value val( Value::eValueTypeNumber, num );
12470
12471 EdifContextSharedPtr ctx = inDriver.getContext();
12472 ForbiddenEventSharedPtr forbiddenEvent
12473 = ctx->getCurrentForbiddenEvent();
12474 EventSharedPtr event
12475 = ctx->getCurrentEvent();
12476 event->setType( Event::eTypeOffsetEvent );
12477 event->setOffsetTime( val );
12478 forbiddenEvent->setStartTimeInterval( event );
12479 ctx->setCurrentEvent( EventSharedPtr() );
12480 }
12481 break;
12482
12483 case 1093:
12484
12485
12486 #line 10081 "Parser.yy"
12487 {
12488 EdifContextSharedPtr ctx = inDriver.getContext();
12489 ForbiddenEventSharedPtr forbiddenEvent
12490 = ctx->getCurrentForbiddenEvent();
12491 EventSharedPtr event
12492 = ctx->getCurrentEvent();
12493 event->setType( Event::eTypeEvent );
12494 forbiddenEvent->setEndTimeInterval( event );
12495 ctx->setCurrentEvent( EventSharedPtr() );
12496 }
12497 break;
12498
12499 case 1094:
12500
12501
12502 #line 10092 "Parser.yy"
12503 {
12504 boost::scoped_ptr<PairData> data( (yysemantic_stack_[(1) - (1)].pairData) );
12505 Value::Number num( data->mX, data->mY );
12506 Value val( Value::eValueTypeNumber, num );
12507
12508 EdifContextSharedPtr ctx = inDriver.getContext();
12509 ForbiddenEventSharedPtr forbiddenEvent
12510 = ctx->getCurrentForbiddenEvent();
12511 EventSharedPtr event
12512 = ctx->getCurrentEvent();
12513 event->setType( Event::eTypeOffsetEvent );
12514 event->setOffsetTime( val );
12515 forbiddenEvent->setEndTimeInterval( event );
12516 ctx->setCurrentEvent( EventSharedPtr() );
12517 }
12518 break;
12519
12520 case 1095:
12521
12522
12523 #line 10108 "Parser.yy"
12524 {
12525 EdifContextSharedPtr ctx = inDriver.getContext();
12526 ForbiddenEventSharedPtr forbiddenEvent
12527 = ctx->getCurrentForbiddenEvent();
12528
12529 boost::scoped_ptr<PairData> data( (yysemantic_stack_[(1) - (1)].pairData) );
12530 Value::Number num( data->mX, data->mY );
12531 Value val( Value::eValueTypeNumber, num );
12532 forbiddenEvent->setDuration( val );
12533 }
12534 break;
12535
12536 case 1096:
12537
12538
12539 #line 10121 "Parser.yy"
12540 {
12541 if( (yysemantic_stack_[(9) - (3)].integerVal) );
12542 if( (yysemantic_stack_[(9) - (4)].integerVal) );
12543 if( (yysemantic_stack_[(9) - (5)].integerVal) );
12544 if( (yysemantic_stack_[(9) - (6)].integerVal) );
12545 if( (yysemantic_stack_[(9) - (7)].integerVal) );
12546 if( (yysemantic_stack_[(9) - (8)].integerVal) );
12547 (yyval.timeStamp) = new TimeStamp();
12548 (yyval.timeStamp)->setYear( (yysemantic_stack_[(9) - (3)].integerVal) );
12549 (yyval.timeStamp)->setMonth( (yysemantic_stack_[(9) - (4)].integerVal) );
12550 (yyval.timeStamp)->setDay( (yysemantic_stack_[(9) - (5)].integerVal) );
12551 (yyval.timeStamp)->setHour( (yysemantic_stack_[(9) - (6)].integerVal) );
12552 (yyval.timeStamp)->setMinute( (yysemantic_stack_[(9) - (7)].integerVal) );
12553 (yyval.timeStamp)->setSecond( (yysemantic_stack_[(9) - (8)].integerVal) );
12554 }
12555 break;
12556
12557 case 1097:
12558
12559
12560 #line 10139 "Parser.yy"
12561 {
12562 TimingSharedPtr timing;
12563 EdifContextSharedPtr ctx
12564 = inDriver.getContext();
12565 try
12566 {
12567 ctx->getFactory()->create( timing );
12568 }
12569 catch( Error &e )
12570 {
12571 std::string message = constructErrorMessage(
12572 "Unable to create timing" );
12573 log("%s\n", message.c_str());
12574 e.setCurrentLocation( __FUNCTION__,
12575 __FILE__, __LINE__ );
12576 e.saveContextData( "Parser error message", message );
12577 e.saveContextData( "Filename", yyloc.begin.filename );
12578 e.saveContextData( "StartLine", yyloc.begin.line );
12579 e.saveContextData( "EndLine", yyloc.end.line );
12580 inDriver.setParserError( e );
12581 error( yyloc, message );
12582 YYABORT;
12583 }
12584 ctx->setCurrentTiming( timing );
12585 }
12586 break;
12587
12588 case 1098:
12589
12590
12591 #line 10164 "Parser.yy"
12592 {
12593
12594
12595
12596 }
12597 break;
12598
12599 case 1099:
12600
12601
12602 #line 10172 "Parser.yy"
12603 {
12604 EdifContextSharedPtr ctx
12605 = inDriver.getContext();
12606 TimingSharedPtr timing
12607 = ctx->getCurrentTiming();
12608 timing->setDerivation(
12609 static_cast<Derivation>( (yysemantic_stack_[(1) - (1)].integerVal) ) );
12610 }
12611 break;
12612
12613 case 1102:
12614
12615
12616 #line 10183 "Parser.yy"
12617 {
12618 EdifContextSharedPtr ctx
12619 = inDriver.getContext();
12620 TimingSharedPtr timing
12621 = ctx->getCurrentTiming();
12622 timing->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
12623 delete (yysemantic_stack_[(2) - (2)].stringVal);
12624 }
12625 break;
12626
12627 case 1103:
12628
12629
12630 #line 10192 "Parser.yy"
12631 {
12632 EdifContextSharedPtr ctx
12633 = inDriver.getContext();
12634 TimingSharedPtr timing
12635 = ctx->getCurrentTiming();
12636 timing->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
12637 delete (yysemantic_stack_[(2) - (2)].stringVal);
12638 }
12639 break;
12640
12641 case 1111:
12642
12643
12644 #line 10214 "Parser.yy"
12645 {
12646 EdifContextSharedPtr ctx
12647 = inDriver.getContext();
12648 LogicElementSharedPtr logicElem;
12649 try
12650 {
12651 ctx->getFactory()->create( logicElem );
12652 logicElem->setType( LogicElement::eTypeTransition );
12653 }
12654 catch( Error &e )
12655 {
12656 std::string message = constructErrorMessage(
12657 "Unable to create transition" );
12658 log("%s\n", message.c_str());
12659 e.setCurrentLocation( __FUNCTION__,
12660 __FILE__, __LINE__ );
12661 e.saveContextData( "Parser error message", message );
12662 e.saveContextData( "Filename", yyloc.begin.filename );
12663 e.saveContextData( "StartLine", yyloc.begin.line );
12664 e.saveContextData( "EndLine", yyloc.end.line );
12665 inDriver.setParserError( e );
12666 error( yyloc, message );
12667 YYABORT;
12668 }
12669 ctx->pushLogicElement( logicElem );
12670 ctx->incrementLogicElementDepth();
12671 }
12672 break;
12673
12674 case 1135:
12675
12676
12677 #line 10284 "Parser.yy"
12678 {
12679 (yyval.integerVal) = (yysemantic_stack_[(4) - (3)].integerVal);
12680 }
12681 break;
12682
12683 case 1136:
12684
12685
12686 #line 10290 "Parser.yy"
12687 {
12688 (yyval.integerVal) = 1;
12689 }
12690 break;
12691
12692 case 1137:
12693
12694
12695 #line 10294 "Parser.yy"
12696 {
12697 (yyval.integerVal) = 2;
12698 }
12699 break;
12700
12701 case 1138:
12702
12703
12704 #line 10298 "Parser.yy"
12705 {
12706 (yyval.integerVal) = 3;
12707 }
12708 break;
12709
12710 case 1139:
12711
12712
12713 #line 10302 "Parser.yy"
12714 {
12715 (yyval.integerVal) = 4;
12716 }
12717 break;
12718
12719 case 1140:
12720
12721
12722 #line 10306 "Parser.yy"
12723 {
12724 (yyval.integerVal) = 5;
12725 }
12726 break;
12727
12728 case 1141:
12729
12730
12731 #line 10310 "Parser.yy"
12732 {
12733 (yyval.integerVal) = 6;
12734 }
12735 break;
12736
12737 case 1142:
12738
12739
12740 #line 10314 "Parser.yy"
12741 {
12742 (yyval.integerVal) = 7;
12743 }
12744 break;
12745
12746 case 1143:
12747
12748
12749 #line 10318 "Parser.yy"
12750 {
12751 (yyval.integerVal) = 8;
12752 }
12753 break;
12754
12755 case 1144:
12756
12757
12758 #line 10322 "Parser.yy"
12759 {
12760 (yyval.integerVal) = 9;
12761 }
12762 break;
12763
12764 case 1145:
12765
12766
12767 #line 10326 "Parser.yy"
12768 {
12769 (yyval.integerVal) = 10;
12770 }
12771 break;
12772
12773 case 1146:
12774
12775
12776 #line 10330 "Parser.yy"
12777 {
12778 (yyval.integerVal) = 11;
12779 }
12780 break;
12781
12782 case 1147:
12783
12784
12785 #line 10334 "Parser.yy"
12786 {
12787 (yyval.integerVal) = 12;
12788 }
12789 break;
12790
12791 case 1148:
12792
12793
12794 #line 10338 "Parser.yy"
12795 {
12796 (yyval.integerVal) = 13;
12797 }
12798 break;
12799
12800 case 1149:
12801
12802
12803 #line 10342 "Parser.yy"
12804 {
12805 (yyval.integerVal) = 14;
12806 }
12807 break;
12808
12809 case 1150:
12810
12811
12812 #line 10346 "Parser.yy"
12813 {
12814 (yyval.integerVal) = 15;
12815 }
12816 break;
12817
12818 case 1151:
12819
12820
12821 #line 10350 "Parser.yy"
12822 {
12823 (yyval.integerVal) = 16;
12824 }
12825 break;
12826
12827 case 1153:
12828
12829
12830 #line 10359 "Parser.yy"
12831 {
12832 (yyval.integerVal) = 1;
12833 }
12834 break;
12835
12836 case 1154:
12837
12838
12839 #line 10365 "Parser.yy"
12840 {
12841 inDriver.getLexer()->setAppendToUserDataBuffer( true );
12842 inDriver.getLexer()->resetUserDataBuffer();
12843 }
12844 break;
12845
12846 case 1155:
12847
12848
12849 #line 10369 "Parser.yy"
12850 {
12851 std::string val = inDriver.getLexer()->getUserDataBuffer();
12852 (yyval.stringVal) = new std::string( val );
12853 inDriver.getLexer()->setAppendToUserDataBuffer( false );
12854 inDriver.getLexer()->resetUserDataBuffer();
12855 }
12856 break;
12857
12858 case 1156:
12859
12860
12861 #line 10378 "Parser.yy"
12862 {
12863 delete (yysemantic_stack_[(1) - (1)].stringVal);
12864 }
12865 break;
12866
12867 case 1157:
12868
12869
12870 #line 10382 "Parser.yy"
12871 {
12872 if( (yysemantic_stack_[(2) - (2)].integerVal) );
12873 }
12874 break;
12875
12876 case 1158:
12877
12878
12879 #line 10386 "Parser.yy"
12880 {
12881 delete (yysemantic_stack_[(2) - (2)].stringVal);
12882 }
12883 break;
12884
12885 case 1159:
12886
12887
12888 #line 10390 "Parser.yy"
12889 {
12890 delete (yysemantic_stack_[(2) - (2)].stringVal);
12891 }
12892 break;
12893
12894 case 1167:
12895
12896
12897 #line 10409 "Parser.yy"
12898 {
12899 (yyval.stringVal) = (yysemantic_stack_[(4) - (3)].stringVal);
12900 }
12901 break;
12902
12903 case 1168:
12904
12905
12906 #line 10415 "Parser.yy"
12907 {
12908 boost::scoped_ptr<NameData> nameData((yysemantic_stack_[(3) - (3)].nameData));
12909 std::string name = nameData->mName;
12910 EdifContextSharedPtr ctx = inDriver.getContext();
12911 ViewSharedPtr view;
12912 CellSharedPtr cell = ctx->getCurrentCell();
12913 view = cell->findView( name );
12914 bool isCellExtern = cell->getIsExtern();
12915 if( view )
12916 {
12917 log("Found existing view\n");
12918 if( isCellExtern )
12919 {
12920 if( !view->getIsExtern() )
12921 {
12922 std::string message = constructErrorMessage(
12923 "View %s already exists in cell %s\n",
12924 name.c_str(), view->getName().c_str() );
12925 log("%s\n", message.c_str());
12926 Error e( eMessageIdParserError,
12927 __FUNCTION__, __FILE__, __LINE__ );
12928 e.setCurrentLocation( __FUNCTION__,
12929 __FILE__, __LINE__ );
12930 e.saveContextData( "Parser error message", message );
12931 e.saveContextData( "Filename", yyloc.begin.filename );
12932 e.saveContextData( "StartLine", yyloc.begin.line );
12933 e.saveContextData( "EndLine", yyloc.end.line );
12934 inDriver.setParserError( e );
12935 error( yyloc, message );
12936 YYABORT;
12937 }
12938 else
12939 {
12940 log( "Extern view %s already exists in %s\n",
12941 name.c_str(), cell->getName().c_str() );
12942 }
12943 }
12944 else
12945 {
12946 if( view->getIsExtern() )
12947 {
12948 log("Found extern view of this name\n");
12949 view->setIsExtern( false );
12950 ctx->setIsViewBeingLinked( true );
12951 }
12952 else
12953 {
12954 log("View %s already found.. Ignoring\n",
12955 name.c_str());
12956
12957 #if 0
12958 std::string message = constructErrorMessage(
12959 "View %s already exists in cell %s\n",
12960 name.c_str(), cell->getName().c_str() );
12961 log("%s\n", message.c_str());
12962 Error e( eMessageIdParserError,
12963 __FUNCTION__, __FILE__, __LINE__ );
12964 e.setCurrentLocation( __FUNCTION__,
12965 __FILE__, __LINE__ );
12966 e.saveContextData( "Parser error message", message );
12967 e.saveContextData( "Filename", yyloc.begin.filename );
12968 e.saveContextData( "StartLine", yyloc.begin.line );
12969 e.saveContextData( "EndLine", yyloc.end.line );
12970 inDriver.setParserError( e );
12971 error( yyloc, message );
12972 YYABORT;
12973 #endif
12974 }
12975 }
12976 }
12977 else
12978 {
12979 try
12980 {
12981 ctx->getFactory()->create( view );
12982 }
12983 catch( Error &e )
12984 {
12985 std::string message = constructErrorMessage(
12986 "Unable to create View : %s",
12987 view->getName().c_str());
12988 log("%s\n", message.c_str());
12989 e.setCurrentLocation( __FUNCTION__,
12990 __FILE__, __LINE__ );
12991 e.saveContextData( "Parser error message", message );
12992 e.saveContextData( "Filename", yyloc.begin.filename );
12993 e.saveContextData( "StartLine", yyloc.begin.line );
12994 e.saveContextData( "EndLine", yyloc.end.line );
12995 inDriver.setParserError( e );
12996 error( yyloc, message );
12997 YYABORT;
12998 }
12999 view->setName( name );
13000 if( !nameData->mOriginalName.empty() )
13001 {
13002 view->setOriginalName( nameData->mOriginalName );
13003 }
13004 view->setIsExtern( isCellExtern );
13005 view->setParent( cell );
13006 cell->addView( view );
13007 LinkerSharedPtr linker = ctx->getLinker();
13008 Linker::NameSpec viewNameSpec(
13009 cell->getParent()->getName(),
13010 cell->getName(), view->getName() );
13011 if( isCellExtern )
13012 {
13013 linker->setExternView( viewNameSpec, view );
13014 log("Extern view %s saved in linker.\n",
13015 view->getName().c_str() );
13016 }
13017 else
13018 {
13019 linker->linkUnresolved( viewNameSpec, view );
13020 }
13021 log( "Created view %s\n", view->getName().c_str() );
13022 }
13023 ctx->setCurrentView( view );
13024 log("View %s added\n",
13025 view->getName().c_str());
13026 ctx->pushPropertyContainer( view );
13027 ctx->pushStatusContainer( view );
13028 }
13029 break;
13030
13031 case 1169:
13032
13033
13034 #line 10537 "Parser.yy"
13035 {
13036 ViewSharedPtr view = inDriver.getContext()->getCurrentView();
13037 if( View::eTypeNetlist != view->getType() )
13038 {
13039 view->setNonNetlistViewData(inDriver.getLexer()->getBuffer());
13040 }
13041 inDriver.getContext()->setCurrentView(
13042 ViewSharedPtr() );
13043 inDriver.getContext()->setIsViewBeingLinked( false );
13044 inDriver.getContext()->popPropertyContainer();
13045 inDriver.getContext()->popStatusContainer();
13046
13047 inDriver.getLexer()->setAppendToBuffer( false );
13048 log("%s\n", inDriver.getLexer()->getBuffer().c_str());
13049
13050 inDriver.getLexer()->resetBuffer();
13051 }
13052 break;
13053
13054 case 1170:
13055
13056
13057 #line 10557 "Parser.yy"
13058 {
13059 EdifContextSharedPtr ctx = inDriver.getContext();
13060 ViewSharedPtr view = ctx->getCurrentView();
13061 if( (yysemantic_stack_[(1) - (1)].interfaceAttributes) )
13062 {
13063 InterfaceAttributesSharedPtr attrib( (yysemantic_stack_[(1) - (1)].interfaceAttributes) );
13064 view->setInterfaceAttributes( attrib );
13065 }
13066 }
13067 break;
13068
13069 case 1173:
13070
13071
13072 #line 10569 "Parser.yy"
13073 {
13074 EdifContextSharedPtr ctx = inDriver.getContext();
13075 ViewSharedPtr view = ctx->getCurrentView();
13076 view->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
13077 delete (yysemantic_stack_[(2) - (2)].stringVal);
13078 }
13079 break;
13080
13081 case 1175:
13082
13083
13084 #line 10577 "Parser.yy"
13085 {
13086 EdifContextSharedPtr ctx = inDriver.getContext();
13087 ViewSharedPtr view = ctx->getCurrentView();
13088 if( View::eTypeNetlist == view->getType() )
13089 {
13090 view->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
13091 delete (yysemantic_stack_[(2) - (2)].stringVal);
13092 }
13093 }
13094 break;
13095
13096 case 1188:
13097
13098
13099 #line 10607 "Parser.yy"
13100 {
13101 delete (yysemantic_stack_[(2) - (2)].stringVal);
13102 }
13103 break;
13104
13105 case 1189:
13106
13107
13108 #line 10611 "Parser.yy"
13109 {
13110 delete (yysemantic_stack_[(2) - (2)].stringVal);
13111 }
13112 break;
13113
13114 case 1196:
13115
13116
13117 #line 10633 "Parser.yy"
13118 {
13119 if( NULL == (yysemantic_stack_[(5) - (4)].viewRefData) )
13120 {
13121 (yyval.viewRefData) = new ViewRefData();
13122 }
13123 else
13124 {
13125 (yyval.viewRefData) = (yysemantic_stack_[(5) - (4)].viewRefData);
13126 }
13127 (yyval.viewRefData)->mViewName = (yysemantic_stack_[(5) - (3)].nameData);
13128 }
13129 break;
13130
13131 case 1197:
13132
13133
13134 #line 10647 "Parser.yy"
13135 {
13136 (yyval.viewRefData) = NULL;
13137 }
13138 break;
13139
13140 case 1198:
13141
13142
13143 #line 10651 "Parser.yy"
13144 {
13145 (yyval.viewRefData) = (yysemantic_stack_[(1) - (1)].viewRefData);
13146 }
13147 break;
13148
13149 case 1199:
13150
13151
13152 #line 10657 "Parser.yy"
13153 {
13154 View::Type viewType = static_cast<View::Type>( (yysemantic_stack_[(4) - (3)].integerVal) );
13155 if( View::eTypeNetlist != viewType )
13156 {
13157
13158 std::string message = constructErrorMessage(
13159 "Warning::View types other than netlist are ignored");
13160 log("%s\n", message.c_str());
13161
13162
13163
13164
13165
13166
13167
13168
13169
13170 inDriver.getLexer()->setAppendToBuffer( true );
13171 inDriver.getLexer()->resetBuffer();
13172 }
13173 inDriver.getContext()->getCurrentView()->setType(
13174 viewType );
13175 }
13176 break;
13177
13178 case 1200:
13179
13180
13181 #line 10683 "Parser.yy"
13182 {
13183 (yyval.integerVal) = View::eTypeMaskLayout;
13184 }
13185 break;
13186
13187 case 1201:
13188
13189
13190 #line 10687 "Parser.yy"
13191 {
13192 (yyval.integerVal) = View::eTypePCBLayout;
13193 }
13194 break;
13195
13196 case 1202:
13197
13198
13199 #line 10691 "Parser.yy"
13200 {
13201 (yyval.integerVal) = View::eTypeNetlist;
13202 }
13203 break;
13204
13205 case 1203:
13206
13207
13208 #line 10695 "Parser.yy"
13209 {
13210 (yyval.integerVal) = View::eTypeSchematic;
13211 }
13212 break;
13213
13214 case 1204:
13215
13216
13217 #line 10699 "Parser.yy"
13218 {
13219 (yyval.integerVal) = View::eTypeSymbolic;
13220 }
13221 break;
13222
13223 case 1205:
13224
13225
13226 #line 10703 "Parser.yy"
13227 {
13228 (yyval.integerVal) = View::eTypeBehavior;
13229 }
13230 break;
13231
13232 case 1206:
13233
13234
13235 #line 10707 "Parser.yy"
13236 {
13237 (yyval.integerVal) = View::eTypeLogicModel;
13238 }
13239 break;
13240
13241 case 1207:
13242
13243
13244 #line 10711 "Parser.yy"
13245 {
13246 (yyval.integerVal) = View::eTypeDocument;
13247 }
13248 break;
13249
13250 case 1208:
13251
13252
13253 #line 10715 "Parser.yy"
13254 {
13255 (yyval.integerVal) = View::eTypeGraphic;
13256 }
13257 break;
13258
13259 case 1209:
13260
13261
13262 #line 10719 "Parser.yy"
13263 {
13264 (yyval.integerVal) = View::eTypeStranger;
13265 }
13266 break;
13267
13268 case 1210:
13269
13270
13271 #line 10725 "Parser.yy"
13272 {
13273 if( (yysemantic_stack_[(4) - (3)].integerVal) );
13274 }
13275 break;
13276
13277 case 1211:
13278
13279
13280 #line 10731 "Parser.yy"
13281 {
13282 (yyval.valueData) = (yysemantic_stack_[(4) - (3)].valueData);
13283 }
13284 break;
13285
13286 case 1212:
13287
13288
13289 #line 10737 "Parser.yy"
13290 {
13291 if( (yysemantic_stack_[(4) - (3)].nameData) )
13292 {
13293 boost::scoped_ptr<NameData> nameData( (yysemantic_stack_[(4) - (3)].nameData) );
13294 std::string name = nameData->mName;
13295 EdifContextSharedPtr ctx = inDriver.getContext();
13296 WaveValueSharedPtr waveValue;
13297 try
13298 {
13299 ctx->getFactory()->create( waveValue );
13300 waveValue->setName( name );
13301 }
13302 catch( Error &e )
13303 {
13304 std::string message = constructErrorMessage(
13305 "Unable to create WaveValue" );
13306 log("%s\n", message.c_str());
13307 e.setCurrentLocation( __FUNCTION__,
13308 __FILE__, __LINE__ );
13309 e.saveContextData( "Parser error message", message );
13310 e.saveContextData( "Filename", yyloc.begin.filename );
13311 e.saveContextData( "StartLine", yyloc.begin.line );
13312 e.saveContextData( "EndLine", yyloc.end.line );
13313 inDriver.setParserError( e );
13314 error( yyloc, message );
13315 YYABORT;
13316 }
13317 boost::scoped_ptr<PairData> data((yysemantic_stack_[(4) - (4)].pairData));
13318 Value::Number num( data->mX, data->mY );
13319 Value val( Value::eValueTypeNumber, num );
13320 waveValue->setDeltaTimeDuration( val );
13321
13322 SimulateSharedPtr simulate
13323 = ctx->getCurrentSimulate();
13324 try
13325 {
13326 simulate->addWaveValue( waveValue );
13327 }
13328 catch( Error &e )
13329 {
13330 std::string message = constructErrorMessage(
13331 "Unable to add wave value : %s",
13332 waveValue->getName().c_str());
13333 log("%s\n", message.c_str());
13334 e.setCurrentLocation( __FUNCTION__,
13335 __FILE__, __LINE__ );
13336 e.saveContextData( "Parser error message", message );
13337 e.saveContextData( "Filename", yyloc.begin.filename );
13338 e.saveContextData( "StartLine", yyloc.begin.line );
13339 e.saveContextData( "EndLine", yyloc.end.line );
13340 inDriver.setParserError( e );
13341 error( yyloc, message );
13342 YYABORT;
13343 }
13344 ctx->setCurrentWaveValue( waveValue );
13345 }
13346 }
13347 break;
13348
13349 case 1213:
13350
13351
13352 #line 10794 "Parser.yy"
13353 {
13354 EdifContextSharedPtr ctx = inDriver.getContext();
13355 ctx->setCurrentWaveValue( WaveValueSharedPtr() );
13356 }
13357 break;
13358
13359 case 1214:
13360
13361
13362 #line 10801 "Parser.yy"
13363 {
13364 (yyval.nameData) = (yysemantic_stack_[(4) - (3)].nameData);
13365 }
13366 break;
13367
13368 case 1215:
13369
13370
13371 #line 10807 "Parser.yy"
13372 {
13373 InterfaceJoinedInfoSharedPtr joinedInfo;
13374 EdifContextSharedPtr ctx
13375 = inDriver.getContext();
13376 try
13377 {
13378 ctx->getFactory()->create( joinedInfo );
13379 joinedInfo->setJoinedType(
13380 InterfaceJoinedInfo::eJoinedTypeWeak );
13381 }
13382 catch( Error &e )
13383 {
13384 std::string message = constructErrorMessage(
13385 "Unable to create weak joined info" );
13386 log("%s\n", message.c_str());
13387 e.setCurrentLocation( __FUNCTION__,
13388 __FILE__, __LINE__ );
13389 e.saveContextData( "Parser error message", message );
13390 e.saveContextData( "Filename", yyloc.begin.filename );
13391 e.saveContextData( "StartLine", yyloc.begin.line );
13392 e.saveContextData( "EndLine", yyloc.end.line );
13393 inDriver.setParserError( e );
13394 error( yyloc, message );
13395 YYABORT;
13396 }
13397 if(ctx->getInterfaceJoinedInfoDepth() == 0 )
13398 {
13399 ctx->getCurrentView()->addInterfaceJoinedInfo( joinedInfo );
13400 }
13401 ctx->pushInterfaceJoinedInfo( joinedInfo );
13402 ctx->incrementInterfaceJoinedInfoDepth();
13403 }
13404 break;
13405
13406 case 1216:
13407
13408
13409 #line 10839 "Parser.yy"
13410 {
13411 EdifContextSharedPtr ctx = inDriver.getContext();
13412 InterfaceJoinedInfoSharedPtr currentJoinedInfo
13413 = ctx->getCurrentInterfaceJoinedInfo();
13414 ctx->popInterfaceJoinedInfo();
13415 InterfaceJoinedInfoSharedPtr parentJoinedInfo;
13416 if(ctx->getInterfaceJoinedInfoDepth() > 1 )
13417 {
13418 parentJoinedInfo = ctx->getCurrentInterfaceJoinedInfo();
13419 }
13420 ctx->decrementInterfaceJoinedInfoDepth();
13421 if( parentJoinedInfo )
13422 {
13423 parentJoinedInfo->setRelationType(
13424 InterfaceJoinedInfo::eRelationTypeParent );
13425 currentJoinedInfo->setRelationType(
13426 InterfaceJoinedInfo::eRelationTypeChild );
13427
13428 size_t parentJoinedInfoSize = parentJoinedInfo->getSize();
13429 size_t currentJoinedInfoSize = currentJoinedInfo->getSize();
13430
13431 log("Parent joined info Size :: %d\n",
13432 parentJoinedInfoSize );
13433 log("Current joined info Size :: %d\n",
13434 currentJoinedInfoSize );
13435
13436
13437
13438
13439 std::vector< InterfaceJoinedInfoSharedPtr > outJoinedInfos;
13440 parentJoinedInfo->getChildren( outJoinedInfos );
13441
13442 std::list< PortSharedPtr > outPorts;
13443 parentJoinedInfo->getPorts( outPorts );
13444
13445 std::list< PortListSharedPtr > outPortLists;
13446 parentJoinedInfo->getPortLists( outPortLists );
13447
13448 if( parentJoinedInfoSize != 0 )
13449 {
13450 if( parentJoinedInfoSize
13451 == currentJoinedInfoSize )
13452 {
13453 parentJoinedInfo->addChildJoinedInfo(
13454 currentJoinedInfo );
13455 }
13456 else
13457 {
13458 std::string message = constructErrorMessage(
13459 "Child joined info can't be added, port size mismatch %d with %d",
13460 parentJoinedInfoSize,
13461 currentJoinedInfoSize);
13462 log("%s\n", message.c_str());
13463 Error e( eMessageIdParserError,
13464 __FUNCTION__, __FILE__, __LINE__ );
13465 e.saveContextData( "Parser error message", message );
13466 e.saveContextData( "Filename", yyloc.begin.filename );
13467 e.saveContextData( "StartLine", yyloc.begin.line );
13468 e.saveContextData( "EndLine", yyloc.end.line );
13469 inDriver.setParserError( e );
13470 error( yyloc, message );
13471 YYABORT;
13472 }
13473 }
13474 else
13475 {
13476 parentJoinedInfo->addChildJoinedInfo(
13477 currentJoinedInfo );
13478 }
13479 }
13480 else
13481 {
13482 ctx->pushInterfaceJoinedInfo( currentJoinedInfo );
13483 }
13484 }
13485 break;
13486
13487 case 1218:
13488
13489
13490 #line 10918 "Parser.yy"
13491 {
13492 boost::scoped_ptr<PortRefData> portData( (yysemantic_stack_[(2) - (2)].portRefData) );
13493 NameData *portNameData = portData->mPortName;
13494 std::string name = portNameData->mName;
13495 EdifContextSharedPtr ctx
13496 = inDriver.getContext();
13497 ViewSharedPtr view = ctx->getCurrentView();
13498
13499 PortRefData *currPortRef = (yysemantic_stack_[(2) - (2)].portRefData);
13500 PortRefData *nextPortRef = portData->mParentPort;
13501 std::vector< std::string > nestedNames;
13502 nestedNames.push_back(currPortRef->mPortName->mName);
13503 while( nextPortRef )
13504 {
13505 currPortRef = nextPortRef;
13506 nestedNames.push_back( nextPortRef->mPortName->mName );
13507 nextPortRef = currPortRef->mParentPort;
13508 }
13509 bool isPort = ( NULL == currPortRef->mInstanceName );
13510 std::string topName = *(nestedNames.rbegin());
13511 if( isPort )
13512 {
13513 PortSharedPtr port = view->findPort( topName );
13514 if( !port )
13515 {
13516 std::string message = constructErrorMessage(
13517 "No port %s found in view %s\n",
13518 name.c_str(),
13519 view->getName().c_str());
13520 log("%s\n", message.c_str());
13521 Error e( eMessageIdParserError,
13522 __FUNCTION__, __FILE__, __LINE__ );
13523 e.saveContextData( "Parser error message", message );
13524 e.saveContextData( "Filename", yyloc.begin.filename );
13525 e.saveContextData( "StartLine", yyloc.begin.line );
13526 e.saveContextData( "EndLine", yyloc.end.line );
13527 inDriver.setParserError( e );
13528 error( yyloc, message );
13529 YYABORT;
13530 }
13531
13532 InterfaceJoinedInfoSharedPtr currentJoinedInfo
13533 = ctx->getCurrentInterfaceJoinedInfo();
13534 try
13535 {
13536 connectibleFinder( nestedNames, port );
13537 if( !portData->mPortName->mIndices.empty() )
13538 {
13539 port = port->get( portData->mPortName->mIndices );
13540 }
13541
13542 std::list< PortSharedPtr > outPorts;
13543 currentJoinedInfo->getPorts( outPorts );
13544
13545 if( !outPorts.empty() )
13546 {
13547 PortSharedPtr firstPort = outPorts.front();
13548 std::list< PortSharedPtr >::iterator it
13549 = std::find( outPorts.begin(), outPorts.end(),
13550 port);
13551 if( it != outPorts.end() )
13552 {
13553 std::string message = constructErrorMessage(
13554 "Port %s already exist in weakJoined info",
13555 port->getName().c_str() );
13556 log("%s\n", message.c_str());
13557 Error e( eMessageIdParserError,
13558 __FUNCTION__, __FILE__, __LINE__ );
13559 e.saveContextData( "Parser error message", message );
13560 e.saveContextData( "Filename", yyloc.begin.filename );
13561 e.saveContextData( "StartLine", yyloc.begin.line );
13562 e.saveContextData( "EndLine", yyloc.end.line );
13563 inDriver.setParserError( e );
13564 error( yyloc, message );
13565 YYABORT;
13566 }
13567 else
13568 {
13569 if( firstPort->getSize() == port->getSize() )
13570 {
13571 currentJoinedInfo->addPort( port );
13572 }
13573 else
13574 {
13575 std::string message = constructErrorMessage(
13576 "Port %s can't be added, port size mismatch %d with %d",
13577 name.c_str(),
13578 firstPort->getSize(),
13579 port->getSize());
13580 log("%s\n", message.c_str());
13581 Error e( eMessageIdParserError,
13582 __FUNCTION__, __FILE__, __LINE__ );
13583 e.saveContextData( "Parser error message", message );
13584 e.saveContextData( "Filename", yyloc.begin.filename );
13585 e.saveContextData( "StartLine", yyloc.begin.line );
13586 e.saveContextData( "EndLine", yyloc.end.line );
13587 inDriver.setParserError( e );
13588 error( yyloc, message );
13589 YYABORT;
13590 }
13591 }
13592 }
13593 else
13594 {
13595 currentJoinedInfo->addPort( port );
13596 }
13597 }
13598 catch( Error &e )
13599 {
13600 e.setCurrentLocation(
13601 __FUNCTION__, __FILE__, __LINE__ );
13602 throw;
13603 }
13604 }
13605 else
13606 {
13607 }
13608 }
13609 break;
13610
13611 case 1219:
13612
13613
13614 #line 11037 "Parser.yy"
13615 {
13616 if( NULL != (yysemantic_stack_[(2) - (2)].portListData) && !(yysemantic_stack_[(2) - (2)].portListData)->mPortRefs.empty() )
13617 {
13618 boost::scoped_ptr<PortListData> portListData( (yysemantic_stack_[(2) - (2)].portListData) );
13619 std::string message;
13620
13621 EdifContextSharedPtr ctx = inDriver.getContext();
13622 PortListSharedPtr portList;
13623 ctx->getFactory()->create( portList );
13624
13625 InterfaceJoinedInfoSharedPtr currentJoinedInfo
13626 = ctx->getCurrentInterfaceJoinedInfo();
13627
13628 for( std::vector<PortRefData *>::iterator it
13629 = portListData->mPortRefs.begin();
13630 it != portListData->mPortRefs.end(); ++it )
13631 {
13632 PortRefData *portData = *it;
13633 std::vector< std::string > nestedNames;
13634 PortRefData *currPortRef = *it;
13635 PortRefData *nextPortRef = portData->mParentPort;
13636 nestedNames.push_back(currPortRef->mPortName->mName);
13637 while( nextPortRef )
13638 {
13639 currPortRef = nextPortRef;
13640 nestedNames.push_back( nextPortRef->mPortName->mName );
13641 nextPortRef = currPortRef->mParentPort;
13642 }
13643 bool isPort = ( NULL == currPortRef->mInstanceName );
13644 NameData *portNameData = currPortRef->mPortName;
13645 std::string topName = *(nestedNames.rbegin());
13646 ViewSharedPtr view = ctx->getCurrentView();
13647 if( isPort )
13648 {
13649 PortSharedPtr port = view->findPort( topName );
13650 if( !port )
13651 {
13652 std::string message = constructErrorMessage(
13653 "No port %s found in view %s\n",
13654 portNameData->mName.c_str(),
13655 view->getName().c_str());
13656 log("%s\n", message.c_str());
13657 Error e( eMessageIdParserError,
13658 __FUNCTION__, __FILE__, __LINE__ );
13659 e.saveContextData( "Parser error message", message );
13660 e.saveContextData( "Filename", yyloc.begin.filename );
13661 e.saveContextData( "StartLine", yyloc.begin.line );
13662 e.saveContextData( "EndLine", yyloc.end.line );
13663 inDriver.setParserError( e );
13664 error( yyloc, message );
13665 YYABORT;
13666 }
13667
13668 try
13669 {
13670 connectibleFinder( nestedNames, port );
13671 if( !portData->mPortName->mIndices.empty() )
13672 {
13673 port = port->get( portData->mPortName->mIndices );
13674 }
13675 portList->addChildPort( port );
13676 }
13677 catch( Error &e )
13678 {
13679 std::string message = constructErrorMessage(
13680 "Unable to connect port : %s",
13681 port->getName().c_str());
13682 log("%s\n", message.c_str());
13683 e.setCurrentLocation( __FUNCTION__,
13684 __FILE__, __LINE__ );
13685 e.saveContextData( "Parser error message", message );
13686 e.saveContextData( "Filename", yyloc.begin.filename );
13687 e.saveContextData( "StartLine", yyloc.begin.line );
13688 e.saveContextData( "EndLine", yyloc.end.line );
13689 inDriver.setParserError( e );
13690 error( yyloc, message );
13691 YYABORT;
13692 }
13693 }
13694 else
13695 {
13696 }
13697 }
13698 if( currentJoinedInfo->getSize() == portList->getSize() )
13699 {
13700 currentJoinedInfo->addPortList( portList );
13701 }
13702 else
13703 {
13704 std::string message = constructErrorMessage(
13705 "Port size mismatch %d with %d",
13706 currentJoinedInfo->getSize(),
13707 portList->getSize());
13708 log("%s\n", message.c_str());
13709 Error e( eMessageIdParserError,
13710 __FUNCTION__, __FILE__, __LINE__ );
13711 e.saveContextData( "Parser error message", message );
13712 e.saveContextData( "Filename", yyloc.begin.filename );
13713 e.saveContextData( "StartLine", yyloc.begin.line );
13714 e.saveContextData( "EndLine", yyloc.end.line );
13715 inDriver.setParserError( e );
13716 error( yyloc, message );
13717 YYABORT;
13718 }
13719 }
13720 }
13721 break;
13722
13723 case 1227:
13724
13725
13726 #line 11155 "Parser.yy"
13727 {
13728 delete (yysemantic_stack_[(2) - (2)].stringVal);
13729 }
13730 break;
13731
13732 case 1228:
13733
13734
13735 #line 11159 "Parser.yy"
13736 {
13737 delete (yysemantic_stack_[(2) - (2)].stringVal);
13738 }
13739 break;
13740
13741 case 1229:
13742
13743
13744 #line 11165 "Parser.yy"
13745 {
13746 WrittenSharedPtr written;
13747 EdifContextSharedPtr ctx
13748 = inDriver.getContext();
13749 try
13750 {
13751 ctx->getFactory()->create( written );
13752 }
13753 catch( Error &e )
13754 {
13755 std::string message = constructErrorMessage(
13756 "Unable to create Written" );
13757 log("%s\n", message.c_str());
13758 e.setCurrentLocation( __FUNCTION__,
13759 __FILE__, __LINE__ );
13760 e.saveContextData( "Parser error message", message );
13761 e.saveContextData( "Filename", yyloc.begin.filename );
13762 e.saveContextData( "StartLine", yyloc.begin.line );
13763 e.saveContextData( "EndLine", yyloc.end.line );
13764 inDriver.setParserError( e );
13765 error( yyloc, message );
13766 YYABORT;
13767 }
13768 ctx->setCurrentWritten( written );
13769 ctx->pushPropertyContainer( written );
13770 }
13771 break;
13772
13773 case 1230:
13774
13775
13776 #line 11191 "Parser.yy"
13777 {
13778 EdifContextSharedPtr ctx = inDriver.getContext();
13779 StatusSharedPtr status = ctx->getCurrentStatus();
13780 WrittenSharedPtr written = ctx->getCurrentWritten();
13781 status->addWritten( written );
13782 ctx->setCurrentWritten( WrittenSharedPtr() );
13783 ctx->popPropertyContainer();
13784 }
13785 break;
13786
13787 case 1231:
13788
13789
13790 #line 11202 "Parser.yy"
13791 {
13792 EdifContextSharedPtr ctx = inDriver.getContext();
13793 WrittenSharedPtr written = ctx->getCurrentWritten();
13794 written->setTimeStamp( *(yysemantic_stack_[(1) - (1)].timeStamp) );
13795 delete (yysemantic_stack_[(1) - (1)].timeStamp);
13796 }
13797 break;
13798
13799 case 1232:
13800
13801
13802 #line 11209 "Parser.yy"
13803 {
13804 EdifContextSharedPtr ctx = inDriver.getContext();
13805 WrittenSharedPtr written = ctx->getCurrentWritten();
13806 written->setAuthorName( *(yysemantic_stack_[(2) - (2)].stringVal) );
13807 delete (yysemantic_stack_[(2) - (2)].stringVal);
13808 }
13809 break;
13810
13811 case 1233:
13812
13813
13814 #line 11216 "Parser.yy"
13815 {
13816 boost::scoped_ptr<PairStrData> data((yysemantic_stack_[(2) - (2)].pairStrData));
13817 EdifContextSharedPtr ctx = inDriver.getContext();
13818 WrittenSharedPtr written = ctx->getCurrentWritten();
13819 written->setProgramName( data->mFirst );
13820 written->setProgramVersion( data->mSecond );
13821 }
13822 break;
13823
13824 case 1234:
13825
13826
13827 #line 11224 "Parser.yy"
13828 {
13829 boost::scoped_ptr<PairStrData> data((yysemantic_stack_[(2) - (2)].pairStrData));
13830 EdifContextSharedPtr ctx = inDriver.getContext();
13831 WrittenSharedPtr written = ctx->getCurrentWritten();
13832 written->setDataOriginLocationName( data->mFirst );
13833 written->setDataOriginVersion( data->mSecond );
13834 }
13835 break;
13836
13837 case 1236:
13838
13839
13840 #line 11233 "Parser.yy"
13841 {
13842 EdifContextSharedPtr ctx = inDriver.getContext();
13843 WrittenSharedPtr written = ctx->getCurrentWritten();
13844 written->addComment( *(yysemantic_stack_[(2) - (2)].stringVal) );
13845 delete (yysemantic_stack_[(2) - (2)].stringVal);
13846 }
13847 break;
13848
13849 case 1237:
13850
13851
13852 #line 11240 "Parser.yy"
13853 {
13854 EdifContextSharedPtr ctx = inDriver.getContext();
13855 WrittenSharedPtr written = ctx->getCurrentWritten();
13856 written->addUserData( *(yysemantic_stack_[(2) - (2)].stringVal) );
13857 delete (yysemantic_stack_[(2) - (2)].stringVal);
13858 }
13859 break;
13860
13861 case 1238:
13862
13863
13864 #line 11249 "Parser.yy"
13865 {
13866 (yyval.stringVal) = (yysemantic_stack_[(1) - (1)].stringVal);
13867 }
13868 break;
13869
13870 case 1239:
13871
13872
13873 #line 11255 "Parser.yy"
13874 {
13875 (yyval.stringVal) =(yysemantic_stack_[(1) - (1)].stringVal);
13876 }
13877 break;
13878
13879 case 1240:
13880
13881
13882 #line 11261 "Parser.yy"
13883 {
13884 (yyval.integerVal) =(yysemantic_stack_[(1) - (1)].integerVal);
13885 }
13886 break;
13887
13888 case 1241:
13889
13890
13891 #line 11267 "Parser.yy"
13892 {
13893 inDriver.getLexer()->setIsIdContext( true );
13894 delete (yysemantic_stack_[(1) - (1)].stringVal);
13895 }
13896 break;
13897
13898
13899
13900
13901 #line 13902 "Parser.cc"
13902 default:
13903 break;
13904 }
13905 YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc);
13906
13907 yypop_ (yylen);
13908 yylen = 0;
13909 YY_STACK_PRINT ();
13910
13911 yysemantic_stack_.push (yyval);
13912 yylocation_stack_.push (yyloc);
13913
13914
13915 yyn = yyr1_[yyn];
13916 yystate = yypgoto_[yyn - yyntokens_] + yystate_stack_[0];
13917 if (0 <= yystate && yystate <= yylast_
13918 && yycheck_[yystate] == yystate_stack_[0])
13919 yystate = yytable_[yystate];
13920 else
13921 yystate = yydefgoto_[yyn - yyntokens_];
13922 goto yynewstate;
13923
13924
13925
13926
13927 yyerrlab:
13928
13929 if (!yyerrstatus_)
13930 {
13931 ++yynerrs_;
13932 error (yylloc, yysyntax_error_ (yystate, yytoken));
13933 }
13934
13935 yyerror_range[0] = yylloc;
13936 if (yyerrstatus_ == 3)
13937 {
13938
13939
13940
13941 if (yychar <= yyeof_)
13942 {
13943
13944 if (yychar == yyeof_)
13945 YYABORT;
13946 }
13947 else
13948 {
13949 yydestruct_ ("Error: discarding", yytoken, &yylval, &yylloc);
13950 yychar = yyempty_;
13951 }
13952 }
13953
13954
13955
13956 goto yyerrlab1;
13957
13958
13959
13960
13961
13962 yyerrorlab:
13963
13964
13965
13966
13967 if (false)
13968 goto yyerrorlab;
13969
13970 yyerror_range[0] = yylocation_stack_[yylen - 1];
13971
13972
13973 yypop_ (yylen);
13974 yylen = 0;
13975 yystate = yystate_stack_[0];
13976 goto yyerrlab1;
13977
13978
13979
13980
13981 yyerrlab1:
13982 yyerrstatus_ = 3;
13983
13984 for (;;)
13985 {
13986 yyn = yypact_[yystate];
13987 if (yyn != yypact_ninf_)
13988 {
13989 yyn += yyterror_;
13990 if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
13991 {
13992 yyn = yytable_[yyn];
13993 if (0 < yyn)
13994 break;
13995 }
13996 }
13997
13998
13999 if (yystate_stack_.height () == 1)
14000 YYABORT;
14001
14002 yyerror_range[0] = yylocation_stack_[0];
14003 yydestruct_ ("Error: popping",
14004 yystos_[yystate],
14005 &yysemantic_stack_[0], &yylocation_stack_[0]);
14006 yypop_ ();
14007 yystate = yystate_stack_[0];
14008 YY_STACK_PRINT ();
14009 }
14010
14011 yyerror_range[1] = yylloc;
14012
14013
14014 YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
14015 yysemantic_stack_.push (yylval);
14016 yylocation_stack_.push (yyloc);
14017
14018
14019 YY_SYMBOL_PRINT ("Shifting", yystos_[yyn],
14020 &yysemantic_stack_[0], &yylocation_stack_[0]);
14021
14022 yystate = yyn;
14023 goto yynewstate;
14024
14025
14026 yyacceptlab:
14027 yyresult = 0;
14028 goto yyreturn;
14029
14030
14031 yyabortlab:
14032 yyresult = 1;
14033 goto yyreturn;
14034
14035 yyreturn:
14036 if (yychar != yyempty_)
14037 yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc);
14038
14039
14040
14041 yypop_ (yylen);
14042 while (yystate_stack_.height () != 1)
14043 {
14044 yydestruct_ ("Cleanup: popping",
14045 yystos_[yystate_stack_[0]],
14046 &yysemantic_stack_[0],
14047 &yylocation_stack_[0]);
14048 yypop_ ();
14049 }
14050
14051 return yyresult;
14052 }
14053
14054
14055 std::string
14056 Parser::yysyntax_error_ (int yystate, int tok)
14057 {
14058 std::string res;
14059 YYUSE (yystate);
14060 #if YYERROR_VERBOSE
14061 int yyn = yypact_[yystate];
14062 if (yypact_ninf_ < yyn && yyn <= yylast_)
14063 {
14064
14065
14066 int yyxbegin = yyn < 0 ? -yyn : 0;
14067
14068
14069 int yychecklim = yylast_ - yyn + 1;
14070 int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
14071 int count = 0;
14072 for (int x = yyxbegin; x < yyxend; ++x)
14073 if (yycheck_[x + yyn] == x && x != yyterror_)
14074 ++count;
14075
14076
14077
14078
14079
14080
14081
14082
14083
14084 res = "syntax error, unexpected ";
14085 res += yytnamerr_ (yytname_[tok]);
14086 if (count < 5)
14087 {
14088 count = 0;
14089 for (int x = yyxbegin; x < yyxend; ++x)
14090 if (yycheck_[x + yyn] == x && x != yyterror_)
14091 {
14092 res += (!count++) ? ", expecting " : " or ";
14093 res += yytnamerr_ (yytname_[x]);
14094 }
14095 }
14096 }
14097 else
14098 #endif
14099 res = YY_("syntax error");
14100 return res;
14101 }
14102
14103
14104
14105
14106 const short int Parser::yypact_ninf_ = -1561;
14107 const short int
14108 Parser::yypact_[] =
14109 {
14110 -97, 99, 245, 66, -1561, -1561, 349, -46, -1561, -1561,
14111 -1561, -1561, 268, 95, 199, 1, 482, -1561, 147, -1561,
14112 80, -1561, 472, 364, 192, 383, -1561, -1561, -1561, 286,
14113 271, -1561, -1561, -1561, 472, 472, 409, -1561, 97, 586,
14114 -1561, 472, 310, 287, -1561, 351, -1561, -1561, -1561, -1561,
14115 -1561, -1561, 705, -1561, 313, -1561, 457, -1561, 744, 764,
14116 95, 825, -1561, -1561, -1561, 472, 538, -1561, -1561, 620,
14117 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, 832, 633,
14118 -1561, -1561, -1561, -1561, 336, -1561, 66, 66, 66, -1561,
14119 -1561, 1118, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14120 -1561, -1561, -1561, -1561, -1561, 1475, 1276, 373, -1561, 51,
14121 -1561, -1561, 1, -1561, 1, -1561, 268, 472, 472, 81,
14122 606, 824, 472, 472, 66, 472, 391, -1561, -1561, -1561,
14123 -1561, -1561, -1561, -1561, -1561, -1561, 395, -1561, -1561, -1561,
14124 -1561, -1561, -1561, -1561, -1561, 399, 479, 454, -1561, -1561,
14125 458, -1561, -1561, 864, 64, -1561, 472, 462, 651, 81,
14126 -1561, -1561, -1561, -1561, 477, -1561, -1561, -1561, 486, 472,
14127 502, -1561, -1561, 541, 37, 558, -1561, -1561, -1561, -1561,
14128 472, -1561, 733, -1561, 872, 568, 568, 27, -1561, -1561,
14129 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, 577, -1561,
14130 472, 81, -1561, -1561, 577, -1561, 597, -1561, 603, 610,
14131 -1561, 472, 95, 402, -1561, -1561, -1561, -1561, -1561, 566,
14132 884, -1561, 891, -1561, -1561, 268, 850, 615, 472, 650,
14133 661, 105, -1561, -1561, -1561, -1561, -1561, 916, -1561, -1561,
14134 -1561, -1561, 671, 635, -1561, 679, 178, -1561, -1561, -1561,
14135 -1561, -1561, -1561, -1561, -1561, -1561, -1561, 686, -1561, -1561,
14136 -1561, -1561, 683, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14137 219, -1561, -1561, -1561, -1561, -1561, -1561, 828, 701, -1561,
14138 808, -1561, 920, 66, 747, -1561, 924, 93, 928, -1561,
14139 74, 56, 120, 129, 938, 586, 1447, 95, -1561, -1561,
14140 644, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14141 472, 398, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14142 -1561, -1561, -1561, -1561, 176, -1561, -1561, -1561, -1561, 158,
14143 -1561, -1561, -1561, -1561, 75, -1561, -1561, -1561, -1561, 866,
14144 -1561, -1561, -1561, -1561, -1561, -1561, 587, -1561, -1561, -1561,
14145 -1561, 790, -1561, -1561, -1561, -1561, 731, -1561, -1561, -1561,
14146 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14147 -1561, -1561, -1561, 745, 767, -1561, -1561, -1561, 957, 66,
14148 66, -1561, -1561, 781, 472, 586, 586, 586, 391, 472,
14149 87, 123, 81, 373, -1561, -1561, -1561, 24, -1561, -1561,
14150 -1561, -1561, 95, -1561, -1561, -1561, -1561, 963, -1561, -1561,
14151 970, -1561, 974, 982, -1561, 472, 770, 789, 789, 985,
14152 -1561, 988, -1561, 72, 1031, -1561, 446, 123, -1561, -1561,
14153 -1561, 1045, -1561, 1058, -1561, 81, 81, 778, 826, -1561,
14154 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14155 -1561, -1561, -1561, 937, -1561, -1561, -1561, -1561, -1561, -1561,
14156 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, 1063,
14157 877, 342, -1561, -1561, -1561, -1561, -1561, -1561, -1561, 472,
14158 -1561, 805, 799, -1561, 812, -1561, -1561, -1561, -1561, -1561,
14159 -1561, -1561, 827, 834, 123, -1561, -1561, -1561, -1561, 81,
14160 81, -1561, 842, 66, 66, 66, 66, 66, 66, 66,
14161 66, 66, 66, 66, 394, -1561, -1561, -1561, -1561, -1561,
14162 -1561, -1561, 859, 66, -1561, 472, 586, -1561, -1561, -1561,
14163 -1561, 865, 867, 880, 680, -1561, -1561, -1561, 869, -1561,
14164 -1561, -1561, -1561, -1561, 895, 895, 895, 895, 895, 895,
14165 895, 895, 895, 895, 895, 66, -1561, -1561, -1561, 1077,
14166 472, 873, -1561, -1561, 923, 903, 842, 95, 842, 842,
14167 472, 842, -1561, 1072, 895, 918, 918, 918, 895, 918,
14168 -1561, 1084, 918, 895, 895, 935, -1561, -1561, 943, 695,
14169 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, 949,
14170 -1561, -1561, 1087, -1561, -1561, 952, -1561, -1561, 1094, -1561,
14171 -1561, 954, 842, -1561, -1561, 1096, 122, 918, 1225, -1561,
14172 -1561, -1561, -1561, 1098, -1561, -1561, -1561, -1561, 1108, -1561,
14173 -1561, 1115, -1561, -1561, 918, 1128, -1561, -1561, 173, -1561,
14174 -1561, -1561, 1131, -1561, -1561, 918, 918, 32, -1561, -1561,
14175 1135, -1561, 973, 961, 976, -1561, 979, -1561, 996, -1561,
14176 -1561, -1561, -1561, -1561, 1130, 997, -1561, -1561, -1561, -1561,
14177 -1561, -1561, -1561, 1002, -1561, -1561, -1561, 815, -1561, 1005,
14178 -1561, -1561, 1139, -1561, -1561, 81, 81, 1010, 81, 81,
14179 81, 1012, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14180 -1561, 1165, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14181 1177, -1561, -1561, 1180, -1561, -1561, -1561, -1561, -1561, -1561,
14182 -1561, 1197, 1512, 1158, -1561, 1199, 1168, -1561, 1205, 1217,
14183 1141, 1219, -1561, 1223, 1101, -1561, 1229, 95, -1561, 1246,
14184 1049, -1561, -1561, -1561, -1561, 1059, 1066, 417, -1561, 1070,
14185 -1561, 1073, 1078, 1081, 1080, -1561, 1091, -1561, -1561, -1561,
14186 -1561, -1561, -1561, -1561, -1561, -1561, 1244, 1248, 579, -1561,
14187 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14188 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14189 -1561, -1561, -1561, -1561, 1102, -1561, 41, -1561, -1561, -1561,
14190 -1561, -1561, -1561, 125, 68, -1561, -1561, -1561, -1561, -1561,
14191 523, -1561, -1561, -1561, -1561, -1561, 125, 86, -1561, -1561,
14192 -1561, -1561, -1561, 464, -1561, -1561, -1561, -1561, -1561, 137,
14193 -1561, 459, -1561, -1561, -1561, -1561, -1561, 1104, -1561, -1561,
14194 -1561, -1561, 102, -1561, 1109, -1561, -1561, -1561, -1561, -1561,
14195 1164, -1561, -1561, -1561, -1561, -1561, 391, -1561, 87, -1561,
14196 1120, 1119, 1119, -1561, 95, 87, 95, -1561, 1254, -1561,
14197 298, 1126, -1561, -1561, 80, -1561, -1561, -1561, -1561, 1133,
14198 140, 1137, -1561, 494, -1561, -1561, 1146, 1256, -1561, 125,
14199 -1561, -1561, 1148, 48, 1155, 50, -1561, 1278, 1161, 1166,
14200 53, 1171, -1561, 1173, 1181, 540, -1561, -1561, -1561, -1561,
14201 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14202 -1561, -1561, -1561, 1261, 95, 29, -1561, 1183, -1561, 1189,
14203 -1561, -1561, 1137, 1263, 5, -1561, -1561, 1191, -1561, 1345,
14204 1206, -1561, -1561, 1332, 1209, 58, 95, 11, -1561, -1561,
14205 1213, -1561, 697, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14206 -1561, -1561, -1561, -1561, 62, -1561, -1561, 1221, -1561, -1561,
14207 -1561, -1561, -1561, -1561, 95, -1561, -1561, -1561, -1561, -1561,
14208 -1561, -1561, 1226, 80, -1561, -1561, 139, -1561, 139, 66,
14209 -1561, -1561, -1561, -1561, 1144, -1561, -1561, -1561, -1561, -1561,
14210 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14211 -1561, -1561, -1561, 472, 95, -1561, -1561, -1561, 1265, -1561,
14212 -1561, 95, -1561, -1561, 794, 1414, 1267, -1561, 755, -1561,
14213 -1561, -1561, 472, 137, -1561, 150, 151, 151, 151, 151,
14214 1137, 1230, 528, -1561, -1561, -1561, 331, -1561, -1561, 1232,
14215 -1561, 635, 779, -1561, 1273, -1561, -1561, 1237, -1561, -1561,
14216 -1561, -1561, 94, -1561, -1561, 597, -1561, -1561, -1561, -1561,
14217 -1561, 1275, 66, 1289, -1561, 1250, -1561, 143, 144, 139,
14218 139, 139, 139, 139, 139, 144, 586, 1252, 472, -1561,
14219 1269, 539, -1561, -1561, -1561, -1561, -1561, -1561, 458, -1561,
14220 -1561, -1561, 1245, 150, 47, -1561, -1561, -1561, 472, 1126,
14221 -1561, -1561, 76, 1277, -1561, -1561, 65, 1292, -1561, -1561,
14222 1302, -1561, -1561, 1306, -1561, -1561, 1309, -1561, -1561, 1325,
14223 -1561, -1561, -1561, 1342, 1333, 1350, 1351, -1561, -1561, -1561,
14224 -1561, 1291, 1296, 66, 880, 1299, -1561, 1354, 1047, -1561,
14225 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14226 -1561, -1561, -1561, 1301, 634, -1561, -1561, -1561, -1561, -1561,
14227 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, 1305,
14228 1432, 1369, 1314, 38, -1561, -1561, 1319, 1374, -1561, -1561,
14229 -1561, -1561, -1561, -1561, 1321, -1561, -1561, -1561, -1561, -1561,
14230 -1561, 1327, -1561, -1561, 1329, 1331, -1561, -1561, 152, -1561,
14231 1397, -1561, 1335, -1561, 1396, 472, 1661, -1561, 1452, -1561,
14232 -1561, -1561, 1453, -1561, -1561, -1561, 1454, -1561, -1561, -1561,
14233 1455, -1561, 1456, -1561, -1561, -1561, -1561, -1561, -1561, 103,
14234 -1561, -1561, 1337, -1561, 1531, 1458, 1498, 1460, -1561, -15,
14235 -1561, -1561, -1561, 455, -1561, -1561, -1561, -1561, -1561, 472,
14236 1462, -1561, 443, -1561, -1561, -1561, -1561, 1339, 1592, -1561,
14237 1341, 268, 125, 95, 207, -1561, -1561, -1561, -1561, -1561,
14238 -1561, 80, 1250, 687, -1561, -1561, -1561, -1561, 373, -1561,
14239 578, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, 900,
14240 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14241 -40, 1346, -1561, -1561, 1465, 403, -1561, -1561, -1561, -1561,
14242 1467, 1468, 475, -1561, -1561, -1561, -1561, -1561, 951, -1561,
14243 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, 870,
14244 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14245 28, -1561, -1561, -1561, -1561, -1561, 400, -1561, -1561, -1561,
14246 -1561, -1561, -1561, -1561, -1561, -1561, 95, -1561, 1469, 1470,
14247 -1561, -1561, 145, 145, -1561, -1561, 150, 150, -1561, -1561,
14248 -1561, -1561, -1561, 1471, -1561, -1561, 472, -1561, -1561, 544,
14249 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561,
14250 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, 1348, -1561,
14251 -1561, -1561, -1561, 1365, -1561, -1561, 1367, -1561, -1561, 139,
14252 66, 1472, -1561, -1561, 1474, 373, 373, 373, 1476, 1477,
14253 1477, 1476, -1561, 162, -1561, -1561, -1561, 524, 1372, -1561,
14254 -1561, 1609, -1561, 1607, -1561, 1378, 1478, 1480, 1383, 87,
14255 144, 144, 635, -1561, 1508, 1385, -1561, 1672, 1388, -1561,
14256 771, 1485, -1561, -1561, -1561, -1561, -1561, -1561, -1561, 145,
14257 1486, -1561, -1561, 150, -1561, -1561, 1390, 1520, 1489, -1561,
14258 69, 1490, -1561, -1561, 876, 1392, -1561, -1561, -1561, -1561,
14259 -1561, -1561, 1493, 1494, 81, -1561, -1561, -1561, 1394, 373,
14260 1399, -1561, 1691, -1561, 1403, 1566, 1405, -1561, -1561, 1407,
14261 -1561, 1409, 1411, 150, 150, -1561, 765, -1561, -1561, -1561,
14262 -1561, -1561, -1561, -1561, -1561, -1561, -1561, 1413, -1561, 371,
14263 -1561, -1561, -1561, -1561, -1561, -1561, -1561, 1663, 1497, -1561,
14264 189, -1561, -1561, -1561, -1561, 1415, -1561, 1499, -1561, -1561,
14265 1501, -1561, -1561, 1502, -1561, 1504, 1673, -1561, -1561, 150,
14266 -1561, -1561, -1561, -1561, -1561, 1505, -1561, 1506, 1542, -1561,
14267 -1561, -1561, -1561, 640, -1561, -1561, -1561, -1561, 1417, -1561,
14268 -1561, -1561, 1507, 655, -1561, -1561, -1561, 1705, 1419, -1561,
14269 1572, 1511, -1561, 1569, -1561, -1561, -1561, -1561, -1561, -1561,
14270 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, 90,
14271 -1561, -1561, -1561, 1513, -1561, -1561, 150, -1561, -1561, 1421,
14272 137, 146, -1561, 1423, 1100, -1561, -1561, -1561, -1561, -1561,
14273 -1561, -1561, -1561, -1561, -1561, 1425, -1561, 148, 1515, 148,
14274 82, -1561, -1561, -1561, -1561, -1561, -1561, 525, 1501, -1561,
14275 -1561, -1561, -1561, -1561, 1516, -1561, 128, -1561, -1561, 1518,
14276 -1561, -1561, -1561, 1519, -1561, -1561, -1561, -1561, 1471, 1427,
14277 237, -1561, -1561, -1561, -1561, 472, 386, -1561, -1561, -1561,
14278 -1561, -1561, -1561, 1521, 1429, 1431, 1433, 1522, 1523, -1561,
14279 1525, 668, -1561, -1561, -1561, -1561, -1561, 597, 1435, -1561,
14280 -1561, 1437, 52, -1561, -1561, -1561, -1561, 1625, -1561, -1561,
14281 698, 1527, -1561, -1561, -1561, -1561, -1561, -1561, -1561, 1528,
14282 -1561, -1561, 1529, -1561, 1532, 344, -1561, -1561, -1561, 1530,
14283 1533, -1561, 71, 77, 1439, -1561, 1552, -1561, -1561, 1528,
14284 -1561, -1561, 1650, 1534, -1561, -1561, 126, -1561, -1561, -1561,
14285 -1561, -1561, 379, -1561, 1523, -1561, -1561, 368, -1561, -1561,
14286 -1561, -1561, 1501, -1561, 1535, 639, -1561, -1561, -1561, -1561,
14287 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, 706, -1561,
14288 -1561, -1561, -1561, -1561, -1561, 137, -1561, -1561, 1536, -1561,
14289 1717, -1561, 1441, -1561, 81, 81, -1561, 1075, 1444, -1561,
14290 -1561, -1561, -1561, -1561, -1561, -1561, -1561, 969, -1561, -1561,
14291 -1561, -1561, 433, -1561, -1561, -1561, 1578, -1561, -1561, 1539,
14292 -1561, 149, 149, -1561, -1561, 373, 148, 1501, -1561, -1561,
14293 -1561, -1561, 1541, -1561, -1561, 1543, -1561, -1561, 472, 472,
14294 1547, 112, -1561, -1561, -1561, -1561, 1548, 1550, -1561, 137,
14295 -1561, -1561, -1561, -1561, 1553, 1556, -1561, 784, 1446, -1561,
14296 -1561, -1561, -1561, -1561, 1448, -1561, 373, 145, -1561, -1561,
14297 -1561, -1561, 1557, -1561, -1561, -1561, 1450, 472, 472, -1561,
14298 -1561, -1561, -1561, -1561, -1561, 114, -1561, -1561, 1561, 116,
14299 -1561, 1562, 1563, -1561, -1561, -1561, -1561, 118, 373, -1561,
14300 -1561, -1561, 1564, -1561, -1561, -1561, -1561, 1565, 1567, 874,
14301 -1561, -1561, -1561, -1561, 537, -1561, -1561, 1570, -1561, -1561,
14302 -1561, -1561, -1561, 1571, -1561, 804, -1561, -1561, -1561, -1561,
14303 -1561, 1573, -1561, -1561, -1561, -1561, -1561, -1561
14304 };
14305
14306
14307
14308
14309 const unsigned short int
14310 Parser::yydefact_[] =
14311 {
14312 0, 0, 0, 0, 1, 1238, 0, 0, 641, 11,
14313 642, 640, 0, 0, 0, 0, 0, 635, 0, 982,
14314 0, 981, 0, 0, 0, 0, 634, 636, 1239, 0,
14315 0, 984, 983, 1240, 0, 0, 0, 2, 0, 0,
14316 980, 0, 0, 0, 4, 0, 231, 229, 230, 644,
14317 300, 643, 0, 1048, 0, 12, 0, 492, 0, 0,
14318 0, 0, 1042, 1049, 13, 0, 0, 491, 493, 0,
14319 3, 9, 8, 6, 7, 5, 10, 306, 0, 0,
14320 228, 232, 233, 234, 0, 110, 0, 0, 0, 1029,
14321 1154, 0, 305, 313, 310, 311, 316, 307, 308, 312,
14322 309, 317, 314, 318, 315, 0, 0, 0, 490, 0,
14323 189, 202, 0, 497, 0, 1031, 0, 0, 0, 0,
14324 0, 0, 0, 0, 0, 0, 0, 478, 479, 480,
14325 481, 482, 483, 484, 485, 486, 0, 754, 757, 755,
14326 756, 750, 752, 753, 751, 0, 0, 0, 109, 111,
14327 0, 275, 500, 0, 0, 1156, 0, 0, 0, 0,
14328 990, 147, 148, 149, 0, 248, 249, 250, 0, 0,
14329 0, 947, 940, 0, 0, 0, 72, 71, 477, 749,
14330 0, 758, 0, 191, 0, 0, 0, 0, 1030, 1033,
14331 1034, 1032, 366, 1155, 1160, 1159, 1158, 1157, 0, 74,
14332 0, 0, 146, 247, 0, 802, 0, 1089, 0, 0,
14333 1210, 0, 0, 0, 190, 193, 194, 192, 195, 0,
14334 0, 277, 0, 502, 1229, 0, 0, 0, 0, 0,
14335 0, 0, 1122, 1123, 1124, 1125, 1126, 0, 1127, 942,
14336 283, 1121, 0, 87, 92, 0, 0, 276, 279, 280,
14337 278, 281, 501, 504, 505, 503, 506, 0, 1241, 368,
14338 63, 73, 0, 108, 354, 426, 1044, 611, 727, 813,
14339 0, 941, 946, 943, 945, 944, 823, 0, 0, 88,
14340 0, 1082, 0, 0, 0, 1231, 0, 0, 0, 991,
14341 0, 0, 0, 0, 0, 0, 0, 0, 86, 735,
14342 0, 1081, 1087, 1086, 1084, 1083, 1085, 1088, 76, 85,
14343 0, 0, 1230, 1232, 1236, 1234, 1233, 1235, 1237, 367,
14344 372, 371, 370, 369, 0, 62, 66, 65, 64, 0,
14345 425, 428, 429, 427, 0, 1043, 1046, 1047, 1045, 0,
14346 610, 614, 613, 612, 618, 619, 0, 726, 730, 729,
14347 728, 0, 812, 816, 815, 814, 0, 1136, 1137, 1139,
14348 1138, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148,
14349 1149, 1150, 1151, 0, 0, 646, 499, 645, 0, 0,
14350 0, 204, 1011, 0, 0, 0, 0, 0, 0, 0,
14351 0, 0, 0, 0, 772, 1135, 508, 0, 734, 738,
14352 737, 736, 0, 638, 495, 639, 637, 0, 285, 299,
14353 0, 1013, 0, 0, 78, 0, 0, 162, 935, 0,
14354 68, 0, 423, 0, 0, 616, 0, 0, 621, 623,
14355 622, 0, 732, 0, 818, 0, 0, 0, 0, 284,
14356 292, 289, 290, 295, 286, 287, 291, 298, 288, 296,
14357 293, 297, 294, 0, 203, 217, 211, 216, 206, 208,
14358 205, 212, 213, 215, 214, 210, 209, 207, 218, 0,
14359 0, 0, 77, 82, 84, 79, 83, 81, 80, 0,
14360 50, 0, 0, 163, 0, 936, 67, 69, 422, 424,
14361 615, 617, 0, 0, 0, 731, 733, 817, 819, 0,
14362 0, 282, 0, 0, 0, 0, 0, 0, 0, 0,
14363 0, 0, 0, 0, 0, 1012, 1015, 1014, 1016, 97,
14364 96, 95, 0, 0, 1181, 0, 0, 161, 934, 1128,
14365 1129, 0, 0, 0, 0, 341, 378, 379, 0, 339,
14366 342, 343, 340, 988, 0, 0, 0, 0, 0, 0,
14367 0, 0, 0, 0, 0, 0, 94, 1190, 1168, 0,
14368 0, 0, 620, 375, 0, 0, 0, 0, 0, 0,
14369 0, 0, 377, 0, 0, 0, 0, 0, 0, 0,
14370 718, 0, 0, 0, 0, 0, 567, 546, 0, 0,
14371 1180, 1188, 1185, 1184, 1187, 1186, 1183, 1182, 1189, 0,
14372 1167, 989, 0, 220, 221, 320, 454, 455, 0, 464,
14373 465, 0, 0, 1131, 1132, 0, 0, 0, 0, 965,
14374 964, 967, 966, 0, 963, 962, 335, 336, 0, 345,
14375 346, 0, 350, 351, 0, 0, 459, 460, 0, 717,
14376 719, 720, 0, 722, 723, 0, 0, 0, 977, 976,
14377 0, 569, 0, 0, 0, 411, 0, 690, 0, 911,
14378 1096, 219, 222, 223, 0, 0, 321, 453, 456, 457,
14379 463, 770, 771, 0, 1130, 1133, 1134, 0, 302, 0,
14380 303, 304, 0, 243, 244, 0, 0, 0, 0, 0,
14381 0, 1018, 334, 337, 338, 344, 347, 348, 349, 352,
14382 353, 0, 449, 450, 458, 461, 462, 721, 724, 725,
14383 0, 760, 761, 0, 765, 766, 625, 969, 975, 978,
14384 979, 0, 0, 0, 1170, 0, 0, 402, 0, 0,
14385 0, 0, 660, 0, 0, 842, 0, 0, 319, 0,
14386 0, 301, 242, 245, 246, 0, 0, 0, 58, 0,
14387 59, 0, 0, 0, 0, 1019, 0, 448, 451, 452,
14388 759, 762, 763, 764, 767, 768, 0, 0, 0, 568,
14389 572, 582, 573, 571, 576, 579, 578, 577, 581, 580,
14390 575, 583, 570, 574, 1205, 1207, 1208, 1206, 1200, 1202,
14391 1201, 1203, 1209, 1204, 0, 431, 0, 1169, 1173, 1172,
14392 1174, 1171, 1175, 0, 0, 401, 406, 403, 405, 404,
14393 0, 410, 414, 412, 413, 415, 0, 0, 659, 664,
14394 662, 661, 663, 0, 689, 693, 692, 691, 694, 0,
14395 844, 0, 910, 914, 913, 912, 915, 0, 498, 769,
14396 48, 49, 0, 60, 0, 61, 274, 374, 496, 1017,
14397 0, 624, 626, 968, 970, 971, 0, 122, 0, 236,
14398 0, 0, 0, 986, 0, 0, 0, 1199, 0, 125,
14399 0, 394, 419, 418, 0, 1097, 408, 698, 697, 702,
14400 0, 0, 686, 0, 923, 922, 930, 0, 872, 0,
14401 507, 57, 0, 0, 0, 0, 466, 0, 0, 0,
14402 0, 0, 547, 0, 0, 0, 430, 436, 446, 444,
14403 438, 439, 437, 441, 432, 433, 445, 435, 443, 434,
14404 442, 447, 440, 0, 0, 0, 395, 0, 396, 0,
14405 198, 197, 0, 0, 0, 704, 703, 0, 705, 0,
14406 0, 152, 151, 0, 0, 0, 0, 0, 932, 931,
14407 0, 933, 0, 843, 852, 854, 848, 849, 850, 851,
14408 847, 846, 853, 845, 0, 921, 920, 925, 70, 121,
14409 123, 153, 235, 237, 0, 544, 545, 985, 987, 1050,
14410 1211, 1214, 0, 0, 467, 627, 0, 803, 0, 0,
14411 950, 1003, 1052, 1215, 0, 124, 140, 141, 133, 128,
14412 138, 126, 139, 130, 131, 127, 132, 134, 129, 136,
14413 135, 142, 137, 0, 0, 393, 196, 1099, 0, 407,
14414 409, 0, 701, 150, 0, 0, 0, 674, 0, 685,
14415 687, 688, 0, 0, 929, 0, 0, 0, 0, 0,
14416 0, 0, 0, 871, 873, 874, 0, 927, 926, 0,
14417 928, 565, 0, 44, 0, 43, 42, 0, 201, 200,
14418 469, 629, 0, 1162, 1161, 0, 805, 919, 918, 827,
14419 855, 0, 0, 0, 1217, 0, 113, 0, 0, 0,
14420 0, 0, 0, 0, 0, 0, 0, 0, 608, 1192,
14421 1197, 0, 1098, 1102, 1101, 1100, 1103, 1191, 1194, 186,
14422 187, 188, 0, 0, 0, 673, 676, 675, 605, 398,
14423 421, 420, 0, 0, 16, 15, 0, 0, 166, 165,
14424 0, 169, 168, 0, 172, 171, 0, 175, 174, 0,
14425 1153, 924, 566, 0, 0, 0, 0, 41, 45, 46,
14426 199, 0, 0, 0, 789, 0, 829, 0, 0, 949,
14427 955, 960, 954, 952, 953, 957, 958, 951, 956, 959,
14428 961, 1002, 1005, 0, 0, 1051, 1057, 1059, 1064, 1056,
14429 1054, 1055, 1061, 1058, 1062, 1053, 1060, 1063, 1065, 0,
14430 0, 0, 0, 0, 323, 324, 0, 0, 356, 357,
14431 417, 381, 416, 917, 0, 916, 560, 696, 695, 647,
14432 665, 0, 740, 774, 0, 0, 877, 876, 0, 995,
14433 0, 1222, 0, 609, 0, 39, 0, 1198, 0, 362,
14434 795, 1195, 0, 185, 679, 678, 0, 52, 1111, 606,
14435 0, 399, 0, 400, 14, 164, 167, 170, 173, 0,
14436 862, 863, 0, 564, 0, 0, 0, 0, 51, 0,
14437 468, 471, 470, 0, 628, 633, 631, 630, 632, 0,
14438 0, 790, 0, 804, 808, 807, 806, 0, 0, 857,
14439 0, 0, 0, 0, 0, 1004, 1008, 1009, 1006, 1010,
14440 1007, 0, 0, 0, 1216, 1220, 1219, 1218, 0, 75,
14441 0, 112, 114, 117, 119, 115, 116, 118, 120, 0,
14442 322, 325, 332, 326, 327, 328, 329, 330, 331, 333,
14443 0, 0, 358, 359, 0, 0, 559, 562, 561, 563,
14444 0, 0, 0, 739, 743, 742, 741, 744, 0, 773,
14445 781, 782, 778, 775, 776, 777, 780, 779, 783, 0,
14446 875, 886, 881, 878, 879, 880, 883, 882, 884, 885,
14447 0, 994, 998, 996, 997, 1117, 0, 1221, 1223, 1227,
14448 1224, 1226, 1225, 1228, 607, 38, 0, 1196, 0, 0,
14449 1193, 677, 0, 0, 604, 397, 0, 0, 861, 865,
14450 864, 810, 40, 1024, 47, 906, 36, 788, 712, 0,
14451 828, 838, 840, 834, 835, 836, 837, 833, 830, 832,
14452 839, 831, 841, 513, 856, 859, 858, 860, 0, 488,
14453 494, 1164, 1163, 0, 786, 948, 0, 938, 27, 0,
14454 0, 0, 26, 25, 0, 0, 0, 0, 0, 0,
14455 0, 0, 1070, 0, 355, 360, 361, 0, 0, 384,
14456 383, 0, 649, 0, 667, 0, 0, 144, 0, 0,
14457 0, 0, 90, 93, 0, 0, 364, 0, 0, 797,
14458 0, 0, 55, 551, 56, 54, 1114, 1115, 1113, 0,
14459 0, 178, 177, 0, 518, 517, 0, 0, 0, 1025,
14460 0, 0, 37, 714, 0, 0, 487, 489, 785, 787,
14461 937, 939, 0, 0, 0, 24, 784, 973, 0, 0,
14462 0, 239, 0, 747, 0, 0, 0, 793, 825, 0,
14463 1000, 0, 0, 0, 0, 1177, 0, 382, 391, 389,
14464 386, 387, 390, 388, 385, 392, 473, 0, 510, 0,
14465 666, 671, 669, 668, 670, 672, 1152, 0, 0, 145,
14466 0, 1116, 1118, 1120, 1119, 0, 18, 0, 523, 524,
14467 594, 592, 593, 0, 91, 0, 0, 363, 365, 0,
14468 796, 798, 538, 549, 53, 0, 176, 0, 0, 809,
14469 811, 1067, 1023, 0, 905, 908, 907, 35, 0, 227,
14470 225, 226, 0, 0, 512, 514, 515, 0, 0, 29,
14471 0, 0, 1212, 0, 972, 974, 106, 238, 240, 155,
14472 746, 748, 821, 792, 794, 824, 826, 999, 1001, 0,
14473 1069, 1071, 1072, 0, 181, 180, 0, 521, 520, 0,
14474 0, 0, 1105, 0, 0, 648, 657, 655, 650, 652,
14475 654, 653, 651, 656, 658, 0, 143, 0, 0, 0,
14476 0, 17, 22, 19, 21, 20, 23, 0, 528, 526,
14477 525, 527, 595, 596, 0, 89, 0, 1091, 1092, 0,
14478 262, 801, 800, 0, 540, 552, 1112, 516, 0, 0,
14479 0, 713, 716, 715, 224, 0, 0, 28, 32, 30,
14480 31, 33, 909, 0, 0, 0, 0, 0, 0, 179,
14481 0, 0, 1176, 1179, 1178, 1166, 1165, 0, 0, 889,
14482 888, 0, 0, 472, 476, 475, 474, 0, 509, 511,
14483 0, 102, 101, 99, 100, 380, 1038, 1036, 1037, 0,
14484 529, 530, 0, 591, 0, 0, 1095, 1093, 1094, 0,
14485 0, 799, 0, 0, 0, 1027, 0, 1066, 1068, 159,
14486 531, 555, 0, 0, 105, 107, 0, 154, 156, 157,
14487 820, 822, 0, 253, 0, 252, 254, 0, 1074, 1076,
14488 1075, 1077, 1078, 519, 0, 0, 887, 897, 899, 893,
14489 894, 895, 896, 892, 891, 898, 890, 900, 0, 1104,
14490 1108, 1109, 1110, 1106, 1107, 0, 902, 103, 0, 104,
14491 0, 1039, 0, 522, 0, 0, 1090, 0, 0, 264,
14492 265, 267, 268, 273, 266, 272, 271, 0, 539, 543,
14493 542, 541, 0, 550, 554, 553, 0, 1026, 1028, 0,
14494 160, 0, 0, 584, 1213, 0, 0, 259, 255, 257,
14495 256, 258, 0, 1079, 1080, 0, 791, 183, 0, 0,
14496 0, 0, 98, 1035, 1041, 1040, 0, 0, 681, 0,
14497 867, 263, 270, 269, 0, 0, 158, 0, 0, 533,
14498 535, 537, 536, 557, 0, 586, 0, 0, 600, 598,
14499 599, 260, 0, 261, 711, 1073, 0, 0, 0, 373,
14500 901, 904, 903, 745, 241, 0, 700, 699, 707, 0,
14501 376, 0, 1021, 532, 534, 556, 558, 0, 0, 602,
14502 601, 603, 0, 548, 251, 182, 184, 0, 0, 0,
14503 680, 683, 682, 684, 0, 709, 708, 0, 710, 866,
14504 869, 868, 870, 0, 1022, 0, 585, 590, 588, 589,
14505 587, 0, 597, 992, 993, 706, 1020, 34
14506 };
14507
14508
14509 const short int
14510 Parser::yypgoto_[] =
14511 {
14512 -1561, -1561, -1561, -1561, -1561, 911, -1561, -1238, -1561, -1561,
14513 -1561, 669, -1561, -1561, -1561, -1561, -1561, 365, -1561, -1013,
14514 -1561, -1561, -1561, -1561, 1150, 1107, -1561, -1561, -1196, -1561,
14515 389, -1561, -1561, -1561, 3, -1561, -1561, -1561, -1561, -261,
14516 1457, 1463, -210, 1639, -1561, -1561, -1561, 773, -1561, -1561,
14517 -1561, -1561, -1561, -1561, -1561, 182, -1561, -1561, -1561, -1561,
14518 1466, -17, -1561, -977, -1561, -1561, -1561, -1561, -1561, -1561,
14519 -1561, -246, -1561, 345, -1561, -1561, 444, -1561, -1561, -1561,
14520 -1561, -1561, -1229, -1561, -1228, -1561, -1227, -1561, -1224, -1561,
14521 -1561, -1561, -1336, -1561, -1561, -1561, -758, -1561, -1561, -1561,
14522 -1561, -1561, -1561, -864, -1561, -1561, -1561, -1561, -1561, -1561,
14523 -1561, -1561, -39, -1561, -1561, -1561, -1561, -1561, -1561, -1490,
14524 -1561, -1561, 1473, -1561, -1561, -1561, -1561, -1561, -1370, -1561,
14525 -1561, -13, -1561, -11, -1561, -1561, -1561, -1561, -1561, -1561,
14526 1479, -1561, 800, -19, 1028, -1561, 801, -1561, 516, -1561,
14527 -982, -1561, -1561, -1561, 914, -1561, -1561, -1561, -1561, 1481,
14528 -1161, -1561, -1561, -1561, -1561, -1561, 1594, -1561, -1561, -1561,
14529 1192, -1561, -14, -1561, -1561, -1561, -995, -1561, -1561, -681,
14530 -1561, -4, -1561, -1561, -1561, -1561, -1561, -1561, -1561, 803,
14531 -1561, -1561, 1011, -1561, 1595, -1561, -1561, -1561, -1561, -1561,
14532 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -661, -1561, -1561,
14533 -1561, -1561, -1561, -1561, -907, -1561, -1561, -1561, -1561, -1561,
14534 -1561, 1147, 1802, -1561, -1561, -1561, -1561, -1561, -1561, -1027,
14535 -1561, -1561, -1561, -1561, -1561, 421, -1308, 279, 352, -1561,
14536 -1561, -1561, -1561, -1561, -1561, 78, -1328, -1561, -1561, -1561,
14537 -1561, 478, 467, -1561, -1314, -1561, -1354, -1561, -1561, -1561,
14538 -1561, -1561, -1561, -860, -1561, -1561, -1561, -1561, -1126, -1561,
14539 -1561, 354, -1561, -1561, -1561, -1561, -1561, -1019, -1561, -739,
14540 -1561, 1610, -1561, -288, -1561, -266, -1561, -241, -1561, -1561,
14541 -1561, -1561, -1561, 18, -1561, -347, 33, -32, -296, -1186,
14542 -1561, -1561, -1561, -1561, 700, -1561, -1561, 374, -1561, -1561,
14543 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, 823, 964,
14544 21, -622, -1561, 20, -1561, 156, -1561, -1561, -1561, -1561,
14545 -1561, -1561, -1561, 1618, -1561, 134, -1561, -1561, -1561, -1561,
14546 -1561, 253, -1561, -1561, 212, -1561, 213, -1561, -1561, -1561,
14547 -1561, -1561, -1561, -1561, -1561, -1561, 711, 843, -1561, -1561,
14548 -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -1561, 1510,
14549 -1123, -1561, -1561, -1561, -1561, 1624, -1561, -1561, -1561, 489,
14550 -1561, -278, -1561, -1561, 435, -1561, -1561, -1561, -1561, -1561,
14551 436, -1561, -1561, -1223, -1561, -1561, -1561, -1561, -1561, -1561,
14552 -429, -1561, -1561, -1561, -1509, -1561, -1107, -1561, -1561, -1561,
14553 -1561, 839, 504, -939, -826, -874, -1561, -628, -1561, -1561,
14554 -1561, -905, -1561, 165, -1561, -1561, -1561, -1561, -1561, -1561,
14555 766, 1159, -1561, -1007, -1561, -1561, -1561, -272, -1561, -1561,
14556 -1561, -1561, 1145, -1561, -99, -1561, -1561, 716, -1561, -1561,
14557 -1561, -1561, 1003, -1561, -1561, -1561, -1561, -1561, 684, -1561,
14558 -1561, -1561, -1561, -1561, -1561, -1561, -167, -1561, -1561, 240,
14559 -1561, -1561, -276, 1637, -1561, -1561, -1561, -1561, -1561, 261,
14560 -1561, -1444, -1561, -1561, -1561, -1561, 1744, -1561, 1524, -1561,
14561 -1561, -1561, -1561, -856, -1561, -1561, -1560, -1561, -1177, -1561,
14562 -1561, -1561, -1561, -1561, -1060, -1561, -1561, -1561, -1561, -525,
14563 -1561, -1561, -1220, 574, -1561, -1561, -1561, -1561, -1561, 1514,
14564 -1561, -1561, -1561, 314, -1561, -1561, -1561, -1561, -1561, -1561,
14565 -956, -1561, -879, -1561, -1561, -1561, 1537, -1561, -1561, -1561,
14566 -1561, 792, -1561, -1561, -1561, -1561, -1561, -1561, -1561, -3,
14567 35, 15, -1561
14568 };
14569
14570
14571 const short int
14572 Parser::yydefgoto_[] =
14573 {
14574 -1, 2, 44, 59, 7, 24, 15, 954, 1113, 1358,
14575 1545, 1166, 1421, 1276, 1492, 1588, 1748, 1067, 1481, 1213,
14576 1053, 907, 1054, 1055, 619, 620, 313, 1056, 1106, 1372,
14577 1461, 621, 749, 844, 232, 288, 327, 419, 770, 175,
14578 93, 94, 996, 248, 383, 413, 308, 183, 278, 1217,
14579 1553, 243, 1452, 414, 522, 1542, 1711, 1788, 1301, 1684,
14580 95, 68, 109, 998, 1182, 772, 893, 799, 923, 1343,
14581 1538, 97, 164, 820, 940, 773, 1503, 1685, 1589, 1819,
14582 315, 482, 956, 1117, 957, 1120, 958, 1123, 959, 1126,
14583 1240, 1470, 1435, 1613, 1780, 1876, 944, 1102, 72, 150,
14584 184, 807, 929, 909, 1057, 110, 303, 410, 535, 602,
14585 1398, 1582, 27, 46, 61, 774, 895, 1303, 1500, 1726,
14586 456, 682, 98, 168, 1611, 1754, 1827, 1872, 1558, 1730,
14587 1798, 1799, 1800, 1801, 622, 73, 185, 220, 304, 176,
14588 305, 407, 408, 47, 574, 679, 48, 78, 536, 665,
14589 999, 1186, 458, 623, 537, 459, 628, 460, 631, 99,
14590 1000, 1187, 1311, 1094, 1368, 1455, 194, 225, 287, 1704,
14591 624, 400, 1809, 447, 538, 1543, 1001, 1314, 1438, 727,
14592 927, 948, 1232, 592, 728, 814, 933, 593, 729, 1191,
14593 871, 1109, 331, 421, 233, 290, 724, 868, 461, 701,
14594 539, 608, 462, 635, 540, 611, 775, 910, 1060, 1141,
14595 1442, 1623, 81, 136, 1155, 1408, 57, 37, 58, 1409,
14596 402, 625, 112, 837, 374, 74, 186, 222, 666, 279,
14597 1444, 1635, 1269, 1485, 1241, 1473, 1436, 1616, 1361, 1547,
14598 1648, 1722, 1679, 1821, 1858, 1859, 1462, 1664, 1732, 776,
14599 777, 586, 1463, 1900, 1464, 1665, 1465, 1733, 1680, 1822,
14600 1864, 1002, 1194, 898, 1133, 517, 651, 721, 1743, 1865,
14601 1897, 1362, 1550, 1654, 1755, 1867, 1902, 884, 1230, 965,
14602 1214, 234, 292, 1474, 424, 1475, 344, 427, 648, 766,
14603 911, 1061, 1142, 49, 16, 543, 113, 902, 885, 1003,
14604 1320, 1527, 594, 731, 1004, 1321, 1445, 821, 1026, 1027,
14605 1226, 1802, 1885, 1912, 826, 945, 595, 733, 1199, 879,
14606 1888, 732, 937, 1803, 1917, 1759, 1264, 1483, 1578, 463,
14607 581, 464, 642, 235, 293, 349, 431, 281, 378, 1005,
14608 1201, 1658, 1304, 1504, 82, 145, 83, 465, 710, 466,
14609 713, 541, 673, 273, 1006, 1204, 1173, 1156, 1413, 912,
14610 1260, 1520, 1305, 1506, 1095, 1369, 1458, 1459, 1663, 100,
14611 913, 1066, 1145, 1245, 1476, 236, 294, 354, 433, 1507,
14612 1686, 147, 1306, 1509, 914, 1146, 1267, 596, 830, 887,
14613 915, 1147, 1270, 961, 1242, 1804, 1889, 1921, 834, 964,
14614 1007, 1205, 1521, 1698, 1712, 1841, 1860, 1480, 1278, 597,
14615 736, 1196, 1069, 967, 1861, 835, 1049, 1806, 950, 316,
14616 484, 1158, 1416, 101, 206, 237, 172, 1417, 917, 1071,
14617 626, 649, 767, 1181, 1498, 467, 650, 10, 20, 30,
14618 779, 900, 544, 401, 345, 1783, 1784, 1008, 1208, 1308,
14619 1511, 1162, 918, 1072, 1163, 306, 411, 469, 627, 756,
14620 1818, 1923, 1247, 1478, 1570, 1734, 75, 115, 153, 1544,
14621 1719, 1792, 31, 238, 291, 52, 780, 919, 1073, 1479,
14622 1669, 1313, 1512, 1612, 1762, 1835, 221, 282, 102, 1456,
14623 1659, 1729, 285, 809, 932, 1018, 1524, 1701, 1107, 1373,
14624 1469, 1211, 1448, 177, 239, 429, 430, 542, 615, 275,
14625 373, 1326, 963, 76, 116, 154, 1065, 1414, 1697, 483,
14626 477, 588, 725, 1439, 1619, 478, 559, 558, 1098, 1090,
14627 938, 1222, 928, 1218, 653, 794, 104, 782, 1280, 1683,
14628 783, 922, 1074, 1179, 1012, 1212, 191, 257, 286, 51,
14629 32, 160, 259
14630 };
14631
14632
14633
14634
14635 const signed char Parser::yytable_ninf_ = -1;
14636 const unsigned short int
14637 Parser::yytable_[] =
14638 {
14639 11, 376, 899, 886, 342, 1144, 50, 951, 565, 17,
14640 21, 1050, 920, 63, 1110, 336, 355, 217, 1334, 1468,
14641 159, 8, 1265, 960, 1132, 1044, 343, 328, 50, 1391,
14642 735, 19, 404, 409, 1251, 1256, 9, 34, 1393, 1394,
14643 1395, 77, 71, 1396, 1399, 1466, 1379, 1401, 813, 41,
14644 42, 1360, 5, 250, 5, 255, 54, 5, 28, 1467,
14645 201, 96, 5, 28, 872, 1380, 5, 1010, 5, 33,
14646 5, 28, 1286, 5, 53, 5, 1154, 877, 1171, 33,
14647 84, 5, 266, 11, 11, 11, 33, 28, 1561, 1153,
14648 1045, 1170, 33, 1048, 1152, 1229, 1169, 5, 33, 5,
14649 28, 5, 229, 1651, 8, 8, 8, 405, 405, 1738,
14650 265, 827, 266, 155, 85, 434, 5, 85, 5, 111,
14651 5, 11, 5, 1227, 425, 33, 5, 420, 33, 5,
14652 1716, 85, 156, 157, 33, 869, 189, 169, 170, 1188,
14653 173, 5, 8, 5, 149, 33, 1206, 5, 5, 5,
14654 5, 195, 5, 5, 803, 33, 33, 171, 85, 28,
14655 1033, 444, 1143, 265, 208, 435, 1172, 215, 1176, 197,
14656 60, 198, 85, 1079, 1017, 686, 85, 874, 803, 1307,
14657 244, 200, 880, 260, 204, 1657, 494, 1296, 200, 196,
14658 926, 1785, 200, 1825, 350, 211, 889, 1, 935, 816,
14659 1295, 227, 1365, 249, 1189, 254, 877, 230, 1376, 1333,
14660 1345, 1207, 1687, 1352, 1652, 228, 3, 716, 1385, 1078,
14661 272, 829, 258, 1344, 1432, 12, 242, 1332, 1342, 1791,
14662 1233, 405, 405, 405, 405, 405, 405, 405, 405, 405,
14663 405, 405, 1653, 262, 1761, 4, 475, 829, 14, 1820,
14664 1450, 1660, 1020, 531, 260, 388, 391, 936, 949, 390,
14665 391, 1451, 283, 85, 690, 302, 392, 1513, 85, 314,
14666 1377, 436, 5, 1418, 717, 1424, 1637, 881, 1086, 124,
14667 11, 12, 1129, 13, 321, 1385, 1047, 267, 829, 1727,
14668 1021, 326, 428, 432, 377, 23, 1014, 85, 1346, 89,
14669 1347, 8, 323, 208, 268, 333, 124, 90, 389, 85,
14670 1831, 209, 1720, 1312, 1014, 375, 309, 1868, 22, 1228,
14671 224, 90, 322, 1031, 124, 384, 338, 269, 428, 1514,
14672 356, 1724, 1924, 1638, 12, 39, 499, 500, 875, 13,
14673 1721, 1631, 18, 969, 18, 972, 148, 18, 977, 216,
14674 334, 335, 1028, 1029, 1794, 1688, 1042, 1043, 192, 193,
14675 6, 399, 90, 1573, 1574, 1807, 1808, 180, 329, 330,
14676 50, 1812, 1813, 1482, 29, 158, 406, 406, 1811, 1815,
14677 487, 423, 489, 437, 1643, 491, 1591, 192, 319, 18,
14678 443, 45, 496, 455, 498, 428, 473, 403, 403, 415,
14679 532, 533, 274, 1397, 422, 1814, 1042, 1880, 1909, 1910,
14680 1573, 1919, 1925, 1926, 339, 340, 677, 426, 1810, 870,
14681 416, 417, 418, 346, 347, 1554, 1833, 740, 1231, 295,
14682 479, 883, 85, 1062, 939, 1440, 89, 1183, 1042, 1460,
14683 1573, 1419, 1710, 1857, 1112, 1116, 1350, 1351, 1639, 1709,
14684 209, 317, 516, 90, 1834, 1672, 987, 124, 90, 1795,
14685 1767, 85, 1076, 1533, 1449, 1539, 1637, 1660, 1532, 1769,
14686 1770, 1771, 385, 829, 1772, 1774, 85, 33, 1776, 924,
14687 803, 1255, 35, 60, 85, 12, 36, 90, 85, 685,
14688 85, 1871, 85, 85, 525, 38, 1420, 296, 386, 1077,
14689 406, 406, 406, 406, 406, 406, 406, 406, 406, 406,
14690 406, 1548, 1551, 1252, 1257, 1787, 1705, 1266, 1285, 1873,
14691 11, 403, 403, 403, 403, 403, 403, 403, 403, 403,
14692 403, 403, 1630, 1411, 1789, 50, 12, 1078, 12, 1899,
14693 560, 8, 591, 1930, 974, 1629, 39, 1724, 605, 85,
14694 1627, 1287, 11, 1901, 85, 1740, 557, 689, 801, 1826,
14695 1741, 561, 200, 1832, 640, 85, 40, 889, 1450, 1928,
14696 43, 555, 449, 8, 1519, 599, 1549, 1552, 474, 1451,
14697 124, 56, 1523, 1929, 50, 612, 745, 746, 587, 751,
14698 752, 753, 894, 28, 13, 892, 1844, 678, 930, 903,
14699 89, 1695, 1852, 1562, 889, 55, 693, 1035, 64, 124,
14700 982, 696, 984, 85, 699, 1845, 1021, 65, 705, 1261,
14701 12, 1853, 90, 1805, 523, 708, 524, 161, 85, 85,
14702 85, 108, 1432, 719, 85, 387, 124, 1764, 1639, 1388,
14703 124, 124, 1157, 1281, 1175, 1036, 1037, 1038, 1039, 983,
14704 1032, 90, 103, 983, 1575, 1484, 882, 162, 816, 856,
14705 89, 1075, 987, 1694, 163, 743, 90, 146, 85, 85,
14706 876, 857, 803, 1650, 90, 946, 858, 1219, 90, 829,
14707 90, 12, 90, 90, 758, 174, 1033, 1649, 1385, 888,
14708 178, 829, 859, 761, 179, 889, 764, 984, 1713, 1281,
14709 1717, 974, 1035, 200, 771, 838, 1077, 1058, 798, 924,
14710 85, 806, 812, 124, 819, 12, 825, 1075, 1089, 833,
14711 180, 492, 493, 1079, 85, 1076, 985, 190, 86, 85,
14712 409, 1849, 1894, 1195, 85, 860, 1195, 1111, 1896, 90,
14713 1036, 1037, 1038, 1039, 90, 87, 993, 1114, 983, 181,
14714 861, 862, 182, 986, 1446, 90, 1220, 199, 218, 987,
14715 1035, 889, 1077, 1714, 889, 1718, 988, 200, 989, 1115,
14716 379, 873, 202, 1040, 380, 1337, 25, 26, 124, 1079,
14717 990, 203, 124, 88, 878, 85, 268, 85, 392, 1432,
14718 566, 105, 991, 1271, 251, 1699, 256, 205, 1036, 1037,
14719 1038, 1039, 992, 90, 1099, 405, 983, 1515, 405, 1014,
14720 875, 405, 1837, 567, 1760, 1224, 124, 124, 212, 90,
14721 90, 946, 1014, 1041, 90, 863, 377, 12, 1758, 1100,
14722 1886, 993, 245, 568, 1773, 569, 207, 1225, 106, 107,
14723 864, 654, 1101, 655, 984, 165, 1282, 375, 1134, 1272,
14724 1135, 908, 1576, 210, 1136, 85, 307, 966, 90, 90,
14725 318, 1150, 219, 1167, 381, 1085, 1886, 865, 1040, 866,
14726 955, 226, 124, 1273, 983, 166, 829, 124, 89, 924,
14727 1830, 988, 167, 989, 656, 12, 778, 1869, 657, 570,
14728 800, 231, 1013, 808, 1828, 942, 822, 382, 240, 1892,
14729 90, 519, 1881, 1579, 1580, 241, 997, 117, 118, 931,
14730 261, 106, 107, 878, 90, 119, 85, 1581, 1041, 90,
14731 1385, 120, 658, 829, 90, 566, 1040, 520, 260, 277,
14732 659, 1786, 966, 521, 889, 124, 924, 1119, 1122, 1125,
14733 1128, 1562, 12, 377, 1563, 263, 1854, 121, 567, 816,
14734 1673, 1515, 1870, 1021, 1838, 1839, 264, 571, 12, 1840,
14735 85, 1076, 122, 1447, 375, 946, 276, 1882, 568, 502,
14736 569, 12, 1293, 280, 1562, 90, 1041, 1563, 289, 1620,
14737 284, 451, 200, 11, 468, 11, 11, 476, 1426, 1097,
14738 85, 12, 297, 1700, 1330, 1706, 298, 1621, 1077, 25,
14739 62, 1093, 12, 124, 8, 1422, 8, 8, 299, 1918,
14740 1425, 377, 269, 393, 1427, 1079, 310, 1385, 1059, 1064,
14741 829, 1068, 1070, 151, 570, 152, 394, 85, 1088, 1271,
14742 377, 180, 375, 916, 1075, 875, 1622, 1138, 66, 67,
14743 395, 85, 1076, 518, 123, 90, 966, 1108, 267, 390,
14744 391, 375, 962, 966, 1151, 946, 1168, 503, 69, 70,
14745 470, 12, 396, 1922, 124, 480, 504, 380, 1849, 11,
14746 1453, 505, 506, 501, 406, 412, 11, 406, 11, 11,
14747 406, 11, 603, 481, 606, 609, 526, 613, 1471, 507,
14748 8, 508, 571, 125, 527, 403, 1079, 8, 403, 8,
14749 8, 403, 8, 1215, 1428, 1161, 90, 528, 124, 1273,
14750 1472, 1854, 1192, 126, 1198, 1198, 1429, 1192, 662, 79,
14751 80, 1209, 529, 1215, 668, 1430, 91, 92, 671, 530,
14752 1075, 675, 680, 598, 509, 510, 534, 85, 1076, 1081,
14753 11, 1082, 1563, 1288, 511, 512, 1277, 1497, 1499, 1501,
14754 90, 1431, 685, 686, 556, 641, 12, 687, 187, 188,
14755 562, 8, 563, 1282, 572, 1294, 213, 214, 600, 1302,
14756 1118, 1121, 1124, 1127, 564, 1077, 1259, 1317, 246, 247,
14757 90, 513, 1085, 1546, 1324, 246, 252, 1331, 1341, 573,
14758 85, 1076, 1079, 1862, 1862, 1359, 880, 694, 601, 117,
14759 118, 296, 697, 616, 688, 700, 1271, 119, 85, 706,
14760 270, 271, 618, 120, 300, 301, 709, 90, 311, 312,
14761 689, 1596, 324, 325, 720, 1614, 1617, 1075, 1077, 647,
14762 1215, 90, 351, 352, 85, 1076, 1159, 652, 1177, 121,
14763 1412, 1415, 690, 1354, 660, 1079, 664, 1615, 1618, 670,
14764 1392, 397, 398, 1405, 122, 723, 744, 438, 439, 722,
14765 630, 633, 1272, 637, 453, 454, 644, 1848, 1410, 1849,
14766 726, 1661, 1077, 730, 1386, 759, 471, 472, 1085, 25,
14767 486, 1078, 25, 488, 762, 124, 1273, 765, 1081, 1079,
14768 734, 881, 738, 1662, 737, 781, 739, 685, 686, 802,
14769 741, 684, 687, 815, 747, 1850, 754, 828, 1385, 795,
14770 836, 829, 137, 138, 139, 140, 1423, 803, 703, 1080,
14771 141, 142, 143, 144, 1696, 25, 490, 90, 1617, 712,
14772 715, 901, 1081, 904, 1082, 816, 123, 829, 124, 25,
14773 495, 120, 629, 632, 839, 636, 1083, 1297, 643, 688,
14774 1618, 1063, 25, 497, 840, 1084, 124, 514, 515, 1318,
14775 970, 841, 973, 377, 842, 689, 1325, 978, 846, 1487,
14776 1348, 589, 590, 847, 1489, 1085, 848, 1491, 638, 639,
14777 90, 534, 661, 683, 375, 125, 849, 690, 534, 667,
14778 534, 674, 638, 692, 1086, 1592, 991, 867, 90, 890,
14779 702, 1215, 638, 695, 891, 126, 717, 1749, 1751, 638,
14780 698, 711, 714, 897, 875, 896, 11, 11, 966, 966,
14781 925, 1518, 638, 704, 90, 638, 707, 934, 1531, 638,
14782 718, 943, 1400, 638, 742, 1406, 1087, 8, 8, 1024,
14783 947, 1051, 921, 968, 1190, 1193, 1197, 1197, 1193, 1190,
14784 971, 855, 1068, 587, 974, 357, 975, 755, 358, 638,
14785 757, 976, 359, 360, 361, 362, 979, 363, 980, 364,
14786 365, 638, 760, 366, 638, 763, 981, 377, 1015, 691,
14787 604, 367, 607, 610, 1016, 614, 1022, 127, 128, 129,
14788 368, 768, 769, 796, 797, 389, 369, 1011, 375, 804,
14789 805, 1023, 370, 1025, 371, 130, 131, 132, 1034, 372,
14790 1626, 810, 811, 817, 818, 1046, 663, 823, 824, 1103,
14791 1052, 784, 669, 831, 832, 1130, 672, 1131, 1642, 676,
14792 681, 785, 1140, 854, 133, 134, 135, 786, 850, 851,
14793 1223, 787, 618, 853, 1180, 788, 1210, 1866, 905, 906,
14794 952, 953, 789, 1887, 790, 994, 995, 726, 1019, 1091,
14795 1092, 1104, 1105, 1216, 791, 792, 793, 638, 1137, 1148,
14796 1149, 1678, 1234, 575, 576, 577, 578, 579, 580, 582,
14797 583, 584, 585, 1164, 1165, 1249, 1250, 1235, 1898, 1887,
14798 1253, 1254, 1096, 1262, 1263, 1274, 1275, 1236, 1906, 1283,
14799 1284, 1237, 617, 1522, 1238, 966, 634, 966, 1290, 1291,
14800 1534, 645, 646, 1299, 1300, 1315, 1316, 377, 377, 1239,
14801 1931, 1322, 1323, 1328, 1329, 1339, 1340, 1244, 1139, 1356,
14802 1357, 1104, 1378, 1389, 1390, 1315, 1404, 1243, 375, 375,
14803 1433, 1434, 25, 1486, 1246, 1160, 1248, 1178, 1268, 545,
14804 546, 547, 548, 549, 550, 551, 552, 553, 554, 25,
14805 1488, 25, 1490, 1595, 1289, 1598, 1516, 1517, 1310, 1601,
14806 1355, 1604, 1529, 1530, 1606, 1288, 1608, 1540, 1541, 1556,
14807 1557, 1768, 1556, 1560, 1568, 1569, 1583, 1584, 1593, 1594,
14808 1739, 1364, 1633, 1593, 1597, 1846, 1847, 1593, 1600, 1593,
14809 1603, 1593, 1605, 1593, 1607, 1609, 1610, 1624, 1625, 1640,
14810 1641, 1670, 1671, 1676, 1677, 1691, 1692, 1702, 1703, 1707,
14811 1708, 1736, 1737, 1593, 1744, 1746, 1747, 146, 1750, 1765,
14812 1766, 1778, 1779, 1816, 1817, 1104, 1843, 1279, 1104, 1851,
14813 1742, 1893, 1742, 1895, 146, 1905, 1366, 1367, 1370, 1371,
14814 1374, 1375, 1381, 1382, 1383, 1384, 1298, 1387, 1403, 1437,
14815 1309, 1441, 1443, 1454, 1457, 1477, 1526, 1495, 1319, 1496,
14816 1502, 1505, 1528, 1536, 1537, 1327, 1555, 1559, 1338, 1349,
14817 1564, 1566, 377, 1571, 1572, 1577, 1363, 1587, 1590, 1599,
14818 1602, 1077, 1636, 1647, 966, 1433, 1660, 1655, 1656, 1668,
14819 1666, 1667, 1674, 375, 1675, 1385, 1682, 124, 1689, 966,
14820 1715, 1723, 1725, 1081, 1731, 1742, 1752, 1757, 377, 377,
14821 1763, 1104, 1790, 1622, 1793, 1796, 1556, 1797, 1823, 1824,
14822 1836, 1842, 1795, 1855, 1856, 1903, 1874, 748, 1875, 375,
14823 375, 1402, 1879, 1883, 1407, 1884, 377, 1021, 1890, 1745,
14824 1891, 1292, 1904, 1877, 1878, 1914, 843, 1736, 1565, 1932,
14825 1933, 253, 1934, 1775, 440, 1935, 1936, 375, 1937, 1753,
14826 441, 1221, 1628, 442, 1911, 1510, 1920, 1184, 1185, 750,
14827 445, 320, 377, 1927, 1915, 332, 377, 1203, 446, 457,
14828 114, 941, 1907, 1908, 1567, 1690, 845, 1644, 1494, 1645,
14829 1863, 1632, 341, 375, 1335, 1200, 1913, 375, 1916, 1030,
14830 1829, 348, 1728, 1781, 1782, 1336, 1174, 448, 353, 1508,
14831 1585, 1586, 1202, 1493, 1353, 852, 1009, 1756, 337, 1735,
14832 223, 450, 485, 1693, 1258, 0, 0, 0, 0, 0,
14833 0, 0, 0, 0, 452, 0, 0, 0, 0, 0,
14834 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14835 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14836 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14837 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14838 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14839 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14840 0, 0, 1525, 0, 0, 0, 0, 0, 0, 1535,
14841 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14842 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14843 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14844 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14845 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14846 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14847 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14848 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14849 0, 1634, 0, 0, 0, 0, 0, 0, 0, 0,
14850 0, 0, 0, 0, 0, 0, 0, 0, 0, 1646,
14851 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14852 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14853 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14854 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14855 0, 0, 1681, 0, 0, 0, 0, 0, 0, 0,
14856 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14857 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14858 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14859 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14860 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14861 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14862 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14863 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14864 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14865 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14866 0, 0, 1777
14867 };
14868
14869
14870 const short int
14871 Parser::yycheck_[] =
14872 {
14873 3, 297, 862, 829, 292, 1065, 38, 886, 533, 12,
14874 13, 967, 868, 52, 1033, 291, 294, 184, 1204, 1373,
14875 119, 3, 1145, 887, 1051, 964, 292, 288, 60, 1267,
14876 658, 13, 379, 380, 1141, 1142, 3, 22, 1267, 1267,
14877 1267, 60, 59, 1267, 1267, 1373, 1242, 1267, 729, 34,
14878 35, 1212, 4, 220, 4, 222, 41, 4, 7, 1373,
14879 159, 78, 4, 7, 803, 1242, 4, 923, 4, 5,
14880 4, 7, 1179, 4, 39, 4, 1071, 816, 1073, 5,
14881 65, 4, 7, 86, 87, 88, 5, 7, 1458, 1071,
14882 964, 1073, 5, 967, 1071, 1108, 1073, 4, 5, 4,
14883 7, 4, 201, 1547, 86, 87, 88, 379, 380, 1669,
14884 5, 733, 7, 116, 90, 393, 4, 90, 4, 86,
14885 4, 124, 4, 76, 390, 5, 4, 388, 5, 4,
14886 1639, 90, 117, 118, 5, 94, 153, 122, 123, 1078,
14887 125, 4, 124, 4, 109, 5, 1085, 4, 4, 4,
14888 4, 154, 4, 4, 149, 5, 5, 124, 90, 7,
14889 149, 407, 68, 5, 127, 141, 1073, 184, 1073, 154,
14890 132, 156, 90, 145, 932, 73, 90, 109, 149, 1186,
14891 212, 116, 96, 78, 169, 1555, 427, 1182, 116, 154,
14892 871, 139, 116, 67, 293, 180, 236, 294, 879, 194,
14893 1182, 198, 1215, 220, 1078, 222, 945, 204, 105, 1204,
14894 1205, 1085, 122, 1208, 1550, 200, 117, 185, 233, 137,
14895 237, 236, 225, 1205, 264, 187, 211, 1204, 1205, 1719,
14896 1109, 503, 504, 505, 506, 507, 508, 509, 510, 511,
14897 512, 513, 1550, 228, 1688, 0, 413, 236, 294, 1739,
14898 168, 123, 933, 494, 78, 79, 184, 879, 886, 183,
14899 184, 179, 84, 90, 162, 282, 201, 105, 90, 286,
14900 167, 247, 4, 66, 242, 1282, 87, 191, 250, 238,
14901 283, 187, 1040, 245, 287, 233, 967, 182, 236, 1659,
14902 285, 288, 391, 392, 297, 294, 285, 90, 1205, 258,
14903 1205, 283, 287, 127, 199, 290, 238, 280, 150, 90,
14904 1754, 274, 1648, 1187, 285, 297, 283, 1826, 119, 272,
14905 293, 280, 287, 945, 238, 310, 291, 222, 427, 167,
14906 295, 203, 1892, 144, 187, 260, 435, 436, 270, 245,
14907 1648, 1527, 294, 295, 294, 295, 295, 294, 295, 184,
14908 294, 295, 294, 295, 1724, 265, 294, 295, 294, 295,
14909 294, 378, 280, 294, 295, 294, 295, 241, 294, 295,
14910 402, 294, 295, 1386, 294, 294, 379, 380, 1732, 1733,
14911 419, 294, 421, 402, 1545, 424, 1493, 294, 295, 294,
14912 407, 294, 431, 410, 433, 494, 413, 379, 380, 384,
14913 499, 500, 237, 1267, 389, 1733, 294, 295, 294, 295,
14914 294, 295, 294, 295, 294, 295, 294, 294, 1732, 294,
14915 385, 386, 387, 294, 295, 1452, 1762, 673, 1109, 210,
14916 415, 294, 90, 294, 294, 1314, 258, 294, 294, 294,
14917 294, 234, 294, 294, 294, 294, 294, 295, 259, 1635,
14918 274, 286, 469, 280, 1762, 1578, 219, 238, 280, 115,
14919 1698, 90, 91, 1445, 64, 1447, 87, 123, 1445, 1698,
14920 1698, 1698, 74, 236, 1698, 1698, 90, 5, 1698, 181,
14921 149, 1142, 118, 132, 90, 187, 294, 280, 90, 72,
14922 90, 1827, 90, 90, 479, 112, 289, 278, 100, 128,
14923 503, 504, 505, 506, 507, 508, 509, 510, 511, 512,
14924 513, 1450, 1451, 1141, 1142, 1711, 1623, 1145, 1179, 1827,
14925 523, 503, 504, 505, 506, 507, 508, 509, 510, 511,
14926 512, 513, 1527, 1272, 1711, 567, 187, 137, 187, 1867,
14927 525, 523, 559, 1897, 176, 1527, 260, 203, 567, 90,
14928 1527, 1179, 555, 1867, 90, 169, 523, 140, 725, 180,
14929 174, 526, 116, 195, 581, 90, 295, 236, 168, 1897,
14930 161, 177, 407, 555, 1438, 560, 1450, 1451, 413, 179,
14931 238, 294, 1438, 1897, 616, 570, 685, 686, 555, 688,
14932 689, 690, 858, 7, 245, 856, 1792, 616, 874, 865,
14933 258, 1620, 1798, 170, 236, 295, 623, 63, 295, 238,
14934 70, 628, 157, 90, 631, 1792, 285, 160, 635, 1144,
14935 187, 1798, 280, 1730, 282, 642, 284, 21, 90, 90,
14936 90, 295, 264, 650, 90, 237, 238, 1697, 259, 196,
14937 238, 238, 1071, 65, 1073, 101, 102, 103, 104, 109,
14938 946, 280, 78, 109, 1480, 111, 192, 51, 194, 80,
14939 258, 83, 219, 1619, 58, 682, 280, 294, 90, 90,
14940 147, 92, 149, 1547, 280, 181, 97, 138, 280, 236,
14941 280, 187, 280, 280, 701, 294, 149, 1547, 233, 230,
14942 295, 236, 113, 710, 295, 236, 713, 157, 1637, 65,
14943 1639, 176, 63, 116, 721, 737, 128, 983, 725, 181,
14944 90, 728, 729, 238, 731, 187, 733, 83, 1014, 736,
14945 241, 275, 276, 145, 90, 91, 186, 153, 108, 90,
14946 1077, 194, 1858, 1080, 90, 156, 1083, 1033, 1864, 280,
14947 101, 102, 103, 104, 280, 125, 291, 1035, 109, 295,
14948 171, 172, 294, 213, 279, 280, 217, 295, 184, 219,
14949 63, 236, 128, 1637, 236, 1639, 226, 116, 228, 1035,
14950 126, 803, 295, 229, 130, 1204, 294, 295, 238, 145,
14951 240, 295, 238, 163, 816, 90, 199, 90, 201, 264,
14952 110, 158, 252, 159, 220, 1621, 222, 295, 101, 102,
14953 103, 104, 262, 280, 10, 1077, 109, 283, 1080, 285,
14954 270, 1083, 106, 133, 1688, 1103, 238, 238, 85, 280,
14955 280, 181, 285, 279, 280, 246, 829, 187, 1688, 35,
14956 1849, 291, 266, 153, 1698, 155, 295, 1103, 205, 206,
14957 261, 146, 48, 148, 157, 21, 212, 829, 69, 215,
14958 71, 868, 1480, 295, 75, 90, 282, 889, 280, 280,
14959 286, 1071, 294, 1073, 220, 231, 1885, 288, 229, 290,
14960 887, 294, 238, 239, 109, 51, 236, 238, 258, 181,
14961 1754, 226, 58, 228, 189, 187, 721, 1826, 193, 209,
14962 725, 294, 924, 728, 1754, 880, 731, 253, 295, 1855,
14963 280, 24, 1841, 27, 28, 295, 923, 81, 82, 874,
14964 295, 205, 206, 945, 280, 89, 90, 41, 279, 280,
14965 233, 95, 227, 236, 280, 110, 229, 50, 78, 294,
14966 235, 233, 964, 56, 236, 238, 181, 1036, 1037, 1038,
14967 1039, 170, 187, 946, 173, 295, 142, 121, 133, 194,
14968 1578, 283, 1826, 285, 248, 249, 295, 277, 187, 1785,
14969 90, 91, 136, 93, 946, 181, 295, 1841, 153, 143,
14970 155, 187, 1182, 294, 170, 280, 279, 173, 295, 214,
14971 294, 407, 116, 986, 410, 988, 989, 413, 88, 1021,
14972 90, 187, 164, 1621, 1204, 1623, 295, 232, 128, 294,
14973 295, 1018, 187, 238, 986, 1281, 988, 989, 200, 1888,
14974 1288, 1014, 222, 223, 114, 145, 269, 233, 983, 986,
14975 236, 988, 989, 112, 209, 114, 295, 90, 1013, 159,
14976 1033, 241, 1014, 868, 83, 270, 271, 1054, 294, 295,
14977 295, 90, 91, 469, 218, 280, 1078, 1032, 182, 183,
14978 184, 1033, 887, 1085, 1071, 181, 1073, 120, 294, 295,
14979 86, 187, 295, 1889, 238, 295, 129, 130, 194, 1072,
14980 1366, 134, 135, 295, 1077, 294, 1079, 1080, 1081, 1082,
14981 1083, 1084, 566, 294, 568, 569, 281, 571, 1376, 152,
14982 1072, 154, 277, 267, 295, 1077, 145, 1079, 1080, 1081,
14983 1082, 1083, 1084, 1088, 204, 1072, 280, 295, 238, 239,
14984 1376, 142, 1079, 287, 1081, 1082, 216, 1084, 602, 294,
14985 295, 1086, 295, 1108, 608, 225, 294, 295, 612, 295,
14986 83, 615, 616, 559, 197, 198, 294, 90, 91, 188,
14987 1143, 190, 173, 243, 207, 208, 1163, 1425, 1426, 1427,
14988 280, 251, 72, 73, 295, 581, 187, 77, 294, 295,
14989 295, 1143, 295, 212, 295, 1182, 294, 295, 295, 1186,
14990 1036, 1037, 1038, 1039, 294, 128, 1143, 1194, 294, 295,
14991 280, 244, 231, 1449, 1201, 294, 295, 1204, 1205, 294,
14992 90, 91, 145, 1821, 1822, 1212, 96, 623, 295, 81,
14993 82, 278, 628, 131, 124, 631, 159, 89, 90, 635,
14994 294, 295, 294, 95, 294, 295, 642, 280, 294, 295,
14995 140, 1499, 294, 295, 650, 1513, 1514, 83, 128, 294,
14996 1215, 280, 294, 295, 90, 91, 1071, 294, 1073, 121,
14997 1272, 1273, 162, 1208, 295, 145, 294, 1513, 1514, 295,
14998 1267, 294, 295, 1270, 136, 294, 682, 294, 295, 286,
14999 576, 577, 215, 579, 294, 295, 582, 192, 1271, 194,
15000 294, 1559, 128, 294, 1259, 701, 294, 295, 231, 294,
15001 295, 137, 294, 295, 710, 238, 239, 713, 188, 145,
15002 294, 191, 295, 1559, 164, 721, 294, 72, 73, 725,
15003 295, 617, 77, 729, 294, 230, 294, 733, 233, 151,
15004 736, 236, 36, 37, 38, 39, 1281, 149, 634, 175,
15005 44, 45, 46, 47, 1620, 294, 295, 280, 1616, 645,
15006 646, 864, 188, 866, 190, 194, 218, 236, 238, 294,
15007 295, 95, 576, 577, 295, 579, 202, 1182, 582, 124,
15008 1616, 986, 294, 295, 295, 211, 238, 294, 295, 1194,
15009 893, 295, 895, 1366, 294, 140, 1201, 900, 295, 1408,
15010 1205, 294, 295, 295, 1413, 231, 295, 1416, 294, 295,
15011 280, 294, 295, 617, 1366, 267, 295, 162, 294, 295,
15012 294, 295, 294, 295, 250, 1494, 252, 295, 280, 295,
15013 634, 1386, 294, 295, 295, 287, 242, 1685, 1686, 294,
15014 295, 645, 646, 294, 270, 295, 1419, 1420, 1450, 1451,
15015 294, 1438, 294, 295, 280, 294, 295, 294, 1445, 294,
15016 295, 294, 1267, 294, 295, 1270, 292, 1419, 1420, 107,
15017 294, 974, 868, 295, 1079, 1080, 1081, 1082, 1083, 1084,
15018 295, 767, 1419, 1420, 176, 8, 295, 691, 11, 294,
15019 295, 295, 15, 16, 17, 18, 295, 20, 295, 22,
15020 23, 294, 295, 26, 294, 295, 295, 1480, 295, 254,
15021 566, 34, 568, 569, 295, 571, 295, 12, 13, 14,
15022 43, 294, 295, 294, 295, 150, 49, 923, 1480, 294,
15023 295, 295, 55, 294, 57, 30, 31, 32, 295, 62,
15024 1527, 294, 295, 294, 295, 294, 602, 294, 295, 105,
15025 294, 9, 608, 294, 295, 295, 612, 295, 1545, 615,
15026 616, 19, 295, 767, 59, 60, 61, 25, 294, 295,
15027 295, 29, 294, 295, 294, 33, 294, 1825, 294, 295,
15028 294, 295, 40, 1849, 42, 294, 295, 294, 295, 294,
15029 295, 294, 295, 294, 52, 53, 54, 294, 295, 294,
15030 295, 1588, 295, 545, 546, 547, 548, 549, 550, 551,
15031 552, 553, 554, 294, 295, 294, 295, 295, 1866, 1885,
15032 294, 295, 1018, 294, 295, 294, 295, 295, 1876, 294,
15033 295, 295, 574, 1438, 295, 1637, 578, 1639, 294, 295,
15034 1445, 583, 584, 294, 295, 294, 295, 1620, 1621, 294,
15035 1898, 294, 295, 294, 295, 294, 295, 294, 1054, 294,
15036 295, 294, 295, 294, 295, 294, 295, 295, 1620, 1621,
15037 294, 295, 294, 295, 294, 1071, 295, 1073, 294, 504,
15038 505, 506, 507, 508, 509, 510, 511, 512, 513, 294,
15039 295, 294, 295, 1498, 295, 1500, 294, 295, 294, 1504,
15040 273, 1506, 294, 295, 1509, 243, 1511, 294, 295, 294,
15041 295, 1698, 294, 295, 294, 295, 294, 295, 294, 295,
15042 1675, 295, 1527, 294, 295, 1794, 1795, 294, 295, 294,
15043 295, 294, 295, 294, 295, 294, 295, 294, 295, 294,
15044 295, 294, 295, 294, 295, 294, 295, 294, 295, 294,
15045 295, 294, 295, 294, 295, 294, 295, 294, 295, 294,
15046 295, 294, 295, 294, 295, 294, 295, 1163, 294, 295,
15047 294, 295, 294, 295, 294, 295, 85, 295, 295, 295,
15048 295, 295, 221, 295, 256, 295, 1182, 295, 166, 294,
15049 1186, 294, 294, 294, 294, 294, 157, 295, 1194, 295,
15050 294, 294, 165, 295, 294, 1201, 268, 105, 1204, 1205,
15051 295, 295, 1785, 263, 295, 295, 1212, 294, 294, 98,
15052 224, 128, 295, 294, 1826, 294, 123, 295, 294, 257,
15053 295, 295, 295, 1785, 99, 233, 295, 238, 295, 1841,
15054 295, 295, 294, 188, 295, 294, 294, 294, 1821, 1822,
15055 295, 294, 294, 271, 295, 295, 294, 294, 178, 295,
15056 295, 295, 115, 255, 295, 1867, 295, 687, 295, 1821,
15057 1822, 1267, 295, 295, 1270, 295, 1849, 285, 295, 1684,
15058 294, 1182, 295, 1838, 1839, 294, 749, 294, 1469, 295,
15059 295, 222, 295, 1698, 407, 295, 295, 1849, 295, 1687,
15060 407, 1098, 1527, 407, 1885, 1431, 1889, 1077, 1077, 687,
15061 407, 287, 1885, 1897, 1888, 290, 1889, 1084, 407, 410,
15062 88, 880, 1877, 1878, 1473, 1616, 749, 1545, 1420, 1545,
15063 1822, 1527, 292, 1885, 1204, 1082, 1885, 1889, 1888, 945,
15064 1754, 293, 1659, 1701, 1701, 1204, 1073, 407, 294, 1430,
15065 1485, 1485, 1083, 1419, 1208, 766, 923, 1687, 291, 1668,
15066 186, 407, 418, 1619, 1142, -1, -1, -1, -1, -1,
15067 -1, -1, -1, -1, 407, -1, -1, -1, -1, -1,
15068 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15069 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15070 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15071 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15072 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15073 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15074 -1, -1, 1438, -1, -1, -1, -1, -1, -1, 1445,
15075 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15076 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15077 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15078 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15079 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15080 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15081 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15082 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15083 -1, 1527, -1, -1, -1, -1, -1, -1, -1, -1,
15084 -1, -1, -1, -1, -1, -1, -1, -1, -1, 1545,
15085 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15086 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15087 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15088 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15089 -1, -1, 1588, -1, -1, -1, -1, -1, -1, -1,
15090 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15091 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15092 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15093 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15094 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15095 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15096 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15097 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15098 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15099 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
15100 -1, -1, 1698
15101 };
15102
15103
15104
15105 const unsigned short int
15106 Parser::yystos_[] =
15107 {
15108 0, 294, 297, 117, 0, 4, 294, 300, 589, 592,
15109 733, 845, 187, 245, 294, 302, 590, 845, 294, 589,
15110 734, 845, 119, 294, 301, 294, 295, 408, 7, 294,
15111 735, 768, 846, 5, 847, 118, 294, 513, 112, 260,
15112 295, 847, 847, 161, 298, 294, 409, 439, 442, 589,
15113 593, 845, 771, 846, 847, 295, 294, 512, 514, 299,
15114 132, 410, 295, 408, 295, 160, 294, 295, 357, 294,
15115 295, 357, 394, 431, 521, 762, 809, 439, 443, 294,
15116 295, 508, 640, 642, 847, 90, 108, 125, 163, 258,
15117 280, 294, 295, 336, 337, 356, 357, 367, 418, 455,
15118 665, 719, 784, 809, 832, 158, 205, 206, 295, 358,
15119 401, 592, 518, 592, 518, 763, 810, 81, 82, 89,
15120 95, 121, 136, 218, 238, 267, 287, 12, 13, 14,
15121 30, 31, 32, 59, 60, 61, 509, 36, 37, 38,
15122 39, 44, 45, 46, 47, 641, 294, 677, 295, 846,
15123 395, 301, 301, 764, 811, 845, 847, 847, 294, 740,
15124 847, 21, 51, 58, 368, 21, 51, 58, 419, 847,
15125 847, 592, 722, 847, 294, 335, 435, 799, 295, 295,
15126 241, 295, 294, 343, 396, 432, 522, 294, 295, 357,
15127 809, 842, 294, 295, 462, 845, 846, 847, 847, 295,
15128 116, 740, 295, 295, 847, 295, 720, 295, 127, 274,
15129 295, 847, 85, 294, 295, 357, 719, 762, 809, 294,
15130 433, 782, 523, 782, 293, 463, 294, 330, 847, 740,
15131 330, 294, 330, 490, 577, 629, 671, 721, 769, 800,
15132 295, 295, 847, 347, 593, 266, 294, 295, 339, 357,
15133 762, 809, 295, 339, 357, 762, 809, 843, 845, 848,
15134 78, 295, 847, 295, 295, 5, 7, 182, 199, 222,
15135 294, 295, 357, 649, 719, 805, 295, 294, 344, 525,
15136 294, 633, 783, 84, 294, 788, 844, 464, 331, 295,
15137 491, 770, 578, 630, 672, 210, 278, 164, 295, 200,
15138 294, 295, 357, 402, 434, 436, 751, 809, 342, 592,
15139 269, 294, 295, 322, 357, 376, 715, 719, 809, 295,
15140 462, 845, 846, 847, 294, 295, 330, 332, 335, 294,
15141 295, 488, 490, 847, 294, 295, 768, 769, 846, 294,
15142 295, 577, 579, 581, 582, 740, 294, 295, 629, 631,
15143 740, 294, 295, 671, 673, 677, 846, 8, 11, 15,
15144 16, 17, 18, 20, 22, 23, 26, 34, 43, 49,
15145 55, 57, 62, 806, 520, 589, 594, 845, 634, 126,
15146 130, 220, 253, 340, 847, 74, 100, 237, 79, 150,
15147 183, 184, 201, 223, 295, 295, 295, 294, 295, 357,
15148 467, 739, 516, 589, 591, 733, 845, 437, 438, 591,
15149 403, 752, 294, 341, 349, 847, 846, 846, 846, 333,
15150 335, 489, 847, 294, 580, 581, 294, 583, 740, 801,
15151 802, 632, 740, 674, 677, 141, 247, 439, 294, 295,
15152 336, 337, 356, 357, 367, 418, 455, 469, 665, 719,
15153 784, 809, 832, 294, 295, 357, 416, 436, 448, 451,
15154 453, 494, 498, 625, 627, 643, 645, 731, 809, 753,
15155 86, 294, 295, 357, 719, 762, 809, 816, 821, 847,
15156 295, 294, 377, 815, 716, 815, 295, 408, 295, 408,
15157 295, 408, 275, 276, 583, 295, 408, 295, 408, 740,
15158 740, 295, 143, 120, 129, 134, 135, 152, 154, 197,
15159 198, 207, 208, 244, 294, 295, 357, 561, 809, 24,
15160 50, 56, 350, 282, 284, 847, 281, 295, 295, 295,
15161 295, 583, 740, 740, 294, 404, 444, 450, 470, 496,
15162 500, 647, 803, 591, 738, 738, 738, 738, 738, 738,
15163 738, 738, 738, 738, 738, 177, 295, 592, 823, 822,
15164 847, 846, 295, 295, 294, 805, 110, 133, 153, 155,
15165 209, 277, 295, 294, 440, 440, 440, 440, 440, 440,
15166 440, 626, 440, 440, 440, 440, 547, 592, 817, 294,
15167 295, 357, 479, 483, 598, 612, 683, 705, 809, 847,
15168 295, 295, 405, 444, 450, 439, 444, 450, 497, 444,
15169 450, 501, 847, 444, 450, 804, 131, 440, 294, 320,
15170 321, 327, 430, 449, 466, 517, 726, 754, 452, 726,
15171 754, 454, 726, 754, 440, 499, 726, 754, 294, 295,
15172 357, 809, 628, 726, 754, 440, 440, 294, 584, 727,
15173 732, 562, 294, 830, 146, 148, 189, 193, 227, 235,
15174 295, 295, 444, 450, 294, 445, 524, 295, 444, 450,
15175 295, 444, 450, 648, 295, 444, 450, 294, 439, 441,
15176 444, 450, 417, 726, 754, 72, 73, 77, 124, 140,
15177 162, 254, 295, 357, 809, 295, 357, 809, 295, 357,
15178 809, 495, 726, 754, 295, 357, 809, 295, 357, 809,
15179 644, 726, 754, 646, 726, 754, 185, 242, 295, 357,
15180 809, 563, 286, 294, 492, 818, 294, 475, 480, 484,
15181 294, 599, 617, 613, 294, 713, 706, 164, 295, 294,
15182 367, 295, 295, 357, 809, 740, 740, 294, 320, 328,
15183 466, 740, 740, 740, 294, 726, 755, 295, 357, 809,
15184 295, 357, 809, 295, 357, 809, 585, 728, 294, 295,
15185 334, 357, 361, 371, 411, 502, 545, 546, 719, 736,
15186 772, 809, 833, 836, 9, 19, 25, 29, 33, 40,
15187 42, 52, 53, 54, 831, 151, 294, 295, 357, 363,
15188 719, 762, 809, 149, 294, 295, 357, 397, 719, 789,
15189 294, 295, 357, 475, 481, 809, 194, 294, 295, 357,
15190 369, 603, 719, 294, 295, 357, 610, 617, 809, 236,
15191 684, 294, 295, 357, 694, 711, 809, 519, 593, 295,
15192 295, 295, 294, 321, 329, 517, 295, 295, 295, 295,
15193 294, 295, 727, 295, 726, 754, 80, 92, 97, 113,
15194 156, 171, 172, 246, 261, 288, 290, 295, 493, 94,
15195 294, 486, 575, 593, 109, 270, 147, 575, 593, 615,
15196 96, 191, 192, 294, 573, 594, 710, 685, 230, 236,
15197 295, 295, 335, 362, 581, 412, 295, 294, 559, 559,
15198 737, 548, 593, 581, 548, 294, 295, 317, 357, 399,
15199 503, 586, 655, 666, 680, 686, 719, 724, 748, 773,
15200 789, 809, 837, 364, 181, 294, 475, 476, 828, 398,
15201 768, 846, 790, 482, 294, 475, 617, 618, 826, 294,
15202 370, 488, 847, 294, 392, 611, 181, 294, 477, 713,
15203 714, 828, 294, 295, 303, 357, 378, 380, 382, 384,
15204 399, 689, 719, 808, 695, 575, 593, 709, 295, 295,
15205 548, 295, 295, 548, 176, 295, 295, 295, 548, 295,
15206 295, 295, 70, 109, 157, 186, 213, 219, 226, 228,
15207 240, 252, 262, 291, 294, 295, 338, 357, 359, 446,
15208 456, 472, 557, 595, 600, 635, 650, 696, 743, 748,
15209 789, 809, 840, 593, 285, 295, 295, 392, 791, 295,
15210 475, 285, 295, 295, 107, 294, 604, 605, 294, 295,
15211 615, 617, 594, 149, 295, 63, 101, 102, 103, 104,
15212 229, 279, 294, 295, 709, 711, 294, 475, 711, 712,
15213 826, 548, 294, 316, 318, 319, 323, 400, 768, 846,
15214 504, 587, 294, 313, 592, 812, 667, 313, 592, 708,
15215 592, 725, 749, 774, 838, 83, 91, 128, 137, 145,
15216 175, 188, 190, 202, 211, 231, 250, 292, 847, 594,
15217 825, 294, 295, 357, 459, 660, 809, 593, 824, 10,
15218 35, 48, 393, 105, 294, 295, 324, 794, 847, 487,
15219 573, 594, 294, 304, 579, 581, 294, 379, 631, 740,
15220 381, 631, 740, 383, 631, 740, 385, 631, 740, 392,
15221 295, 295, 525, 560, 69, 71, 75, 295, 357, 809,
15222 295, 505, 588, 68, 800, 668, 681, 687, 294, 295,
15223 338, 357, 359, 446, 472, 510, 653, 696, 717, 719,
15224 809, 592, 747, 750, 294, 295, 307, 338, 357, 359,
15225 446, 472, 510, 652, 653, 696, 717, 719, 809, 839,
15226 294, 729, 360, 294, 438, 442, 447, 457, 709, 711,
15227 313, 485, 592, 313, 558, 591, 707, 313, 592, 614,
15228 614, 636, 707, 485, 651, 697, 709, 711, 744, 846,
15229 294, 797, 841, 315, 576, 847, 294, 345, 829, 138,
15230 217, 343, 827, 295, 579, 581, 606, 76, 272, 315,
15231 574, 475, 478, 828, 295, 295, 295, 295, 295, 294,
15232 386, 530, 690, 295, 294, 669, 294, 758, 295, 294,
15233 295, 702, 713, 294, 295, 503, 702, 713, 837, 592,
15234 656, 805, 294, 295, 622, 666, 713, 682, 294, 528,
15235 688, 159, 215, 239, 294, 295, 309, 357, 704, 809,
15236 834, 65, 212, 294, 295, 503, 702, 713, 243, 295,
15237 294, 295, 307, 338, 357, 446, 472, 719, 809, 294,
15238 295, 354, 357, 413, 638, 658, 678, 729, 745, 809,
15239 294, 458, 711, 777, 473, 294, 295, 357, 719, 809,
15240 596, 601, 294, 295, 357, 719, 807, 809, 294, 295,
15241 338, 357, 359, 472, 595, 600, 652, 696, 809, 294,
15242 295, 357, 359, 365, 446, 472, 510, 717, 719, 809,
15243 294, 295, 472, 743, 846, 273, 294, 295, 305, 357,
15244 456, 534, 567, 809, 295, 315, 85, 295, 460, 661,
15245 295, 295, 325, 795, 295, 295, 105, 167, 295, 324,
15246 794, 221, 295, 256, 295, 233, 847, 295, 196, 294,
15247 295, 303, 357, 378, 380, 382, 384, 399, 406, 689,
15248 719, 808, 809, 166, 295, 357, 719, 809, 511, 515,
15249 845, 575, 593, 654, 813, 593, 718, 723, 66, 234,
15250 289, 308, 768, 846, 729, 677, 88, 114, 204, 216,
15251 225, 251, 264, 294, 295, 388, 532, 294, 474, 819,
15252 828, 294, 506, 294, 526, 602, 279, 93, 798, 64,
15253 168, 179, 348, 594, 294, 461, 785, 294, 662, 663,
15254 294, 326, 542, 548, 550, 552, 542, 550, 552, 796,
15255 387, 579, 581, 531, 579, 581, 670, 294, 759, 775,
15256 703, 314, 315, 623, 111, 529, 295, 408, 295, 408,
15257 295, 408, 310, 708, 547, 295, 295, 677, 730, 677,
15258 414, 677, 294, 372, 639, 294, 659, 675, 675, 679,
15259 372, 746, 778, 105, 167, 283, 294, 295, 357, 399,
15260 657, 698, 719, 789, 792, 809, 157, 597, 165, 294,
15261 295, 357, 359, 446, 719, 809, 295, 294, 366, 446,
15262 294, 295, 351, 471, 765, 306, 581, 535, 709, 711,
15263 568, 709, 711, 346, 525, 268, 294, 295, 424, 105,
15264 295, 424, 170, 173, 295, 326, 295, 531, 294, 295,
15265 760, 263, 295, 294, 295, 710, 713, 295, 624, 27,
15266 28, 41, 407, 294, 295, 680, 686, 294, 311, 374,
15267 294, 702, 740, 294, 295, 719, 677, 295, 719, 98,
15268 295, 719, 224, 295, 719, 295, 719, 295, 719, 294,
15269 295, 420, 779, 389, 579, 581, 533, 579, 581, 820,
15270 214, 232, 271, 507, 294, 295, 357, 359, 369, 446,
15271 472, 595, 603, 719, 809, 527, 295, 87, 144, 259,
15272 294, 295, 357, 456, 534, 567, 809, 294, 536, 559,
15273 711, 777, 388, 532, 569, 295, 294, 424, 637, 786,
15274 123, 579, 581, 664, 543, 551, 295, 295, 257, 776,
15275 294, 295, 666, 713, 295, 99, 294, 295, 357, 538,
15276 554, 809, 295, 835, 355, 373, 676, 122, 265, 295,
15277 533, 294, 295, 819, 826, 573, 594, 814, 699, 710,
15278 713, 793, 294, 295, 465, 702, 713, 294, 295, 595,
15279 294, 352, 700, 709, 711, 295, 700, 709, 711, 766,
15280 388, 532, 537, 295, 203, 294, 415, 424, 637, 787,
15281 425, 295, 544, 553, 761, 775, 294, 295, 792, 847,
15282 169, 174, 294, 564, 295, 719, 294, 295, 312, 677,
15283 295, 677, 294, 351, 421, 570, 765, 294, 559, 621,
15284 711, 777, 780, 295, 800, 294, 295, 303, 357, 378,
15285 380, 382, 384, 399, 689, 719, 808, 809, 294, 295,
15286 390, 640, 642, 741, 742, 139, 233, 324, 353, 794,
15287 294, 415, 767, 295, 424, 115, 295, 294, 426, 427,
15288 428, 429, 607, 619, 691, 702, 713, 294, 295, 468,
15289 550, 552, 294, 295, 542, 552, 294, 295, 756, 375,
15290 415, 539, 555, 178, 295, 67, 180, 422, 559, 621,
15291 711, 777, 195, 388, 532, 781, 295, 106, 248, 249,
15292 710, 701, 295, 295, 324, 794, 740, 740, 192, 194,
15293 230, 295, 324, 794, 142, 255, 295, 294, 540, 541,
15294 702, 710, 713, 541, 556, 565, 677, 571, 700, 709,
15295 711, 388, 423, 532, 295, 295, 391, 847, 847, 295,
15296 295, 709, 711, 295, 295, 608, 573, 594, 616, 692,
15297 295, 294, 826, 295, 564, 295, 564, 566, 677, 542,
15298 549, 550, 572, 593, 295, 295, 677, 847, 847, 294,
15299 295, 429, 609, 616, 294, 477, 619, 620, 828, 295,
15300 427, 693, 710, 757, 792, 294, 295, 468, 542, 550,
15301 552, 677, 295, 295, 295, 295, 295, 295
15302 };
15303
15304 #if YYDEBUG
15305
15306
15307 const unsigned short int
15308 Parser::yytoken_number_[] =
15309 {
15310 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
15311 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
15312 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
15313 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
15314 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
15315 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
15316 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
15317 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
15318 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
15319 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
15320 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
15321 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
15322 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
15323 385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
15324 395, 396, 397, 398, 399, 400, 401, 402, 403, 404,
15325 405, 406, 407, 408, 409, 410, 411, 412, 413, 414,
15326 415, 416, 417, 418, 419, 420, 421, 422, 423, 424,
15327 425, 426, 427, 428, 429, 430, 431, 432, 433, 434,
15328 435, 436, 437, 438, 439, 440, 441, 442, 443, 444,
15329 445, 446, 447, 448, 449, 450, 451, 452, 453, 454,
15330 455, 456, 457, 458, 459, 460, 461, 462, 463, 464,
15331 465, 466, 467, 468, 469, 470, 471, 472, 473, 474,
15332 475, 476, 477, 478, 479, 480, 481, 482, 483, 484,
15333 485, 486, 487, 488, 489, 490, 491, 492, 493, 494,
15334 495, 496, 497, 498, 499, 500, 501, 502, 503, 504,
15335 505, 506, 507, 508, 509, 510, 511, 512, 513, 514,
15336 515, 516, 517, 518, 519, 520, 521, 522, 523, 524,
15337 525, 526, 527, 528, 529, 530, 531, 532, 533, 534,
15338 535, 536, 537, 538, 539, 540, 541, 542, 543, 544,
15339 545, 546, 547, 548, 549, 550
15340 };
15341 #endif
15342
15343
15344 const unsigned short int
15345 Parser::yyr1_[] =
15346 {
15347 0, 296, 298, 297, 299, 299, 299, 299, 299, 299,
15348 299, 300, 301, 302, 303, 304, 304, 305, 306, 306,
15349 306, 306, 306, 306, 307, 308, 308, 310, 309, 311,
15350 311, 311, 311, 311, 312, 313, 314, 314, 315, 315,
15351 316, 317, 318, 318, 318, 318, 318, 319, 320, 321,
15352 322, 323, 325, 324, 326, 326, 326, 327, 328, 328,
15353 329, 329, 330, 331, 331, 331, 331, 332, 333, 333,
15354 334, 335, 335, 336, 337, 338, 340, 339, 341, 341,
15355 341, 341, 341, 341, 341, 342, 343, 344, 344, 345,
15356 346, 346, 347, 348, 349, 350, 350, 350, 351, 352,
15357 352, 352, 353, 353, 353, 354, 355, 355, 356, 357,
15358 358, 358, 359, 360, 360, 360, 360, 360, 360, 360,
15359 360, 361, 362, 362, 363, 364, 364, 364, 364, 364,
15360 364, 364, 364, 364, 364, 364, 364, 364, 364, 364,
15361 364, 364, 364, 365, 366, 366, 367, 368, 368, 368,
15362 369, 370, 370, 371, 372, 373, 373, 373, 374, 375,
15363 375, 376, 377, 377, 378, 379, 379, 380, 381, 381,
15364 382, 383, 383, 384, 385, 385, 386, 387, 387, 388,
15365 389, 389, 390, 391, 391, 392, 393, 393, 393, 395,
15366 394, 396, 396, 396, 396, 396, 397, 398, 398, 399,
15367 400, 400, 401, 402, 403, 403, 403, 403, 403, 403,
15368 403, 403, 403, 403, 403, 403, 403, 403, 403, 404,
15369 405, 405, 405, 405, 406, 407, 407, 407, 408, 409,
15370 409, 410, 410, 410, 410, 411, 412, 412, 413, 414,
15371 414, 415, 416, 417, 417, 417, 417, 418, 419, 419,
15372 419, 420, 421, 421, 421, 422, 422, 422, 422, 423,
15373 423, 423, 425, 424, 426, 426, 426, 426, 426, 426,
15374 426, 427, 428, 429, 430, 432, 431, 433, 433, 433,
15375 433, 433, 434, 435, 436, 437, 437, 437, 437, 437,
15376 437, 437, 437, 437, 437, 437, 437, 437, 437, 438,
15377 439, 440, 441, 441, 441, 442, 443, 443, 443, 443,
15378 443, 443, 443, 443, 443, 443, 443, 443, 443, 444,
15379 445, 445, 446, 447, 447, 447, 447, 447, 447, 447,
15380 447, 447, 447, 447, 448, 449, 449, 449, 449, 450,
15381 450, 450, 450, 450, 451, 452, 452, 452, 452, 453,
15382 454, 454, 454, 454, 455, 456, 457, 457, 458, 458,
15383 458, 458, 460, 459, 461, 461, 463, 462, 464, 464,
15384 464, 464, 464, 465, 466, 467, 468, 469, 470, 470,
15385 471, 473, 472, 474, 474, 474, 474, 474, 474, 474,
15386 474, 474, 474, 475, 476, 476, 476, 477, 478, 478,
15387 478, 479, 480, 480, 480, 480, 480, 481, 482, 482,
15388 483, 484, 484, 484, 484, 484, 485, 485, 486, 486,
15389 487, 487, 488, 489, 489, 490, 491, 491, 491, 491,
15390 492, 493, 493, 493, 493, 493, 493, 493, 493, 493,
15391 493, 493, 493, 493, 493, 493, 493, 493, 494, 495,
15392 495, 495, 495, 496, 497, 497, 497, 497, 498, 499,
15393 499, 499, 499, 500, 501, 501, 502, 504, 503, 505,
15394 505, 505, 506, 507, 507, 507, 507, 508, 509, 509,
15395 509, 509, 509, 509, 509, 509, 509, 510, 511, 511,
15396 512, 513, 514, 514, 515, 516, 517, 518, 519, 520,
15397 522, 521, 523, 523, 523, 523, 523, 524, 525, 526,
15398 527, 527, 528, 529, 529, 529, 530, 531, 531, 532,
15399 533, 533, 534, 535, 535, 536, 536, 536, 537, 537,
15400 537, 539, 538, 540, 540, 541, 541, 541, 543, 542,
15401 544, 544, 544, 544, 545, 546, 547, 548, 549, 551,
15402 550, 552, 553, 553, 553, 555, 554, 556, 556, 557,
15403 558, 558, 558, 558, 559, 560, 560, 562, 561, 563,
15404 563, 563, 563, 563, 563, 563, 563, 563, 563, 563,
15405 563, 563, 563, 563, 565, 564, 566, 566, 566, 566,
15406 566, 567, 568, 568, 569, 569, 569, 570, 571, 571,
15407 571, 572, 572, 572, 573, 574, 574, 575, 576, 576,
15408 577, 578, 578, 578, 578, 579, 580, 580, 581, 581,
15409 582, 583, 583, 583, 584, 585, 585, 587, 586, 588,
15410 588, 588, 588, 588, 589, 590, 590, 591, 591, 591,
15411 592, 592, 592, 593, 593, 594, 594, 596, 595, 597,
15412 597, 597, 597, 597, 597, 597, 597, 597, 597, 598,
15413 599, 599, 599, 599, 599, 601, 600, 602, 602, 602,
15414 602, 602, 602, 603, 604, 604, 604, 605, 606, 606,
15415 607, 608, 608, 608, 609, 610, 611, 611, 611, 612,
15416 613, 613, 613, 613, 613, 614, 614, 615, 615, 616,
15417 616, 617, 618, 618, 618, 618, 619, 620, 620, 620,
15418 620, 621, 623, 622, 624, 624, 624, 625, 626, 626,
15419 626, 627, 628, 628, 628, 628, 629, 630, 630, 630,
15420 630, 631, 632, 632, 633, 634, 634, 634, 634, 635,
15421 636, 636, 636, 636, 636, 637, 638, 639, 639, 640,
15422 641, 641, 641, 641, 641, 641, 641, 641, 642, 643,
15423 644, 644, 644, 644, 645, 646, 646, 646, 646, 647,
15424 648, 648, 649, 650, 651, 651, 651, 651, 651, 651,
15425 651, 651, 651, 651, 652, 653, 654, 654, 655, 656,
15426 656, 657, 658, 659, 659, 661, 660, 662, 662, 663,
15427 664, 664, 665, 667, 666, 668, 668, 668, 668, 669,
15428 670, 670, 671, 672, 672, 672, 672, 673, 674, 674,
15429 675, 676, 676, 677, 678, 679, 679, 681, 680, 682,
15430 682, 682, 682, 682, 682, 682, 682, 682, 682, 682,
15431 682, 682, 684, 683, 685, 685, 685, 685, 685, 685,
15432 685, 685, 685, 685, 685, 687, 686, 688, 688, 688,
15433 688, 689, 690, 690, 690, 690, 691, 692, 692, 692,
15434 693, 694, 695, 695, 695, 696, 697, 697, 697, 697,
15435 697, 697, 697, 697, 697, 697, 697, 698, 699, 699,
15436 699, 699, 699, 699, 699, 699, 699, 699, 699, 699,
15437 699, 700, 701, 701, 701, 702, 703, 703, 703, 704,
15438 705, 706, 706, 706, 706, 706, 707, 707, 708, 708,
15439 709, 709, 710, 710, 711, 712, 712, 712, 712, 713,
15440 714, 714, 714, 714, 715, 716, 716, 717, 718, 718,
15441 720, 719, 721, 721, 721, 721, 721, 722, 723, 724,
15442 725, 725, 725, 725, 725, 725, 725, 725, 725, 725,
15443 725, 725, 726, 726, 726, 726, 726, 726, 727, 728,
15444 728, 728, 729, 730, 730, 731, 732, 732, 732, 732,
15445 733, 734, 734, 735, 735, 736, 737, 737, 738, 739,
15446 740, 740, 741, 742, 743, 744, 744, 744, 744, 745,
15447 746, 746, 747, 749, 748, 750, 750, 750, 750, 750,
15448 750, 752, 751, 753, 753, 753, 753, 754, 755, 755,
15449 756, 757, 757, 758, 759, 759, 760, 761, 761, 763,
15450 762, 764, 764, 764, 764, 765, 766, 766, 766, 767,
15451 767, 767, 768, 769, 770, 770, 770, 770, 771, 771,
15452 772, 773, 774, 774, 774, 774, 774, 774, 774, 774,
15453 774, 774, 774, 774, 774, 774, 775, 776, 776, 777,
15454 778, 778, 778, 779, 780, 780, 780, 780, 781, 781,
15455 781, 782, 783, 783, 783, 783, 783, 783, 783, 784,
15456 785, 786, 786, 787, 787, 787, 788, 790, 789, 791,
15457 791, 791, 791, 791, 792, 793, 793, 793, 793, 793,
15458 793, 795, 794, 796, 796, 796, 797, 798, 798, 798,
15459 798, 799, 800, 800, 800, 800, 800, 800, 801, 802,
15460 803, 804, 804, 804, 804, 805, 806, 806, 806, 806,
15461 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
15462 806, 806, 807, 808, 810, 809, 811, 811, 811, 811,
15463 811, 812, 812, 813, 813, 814, 814, 815, 817, 816,
15464 818, 818, 818, 818, 818, 818, 819, 820, 820, 820,
15465 821, 822, 822, 822, 822, 822, 822, 822, 822, 822,
15466 823, 824, 825, 826, 827, 827, 828, 829, 829, 830,
15467 831, 831, 831, 831, 831, 831, 831, 831, 831, 831,
15468 832, 833, 835, 834, 836, 838, 837, 839, 839, 839,
15469 839, 840, 841, 841, 841, 841, 841, 841, 841, 843,
15470 842, 844, 844, 844, 844, 844, 844, 844, 845, 846,
15471 847, 848
15472 };
15473
15474
15475 const unsigned char
15476 Parser::yyr2_[] =
15477 {
15478 0, 2, 0, 9, 0, 2, 2, 2, 2, 2,
15479 2, 1, 4, 6, 4, 1, 1, 4, 1, 2,
15480 2, 2, 2, 2, 4, 1, 1, 0, 5, 1,
15481 2, 2, 2, 2, 6, 6, 0, 1, 2, 1,
15482 4, 4, 1, 1, 1, 2, 2, 4, 4, 4,
15483 4, 3, 0, 5, 1, 1, 1, 5, 1, 1,
15484 1, 1, 4, 0, 2, 2, 2, 4, 1, 2,
15485 4, 1, 1, 6, 4, 4, 0, 6, 1, 2,
15486 2, 2, 2, 2, 2, 1, 5, 0, 1, 5,
15487 0, 1, 1, 1, 4, 1, 1, 1, 5, 1,
15488 1, 1, 0, 1, 1, 6, 0, 2, 6, 4,
15489 0, 2, 4, 0, 2, 2, 2, 2, 2, 2,
15490 2, 4, 0, 2, 4, 0, 2, 2, 2, 2,
15491 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
15492 2, 2, 2, 4, 0, 1, 4, 1, 1, 1,
15493 4, 1, 1, 4, 4, 0, 2, 2, 5, 0,
15494 1, 5, 0, 1, 4, 1, 1, 4, 1, 1,
15495 4, 1, 1, 4, 1, 1, 4, 1, 1, 4,
15496 1, 1, 4, 0, 2, 4, 1, 1, 1, 0,
15497 6, 1, 2, 2, 2, 2, 4, 1, 1, 4,
15498 1, 1, 1, 4, 0, 2, 2, 2, 2, 2,
15499 2, 2, 2, 2, 2, 2, 2, 2, 2, 4,
15500 1, 1, 2, 2, 4, 1, 1, 1, 5, 1,
15501 1, 0, 2, 2, 2, 4, 0, 2, 4, 1,
15502 2, 4, 7, 1, 1, 2, 2, 4, 1, 1,
15503 1, 6, 1, 1, 1, 1, 1, 1, 1, 0,
15504 1, 1, 0, 5, 1, 1, 1, 1, 1, 2,
15505 2, 1, 1, 1, 4, 0, 7, 1, 2, 2,
15506 2, 2, 5, 3, 4, 1, 2, 2, 2, 2,
15507 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
15508 1, 4, 1, 1, 1, 4, 1, 2, 2, 2,
15509 2, 2, 2, 2, 2, 2, 2, 2, 2, 5,
15510 0, 1, 4, 1, 1, 2, 2, 2, 2, 2,
15511 2, 2, 2, 2, 6, 1, 1, 2, 2, 1,
15512 1, 1, 1, 1, 6, 1, 1, 2, 2, 6,
15513 1, 1, 2, 2, 6, 5, 1, 1, 1, 1,
15514 2, 2, 0, 5, 1, 2, 0, 5, 0, 2,
15515 2, 2, 2, 4, 4, 5, 3, 4, 1, 1,
15516 3, 0, 6, 1, 1, 2, 2, 2, 2, 2,
15517 2, 2, 2, 5, 0, 1, 1, 5, 0, 1,
15518 1, 4, 1, 2, 2, 2, 2, 4, 0, 2,
15519 4, 0, 2, 2, 2, 2, 1, 1, 1, 1,
15520 1, 1, 4, 1, 2, 4, 0, 2, 2, 2,
15521 4, 0, 2, 2, 2, 2, 2, 2, 2, 2,
15522 2, 2, 2, 2, 2, 2, 2, 2, 7, 1,
15523 1, 2, 2, 4, 1, 1, 2, 2, 6, 1,
15524 1, 2, 2, 4, 1, 1, 3, 0, 5, 0,
15525 2, 2, 4, 0, 2, 2, 2, 4, 1, 1,
15526 1, 1, 1, 1, 1, 1, 1, 4, 1, 2,
15527 4, 4, 1, 2, 1, 1, 4, 1, 1, 1,
15528 0, 7, 1, 2, 2, 2, 2, 4, 4, 4,
15529 0, 2, 4, 0, 2, 2, 5, 1, 1, 5,
15530 1, 1, 6, 1, 1, 1, 1, 1, 0, 1,
15531 1, 0, 5, 1, 2, 1, 1, 1, 0, 5,
15532 0, 2, 2, 2, 4, 4, 1, 1, 1, 0,
15533 5, 1, 0, 2, 2, 0, 5, 1, 2, 4,
15534 1, 2, 2, 2, 5, 0, 1, 0, 6, 0,
15535 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
15536 2, 2, 2, 2, 0, 5, 0, 2, 2, 2,
15537 2, 5, 1, 1, 0, 1, 1, 5, 1, 1,
15538 1, 1, 1, 1, 6, 0, 1, 6, 0, 1,
15539 4, 0, 2, 2, 2, 4, 1, 2, 1, 1,
15540 6, 1, 1, 1, 4, 0, 2, 0, 5, 0,
15541 2, 2, 2, 2, 4, 1, 2, 1, 1, 1,
15542 1, 1, 1, 1, 1, 1, 1, 0, 7, 0,
15543 2, 2, 2, 2, 2, 2, 2, 2, 2, 4,
15544 1, 2, 2, 2, 2, 0, 6, 1, 2, 2,
15545 2, 2, 2, 5, 1, 2, 2, 4, 1, 1,
15546 4, 0, 2, 2, 1, 4, 0, 2, 2, 4,
15547 0, 2, 2, 2, 2, 1, 1, 1, 1, 1,
15548 1, 5, 0, 1, 1, 1, 5, 0, 1, 1,
15549 1, 3, 0, 5, 0, 2, 2, 5, 1, 2,
15550 2, 6, 1, 1, 2, 2, 4, 0, 2, 2,
15551 2, 4, 1, 2, 4, 0, 2, 2, 2, 4,
15552 1, 2, 2, 2, 2, 5, 4, 1, 2, 4,
15553 1, 1, 1, 1, 1, 1, 1, 1, 4, 7,
15554 1, 1, 2, 2, 7, 1, 1, 2, 2, 6,
15555 1, 1, 4, 4, 1, 2, 2, 2, 2, 2,
15556 2, 2, 2, 2, 4, 4, 1, 2, 6, 0,
15557 1, 5, 4, 1, 2, 0, 5, 1, 2, 4,
15558 1, 1, 4, 0, 5, 0, 2, 2, 2, 4,
15559 0, 2, 4, 0, 2, 2, 2, 4, 1, 2,
15560 4, 0, 2, 5, 4, 1, 2, 0, 6, 0,
15561 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
15562 2, 2, 0, 6, 0, 2, 2, 2, 2, 2,
15563 2, 2, 2, 2, 2, 0, 6, 1, 2, 2,
15564 2, 5, 1, 1, 2, 2, 4, 0, 2, 2,
15565 1, 4, 0, 2, 2, 4, 1, 1, 2, 2,
15566 2, 2, 2, 2, 2, 2, 2, 4, 1, 1,
15567 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
15568 2, 4, 0, 2, 2, 4, 0, 2, 2, 5,
15569 4, 0, 2, 2, 2, 2, 1, 1, 1, 1,
15570 1, 1, 1, 1, 5, 0, 1, 1, 1, 5,
15571 0, 1, 1, 1, 5, 0, 1, 4, 1, 2,
15572 0, 6, 1, 2, 2, 2, 2, 1, 1, 4,
15573 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
15574 2, 2, 1, 1, 1, 1, 1, 1, 4, 0,
15575 2, 2, 5, 1, 2, 6, 1, 1, 2, 2,
15576 5, 1, 1, 1, 1, 4, 0, 2, 1, 6,
15577 1, 5, 5, 5, 4, 1, 2, 2, 2, 4,
15578 1, 2, 1, 0, 5, 1, 2, 2, 2, 2,
15579 2, 0, 5, 0, 2, 2, 2, 4, 0, 1,
15580 5, 0, 1, 4, 0, 1, 4, 1, 2, 0,
15581 5, 0, 2, 2, 2, 5, 1, 1, 1, 1,
15582 2, 2, 4, 4, 0, 2, 2, 2, 1, 2,
15583 4, 4, 0, 2, 2, 2, 2, 2, 2, 2,
15584 2, 2, 2, 2, 2, 2, 4, 0, 2, 4,
15585 0, 2, 2, 5, 1, 1, 1, 1, 0, 1,
15586 1, 4, 1, 2, 2, 2, 2, 2, 2, 4,
15587 5, 1, 1, 1, 1, 1, 9, 0, 5, 1,
15588 2, 2, 2, 2, 4, 0, 2, 2, 2, 2,
15589 2, 0, 6, 1, 1, 1, 4, 0, 2, 2,
15590 2, 3, 1, 1, 1, 1, 1, 1, 3, 3,
15591 4, 1, 1, 2, 2, 4, 1, 1, 1, 1,
15592 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
15593 1, 1, 3, 3, 0, 5, 1, 2, 2, 2,
15594 2, 1, 1, 1, 1, 1, 1, 4, 0, 7,
15595 1, 2, 2, 2, 2, 2, 4, 0, 2, 2,
15596 4, 0, 2, 2, 2, 2, 2, 2, 2, 2,
15597 1, 1, 1, 5, 0, 1, 5, 0, 1, 4,
15598 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
15599 4, 4, 0, 7, 4, 0, 5, 0, 2, 2,
15600 2, 4, 1, 2, 2, 2, 2, 2, 2, 0,
15601 5, 1, 2, 2, 2, 2, 2, 2, 1, 1,
15602 1, 1
15603 };
15604
15605 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
15606
15607
15608 const char*
15609 const Parser::yytname_[] =
15610 {
15611 "\"end of file\"", "error", "$undefined", "\"end of line\"",
15612 "\"identifier\"", "\"integer\"", "\"double\"", "\"string\"", "ANGLE",
15613 "BEHAVIOR", "CALCULATED", "CAPACITANCE", "CENTERCENTER", "CENTERLEFT",
15614 "CENTERRIGHT", "CHARGE", "CONDUCTANCE", "CURRENT", "DISTANCE",
15615 "DOCUMENT", "ENERGY", "EXTEND", "FLUX", "FREQUENCY", "GENERIC",
15616 "GRAPHIC", "INDUCTANCE", "INOUT", "INPUT", "LOGICMODEL", "LOWERCENTER",
15617 "LOWERLEFT", "LOWERRIGHT", "MASKLAYOUT", "MASS", "MEASURED", "MX",
15618 "MXR90", "MY", "MYR90", "NETLIST", "OUTPUT", "PCBLAYOUT", "POWER", "R0",
15619 "R180", "R270", "R90", "REQUIRED", "RESISTANCE", "RIPPER", "ROUND",
15620 "SCHEMATIC", "STRANGER", "SYMBOLIC", "TEMPERATURE", "TIE", "TIME",
15621 "TRUNCATE", "UPPERCENTER", "UPPERLEFT", "UPPERRIGHT", "VOLTAGE",
15622 "ACLOAD", "AFTER", "ANNOTATE", "APPLY", "ARC", "ARRAY", "ARRAYMACRO",
15623 "ARRAYRELATEDINFO", "ARRAYSITE", "ATLEAST", "ATMOST", "AUTHOR",
15624 "BASEARRAY", "BECOMES", "BETWEEN", "BOOLEAN", "BOOLEANDISPLAY",
15625 "BOOLEANMAP", "BORDERPATTERN", "BORDERWIDTH", "BOUNDINGBOX", "CELL",
15626 "CELLREF", "CELLTYPE", "CHANGE", "CIRCLE", "COLOR", "COMMENT",
15627 "COMMENTGRAPHICS", "COMPOUND", "CONNECTLOCATION", "CONTENTS",
15628 "CORNERTYPE", "CRITICALITY", "CURRENTMAP", "CURVE", "CYCLE",
15629 "DATAORIGIN", "DCFANINLOAD", "DCFANOUTLOAD", "DCMAXFANIN", "DCMAXFANOUT",
15630 "DELAY", "DELTA", "DERIVATION", "DESIGN", "DESIGNATOR", "DIFFERENCE",
15631 "DIRECTION", "DISPLAY", "DOMINATES", "DOT", "DURATION", "E", "EDIF",
15632 "EDIFLEVEL", "EDIFVERSION", "ENCLOSUREDISTANCE", "ENDTYPE", "ENTRY",
15633 "EVENT", "EXACTLY", "EXTERNAL", "FABRICATE", "FALSE", "FIGURE",
15634 "FIGUREAREA", "FIGUREGROUP", "FIGUREGROUPOBJECT", "FIGUREGROUPOVERRIDE",
15635 "FIGUREGROUPREF", "FIGUREPERIMETER", "FIGUREWIDTH", "FILLPATTERN",
15636 "FOLLOW", "FORBIDDENEVENT", "GLOBALPORTREF", "GREATERTHAN", "GRIDMAP",
15637 "IGNORE", "INCLUDEFIGUREGROUP", "INITIAL_KW", "INSTANCE",
15638 "INSTANCEBACKANNOTATE", "INSTANCEGROUP", "INSTANCEMAP", "INSTANCEREF",
15639 "INTEGERDISPLAY", "INTERFACE", "INTERFIGUREGROUPSPACING", "INTERSECTION",
15640 "INTRAFIGUREGROUPSPACING", "INVERSE", "ISOLATED", "JOINED", "JUSTIFY",
15641 "KEYWORDDISPLAY", "KEYWORDLEVEL", "KEYWORDMAP", "LESSTHAN", "LIBRARY",
15642 "LIBRARYREF", "LISTOFNETS", "LISTOFPORTS", "LOADDELAY", "LOGICASSIGN",
15643 "LOGICINPUT", "LOGICLIST", "LOGICMAPINPUT", "LOGICMAPOUTPUT",
15644 "LOGICONEOF", "LOGICOUTPUT", "LOGICPORT", "LOGICREF", "LOGICVALUE",
15645 "LOGICWAVEFORM", "MAINTAIN", "MATCH", "MEMBER", "MINOMAX",
15646 "MINOMAXDISPLAY", "MNM", "MULTIPLEVALUESET", "MUSTJOIN", "NAME", "NET",
15647 "NETBACKANNOTATE", "NETBUNDLE", "NETDELAY", "NETGROUP", "NETMAP",
15648 "NETREF", "NOCHANGE", "NONPERMUTABLE", "NOTALLOWED", "NOTCHSPACING",
15649 "NUMBER", "NUMBERDEFINITION", "NUMBERDISPLAY", "OFFPAGECONNECTOR",
15650 "OFFSETEVENT", "OPENSHAPE", "ORIENTATION", "ORIGIN", "OVERHANGDISTANCE",
15651 "OVERLAPDISTANCE", "OVERSIZE", "OWNER", "PAGE", "PAGESIZE_EDIF",
15652 "PARAMETER", "PARAMETERASSIGN", "PARAMETERDISPLAY", "PATH", "PATHDELAY",
15653 "PATHWIDTH", "PERMUTABLE", "PHYSICALDESIGNRULE", "PLUG", "POINT",
15654 "POINTDISPLAY", "POINTLIST", "POLYGON", "PORT", "PORTBACKANNOTATE",
15655 "PORTBUNDLE", "PORTDELAY", "PORTGROUP", "PORTIMPLEMENTATION",
15656 "PORTINSTANCE", "PORTLIST", "PORTLISTALIAS", "PORTMAP", "PORTREF",
15657 "PROGRAM", "PROPERTY", "PROPERTYDISPLAY", "PROTECTIONFRAME", "PT",
15658 "RANGEVECTOR", "RECTANGLE", "RECTANGLESIZE", "RENAME", "RESOLVES",
15659 "SCALE", "SCALEX", "SCALEY", "SECTION", "SHAPE", "SIMULATE",
15660 "SIMULATIONINFO", "SINGLEVALUESET", "SITE", "SOCKET", "SOCKETSET",
15661 "STATUS", "STEADY", "STRINGDISPLAY", "STRONG", "SYMBOL", "SYMMETRY",
15662 "TABLE", "TABLEDEFAULT", "TECHNOLOGY", "TEXTHEIGHT", "TIMEINTERVAL",
15663 "TIMESTAMP", "TIMING", "TRANSFORM", "TRANSITION", "TRIGGER", "TRUE",
15664 "UNCONSTRAINED", "UNDEFINED", "UNION", "UNIT", "UNUSED", "USERDATA",
15665 "VERSION", "VIEW", "VIEWLIST", "VIEWMAP", "VIEWREF", "VIEWTYPE",
15666 "VISIBLE", "VOLTAGEMAP", "WAVEVALUE", "WEAK", "WEAKJOINED", "WHEN",
15667 "WRITTEN", "LBKT", "RBKT", "$accept", "Edif", "$@1", "_Edif",
15668 "EdifFileName", "EdifLevel", "EdifVersion", "AcLoad", "_AcLoad", "After",
15669 "_After", "Annotate", "_Annotate", "Apply", "$@2", "_Apply", "Arc",
15670 "ArrayData", "_ArrayData", "_IntegerList", "ArrayMacro", "ArrayRelInfo",
15671 "_ArrayRelInfo", "ArraySite", "AtLeast", "AtMost", "Author", "BaseArray",
15672 "Becomes", "$@3", "_PresentValue", "Between", "__Between", "_Between",
15673 "Boolean", "_Boolean", "BooleanDisp", "_BooleanDisp", "BooleanMap",
15674 "BooleanValue", "BorderPat", "BorderWidth", "BoundBox", "Cell", "$@4",
15675 "_Cell", "CellNameDef", "CellRef", "_CellRef", "CellRefData",
15676 "_CellRefData", "CellNameRef", "CellNameRefData", "CellType",
15677 "_CellType", "Change", "__Change", "_Change", "Circle", "_Circle",
15678 "Color", "Comment", "_Comment", "CommGraph", "_CommGraph", "Compound",
15679 "_Compound", "Contents", "_Contents", "ConnectLoc", "_ConnectLoc",
15680 "CornerType", "_CornerType", "Criticality", "_Criticality", "CurrentMap",
15681 "Curve", "_Curve", "Cycle", "_Cycle", "DataOrigin", "_DataOrigin",
15682 "DcFanInLoad", "_DcFanInLoad", "DcFanOutLoad", "_DcFanOutLoad",
15683 "DcMaxFanIn", "_DcMaxFanIn", "DcMaxFanOut", "_DcMaxFanOut", "DelayData",
15684 "_DelayData", "Delay", "_Delay", "Delta", "_Delta", "Derivation",
15685 "_Derivation", "Design", "$@5", "_Design", "Designator", "_Designator",
15686 "DesignatorData", "_DesignatorData", "DesignNameDef", "DesignRule",
15687 "_DesignRule", "Difference", "_Difference", "Direction", "_Direction",
15688 "Display", "_Display", "_DisplayExt", "Dominates", "_Dominates", "Dot",
15689 "_Dot", "Duration", "EncloseDist", "_EncloseDist", "EndType", "_EndType",
15690 "Entry", "___Entry", "__Entry", "_Entry", "Event", "$@6", "_Event",
15691 "EventPortRefData", "EventPortListData", "EventNetRefData", "Exactly",
15692 "External", "$@7", "_External", "Fabricate", "False", "FigGrp",
15693 "_FigGrp", "FigGrpNameDef", "FigGrpNameRef", "FigGrpObj", "_FigGrpObj",
15694 "FigGrpOver", "_FigGrpOver", "FigGrpRef", "_FigGrpRef", "Figure",
15695 "_Figure", "FigureArea", "_FigureArea", "FigureOp", "FigurePerim",
15696 "_FigurePerim", "FigureWidth", "_FigureWidth", "FillPattern", "Follow",
15697 "__Follow", "_Follow", "Forbidden", "$@8", "_Forbidden", "Form", "$@9",
15698 "_Form", "GlobPortRefData", "GreaterThan", "GridMap", "Ignore",
15699 "IncFigGrp", "_IncFigGrp", "Initial", "Instance", "$@10", "_Instance",
15700 "InstanceRef", "_InstanceRef", "InstanceRefData", "_InstanceRefData",
15701 "InstBackAn", "_InstBackAn", "InstGroup", "_InstGroup", "InstMap",
15702 "_InstMap", "InstNameDef", "InstNameRef", "InstNameRefData",
15703 "IntDisplay", "_IntDisplay", "Integer", "_Integer", "Interface",
15704 "_Interface", "InterFigGrp", "_InterFigGrp", "Intersection",
15705 "_Intersection", "IntraFigGrp", "_IntraFigGrp", "Inverse", "_Inverse",
15706 "Isolated", "Joined", "$@11", "_Joined", "JoinedElements",
15707 "_JoinedElements", "Justify", "_Justify", "KeywordDisp", "_KeywordDisp",
15708 "KeywordLevel", "KeywordMap", "_KeywordMap", "KeywordName",
15709 "LayerNameDef", "LessThan", "LibNameDef", "LibNameRef", "LibNameRefData",
15710 "Library", "$@12", "_Library", "LibraryRef", "LibraryRefData",
15711 "ListOfNets", "_ListOfNets", "ListOfPorts", "_ListOfPorts",
15712 "LoadDelayData", "_LoadDelayData", "LoadDelay", "_LoadDelay",
15713 "LogicAssn", "___LogicAssn", "__LogicAssn", "_LogicAssn", "LogicIn",
15714 "$@13", "_LogicIn", "CommonPortData", "LogicList", "$@14", "_LogicList",
15715 "LogicMapIn", "LogicMapOut", "LogicNameDef", "LogicNameRefData",
15716 "LogicNameRef", "LogicOneOf", "$@15", "LogicNameData", "_LogicOneOf",
15717 "LogicOut", "$@16", "_LogicOut", "LogicPort", "_LogicPort", "LogicRef",
15718 "_LogicRef", "LogicValue", "$@17", "_LogicValue", "LogicWave", "$@18",
15719 "_LogicWave", "Maintain", "__Maintain", "_Maintain", "Match", "__Match",
15720 "_Match", "MemberData", "_MemberData", "Member", "_Member", "MiNoMa",
15721 "_MiNoMa", "MiNoMaDisp", "_MiNoMaDisp", "MiNoMaValue", "Mnm", "_Mnm",
15722 "MultValSet", "_MultValSet", "MustJoin", "$@19", "_MustJoin", "Name",
15723 "_Name", "NameDef", "NameDefData", "NameRef", "NameRefData", "Net",
15724 "$@20", "_Net", "NetBackAn", "_NetBackAn", "NetBundle", "$@21",
15725 "_NetBundle", "NetDelay", "_NetDelay", "NetDelayData", "_NetDelayData",
15726 "EventNetGroup", "_EventNetGroup", "EventNetNameRef", "NetGroup",
15727 "_NetGroup", "NetMap", "_NetMap", "NetNameDef", "NetNameRef",
15728 "NetNameRefData", "NetRef", "_NetRef", "NetRefData", "_NetRefData",
15729 "NoChange", "NonPermut", "$@22", "_NonPermut", "NotAllowed",
15730 "_NotAllowed", "NotchSpace", "_NotchSpace", "Number", "_Number",
15731 "NumbDisplay", "_NumbDisplay", "NumberDefn", "_NumberDefn",
15732 "OffPageConn", "_OffPageConn", "OffsetEvent", "OpenShape", "_OpenShape",
15733 "Orientation", "_Orientation", "Origin", "OverhngDist", "_OverhngDist",
15734 "OverlapDist", "_OverlapDist", "Oversize", "_Oversize", "Owner", "Page",
15735 "_Page", "PageSize", "ParamDisp", "_ParamDisp", "Parameter",
15736 "_Parameter", "ParamAssign", "Path", "_Path", "PathDelayData", "$@23",
15737 "_PathDelay", "PathDelay", "_PathDelayValue", "PathWidth", "Permutable",
15738 "$@24", "_Permutable", "Plug", "_Plug", "Point", "_Point", "PointDisp",
15739 "_PointDisp", "PointList", "_PointList", "PointValue", "Polygon",
15740 "_Polygon", "Port", "$@25", "_Port", "PortBackAn", "$@26", "_PortBackAn",
15741 "PortBundle", "$@27", "_PortBundle", "PortDelayData", "_PortDelayData",
15742 "EventPortGroup", "_EventPortGroup", "EventPortNameRef", "PortGroup",
15743 "_PortGroup", "PortImpl", "_PortImpl", "PortInst", "_PortInst",
15744 "PortList", "_PortList", "PortListData", "_PortListData", "PortListAls",
15745 "PortMap", "_PortMap", "PortNameDef", "PortNameDefData", "PortNameRef",
15746 "PortNameRefData", "PortRef", "_PortRef", "PortRefData", "_PortRefData",
15747 "Program", "_Program", "PropDisplay", "_PropDisplay", "Property", "$@28",
15748 "_Property", "PropNameDef", "PropNameRef", "ProtectFrame",
15749 "_ProtectFrame", "Range", "RangeVector", "_RangeVector", "Rectangle",
15750 "_Rectangle", "RectSize", "_RectSize", "Rename", "__Rename", "_Rename",
15751 "Resolves", "_Resolves", "RuleNameDef", "Scale", "ScaledInt", "ScaleX",
15752 "ScaleY", "Section", "_Section", "Shape", "_Shape", "SimNameDef",
15753 "Simulate", "$@29", "_Simulate", "SimulInfo", "$@30", "_SimulInfo",
15754 "SingleValSet", "_SingleValSet", "Site", "_Site", "Socket", "_Socket",
15755 "SocketSet", "_SocketSet", "Status", "$@31", "_Status", "Steady",
15756 "__Steady", "_Steady", "StrDisplay", "String", "_String", "_StrDisplay",
15757 "Strong", "Symbol", "_Symbol", "Symmetry", "_Symmetry", "Table",
15758 "_Table", "TableDeflt", "__TableDeflt", "_TableDeflt", "Technology",
15759 "_Technology", "TextHeight", "TimeIntval", "StartTimeIntval",
15760 "EndTimeIntval", "TimeStamp", "Timing", "$@32", "_Timing", "Transform",
15761 "_TransformExt", "Transition", "$@33", "_PreviousValue", "Trigger",
15762 "_Trigger", "True", "TypedValue", "Unconstrained", "Undefined", "Union",
15763 "_Union", "Unit", "_Unit", "Unused", "UnusedData", "UserData", "$@34",
15764 "_UserData", "ValueNameDefData", "ValueNameRef", "ValueNameRefData",
15765 "Version", "View", "$@35", "_View", "ViewList", "_ViewList", "ViewMap",
15766 "_ViewMap", "ViewNameDef", "ViewNameRef", "ViewNameRefData", "ViewRef",
15767 "_ViewRef", "ViewRefData", "_ViewRefData", "ViewType", "_ViewType",
15768 "Visible", "VoltageMap", "WaveValue", "$@36", "Weak", "WeakJoined",
15769 "$@37", "_WeakJoined", "When", "_When", "Written", "$@38", "_Written",
15770 "Ident", "Str", "Int", "Keyword", 0
15771 };
15772 #endif
15773
15774 #if YYDEBUG
15775
15776 const Parser::rhs_number_type
15777 Parser::yyrhs_[] =
15778 {
15779 297, 0, -1, -1, 294, 117, 300, 302, 301, 513,
15780 298, 299, 295, -1, -1, 299, 762, -1, 299, 431,
15781 -1, 299, 521, -1, 299, 394, -1, 299, 357, -1,
15782 299, 809, -1, 592, -1, 294, 118, 847, 295, -1,
15783 294, 119, 847, 847, 847, 295, -1, 294, 63, 304,
15784 295, -1, 581, -1, 579, -1, 294, 64, 306, 295,
15785 -1, 581, -1, 306, 456, -1, 306, 567, -1, 306,
15786 534, -1, 306, 357, -1, 306, 809, -1, 294, 65,
15787 308, 295, -1, 846, -1, 768, -1, -1, 294, 66,
15788 310, 311, 295, -1, 374, -1, 311, 538, -1, 311,
15789 554, -1, 311, 357, -1, 311, 809, -1, 294, 67,
15790 677, 677, 677, 295, -1, 294, 68, 592, 847, 314,
15791 295, -1, -1, 315, -1, 847, 315, -1, 847, -1,
15792 294, 69, 669, 295, -1, 294, 70, 318, 295, -1,
15793 323, -1, 319, -1, 316, -1, 318, 357, -1, 318,
15794 809, -1, 294, 71, 758, 295, -1, 294, 72, 740,
15795 295, -1, 294, 73, 740, 295, -1, 294, 74, 846,
15796 295, -1, 294, 75, 295, -1, -1, 294, 76, 325,
15797 326, 295, -1, 552, -1, 542, -1, 550, -1, 294,
15798 77, 328, 329, 295, -1, 320, -1, 466, -1, 321,
15799 -1, 517, -1, 294, 78, 331, 295, -1, -1, 331,
15800 335, -1, 331, 332, -1, 331, 330, -1, 294, 79,
15801 333, 295, -1, 335, -1, 333, 408, -1, 294, 80,
15802 335, 295, -1, 799, -1, 435, -1, 294, 81, 847,
15803 847, 330, 295, -1, 294, 82, 847, 295, -1, 294,
15804 83, 729, 295, -1, -1, 294, 84, 342, 340, 341,
15805 295, -1, 349, -1, 341, 762, -1, 341, 821, -1,
15806 341, 816, -1, 341, 357, -1, 341, 809, -1, 341,
15807 719, -1, 592, -1, 294, 85, 347, 344, 295, -1,
15808 -1, 525, -1, 294, 85, 348, 346, 295, -1, -1,
15809 525, -1, 593, -1, 594, -1, 294, 86, 350, 295,
15810 -1, 56, -1, 50, -1, 24, -1, 294, 87, 352,
15811 353, 295, -1, 709, -1, 711, -1, 700, -1, -1,
15812 324, -1, 794, -1, 294, 88, 677, 677, 355, 295,
15813 -1, -1, 355, 719, -1, 294, 89, 740, 740, 740,
15814 295, -1, 294, 90, 358, 295, -1, -1, 358, 846,
15815 -1, 294, 91, 360, 295, -1, -1, 360, 307, -1,
15816 360, 446, -1, 360, 472, -1, 360, 338, -1, 360,
15817 719, -1, 360, 357, -1, 360, 809, -1, 294, 92,
15818 362, 295, -1, -1, 362, 548, -1, 294, 94, 364,
15819 295, -1, -1, 364, 472, -1, 364, 635, -1, 364,
15820 446, -1, 364, 743, -1, 364, 595, -1, 364, 600,
15821 -1, 364, 650, -1, 364, 359, -1, 364, 696, -1,
15822 364, 789, -1, 364, 748, -1, 364, 840, -1, 364,
15823 456, -1, 364, 557, -1, 364, 338, -1, 364, 357,
15824 -1, 364, 809, -1, 294, 93, 366, 295, -1, -1,
15825 446, -1, 294, 95, 368, 295, -1, 21, -1, 51,
15826 -1, 58, -1, 294, 96, 370, 295, -1, 847, -1,
15827 488, -1, 294, 97, 581, 295, -1, 294, 98, 373,
15828 295, -1, -1, 373, 312, -1, 373, 677, -1, 294,
15829 99, 847, 375, 295, -1, -1, 415, -1, 294, 100,
15830 846, 377, 295, -1, -1, 815, -1, 294, 101, 379,
15831 295, -1, 740, -1, 631, -1, 294, 102, 381, 295,
15832 -1, 740, -1, 631, -1, 294, 103, 383, 295, -1,
15833 740, -1, 631, -1, 294, 104, 385, 295, -1, 740,
15834 -1, 631, -1, 294, 105, 387, 295, -1, 581, -1,
15835 579, -1, 294, 105, 389, 295, -1, 581, -1, 579,
15836 -1, 294, 106, 391, 295, -1, -1, 391, 677, -1,
15837 294, 107, 393, 295, -1, 10, -1, 35, -1, 48,
15838 -1, -1, 294, 108, 401, 395, 396, 295, -1, 343,
15839 -1, 396, 762, -1, 396, 357, -1, 396, 719, -1,
15840 396, 809, -1, 294, 109, 398, 295, -1, 846, -1,
15841 768, -1, 294, 109, 400, 295, -1, 846, -1, 768,
15842 -1, 592, -1, 294, 220, 403, 295, -1, -1, 403,
15843 453, -1, 403, 448, -1, 403, 731, -1, 403, 451,
15844 -1, 403, 645, -1, 403, 643, -1, 403, 416, -1,
15845 403, 494, -1, 403, 498, -1, 403, 627, -1, 403,
15846 625, -1, 403, 436, -1, 403, 357, -1, 403, 809,
15847 -1, 294, 110, 405, 295, -1, 444, -1, 450, -1,
15848 405, 444, -1, 405, 450, -1, 294, 111, 407, 295,
15849 -1, 28, -1, 41, -1, 27, -1, 294, 112, 409,
15850 410, 295, -1, 439, -1, 442, -1, -1, 410, 508,
15851 -1, 410, 640, -1, 410, 642, -1, 294, 113, 412,
15852 295, -1, -1, 412, 548, -1, 294, 114, 414, 295,
15853 -1, 677, -1, 414, 719, -1, 294, 115, 740, 295,
15854 -1, 294, 120, 738, 440, 440, 417, 295, -1, 726,
15855 -1, 754, -1, 417, 357, -1, 417, 809, -1, 294,
15856 121, 419, 295, -1, 21, -1, 51, -1, 58, -1,
15857 294, 122, 421, 422, 423, 295, -1, 570, -1, 351,
15858 -1, 765, -1, 559, -1, 711, -1, 621, -1, 777,
15859 -1, -1, 388, -1, 532, -1, -1, 294, 123, 425,
15860 426, 295, -1, 427, -1, 428, -1, 691, -1, 429,
15861 -1, 607, -1, 426, 794, -1, 426, 324, -1, 713,
15862 -1, 702, -1, 619, -1, 294, 124, 740, 295, -1,
15863 -1, 294, 125, 518, 301, 432, 433, 295, -1, 782,
15864 -1, 433, 762, -1, 433, 339, -1, 433, 357, -1,
15865 433, 809, -1, 294, 126, 516, 439, 295, -1, 294,
15866 127, 295, -1, 294, 130, 437, 295, -1, 438, -1,
15867 437, 367, -1, 437, 418, -1, 437, 665, -1, 437,
15868 337, -1, 437, 356, -1, 437, 455, -1, 437, 336,
15869 -1, 437, 784, -1, 437, 832, -1, 437, 357, -1,
15870 437, 719, -1, 437, 809, -1, 437, 469, -1, 591,
15871 -1, 593, -1, 294, 131, 441, 295, -1, 439, -1,
15872 444, -1, 450, -1, 294, 132, 443, 295, -1, 439,
15873 -1, 443, 367, -1, 443, 418, -1, 443, 665, -1,
15874 443, 337, -1, 443, 356, -1, 443, 455, -1, 443,
15875 336, -1, 443, 784, -1, 443, 832, -1, 443, 357,
15876 -1, 443, 719, -1, 443, 809, -1, 294, 133, 439,
15877 445, 295, -1, -1, 524, -1, 294, 128, 447, 295,
15878 -1, 438, -1, 442, -1, 447, 354, -1, 447, 413,
15879 -1, 447, 638, -1, 447, 658, -1, 447, 678, -1,
15880 447, 729, -1, 447, 745, -1, 447, 357, -1, 447,
15881 809, -1, 294, 129, 738, 440, 449, 295, -1, 726,
15882 -1, 754, -1, 449, 357, -1, 449, 809, -1, 496,
15883 -1, 803, -1, 404, -1, 500, -1, 647, -1, 294,
15884 134, 738, 440, 452, 295, -1, 726, -1, 754, -1,
15885 452, 357, -1, 452, 809, -1, 294, 135, 738, 440,
15886 454, 295, -1, 726, -1, 754, -1, 454, 357, -1,
15887 454, 809, -1, 294, 136, 847, 847, 330, 295, -1,
15888 294, 137, 457, 458, 295, -1, 709, -1, 711, -1,
15889 711, -1, 777, -1, 458, 388, -1, 458, 532, -1,
15890 -1, 294, 138, 460, 461, 295, -1, 785, -1, 461,
15891 424, -1, -1, 294, 463, 848, 464, 295, -1, -1,
15892 464, 847, -1, 464, 846, -1, 464, 845, -1, 464,
15893 462, -1, 294, 139, 710, 295, -1, 294, 140, 740,
15894 295, -1, 294, 141, 740, 740, 295, -1, 294, 142,
15895 295, -1, 294, 143, 470, 295, -1, 444, -1, 450,
15896 -1, 294, 144, 295, -1, -1, 294, 145, 485, 473,
15897 474, 295, -1, 828, -1, 819, -1, 474, 792, -1,
15898 474, 657, -1, 474, 698, -1, 474, 789, -1, 474,
15899 399, -1, 474, 719, -1, 474, 357, -1, 474, 809,
15900 -1, 294, 149, 486, 476, 295, -1, -1, 475, -1,
15901 828, -1, 294, 149, 487, 478, 295, -1, -1, 475,
15902 -1, 828, -1, 294, 146, 480, 295, -1, 475, -1,
15903 480, 397, -1, 480, 789, -1, 480, 719, -1, 480,
15904 357, -1, 294, 147, 482, 295, -1, -1, 482, 475,
15905 -1, 294, 148, 484, 295, -1, -1, 484, 475, -1,
15906 484, 481, -1, 484, 357, -1, 484, 809, -1, 592,
15907 -1, 313, -1, 593, -1, 575, -1, 594, -1, 573,
15908 -1, 294, 150, 489, 295, -1, 847, -1, 489, 408,
15909 -1, 294, 5, 491, 295, -1, -1, 491, 847, -1,
15910 491, 488, -1, 491, 490, -1, 294, 151, 493, 295,
15911 -1, -1, 493, 680, -1, 493, 686, -1, 493, 773,
15912 -1, 493, 724, -1, 493, 317, -1, 493, 655, -1,
15913 493, 503, -1, 493, 586, -1, 493, 837, -1, 493,
15914 666, -1, 493, 789, -1, 493, 748, -1, 493, 399,
15915 -1, 493, 719, -1, 493, 357, -1, 493, 809, -1,
15916 294, 152, 738, 440, 440, 495, 295, -1, 726, -1,
15917 754, -1, 495, 357, -1, 495, 809, -1, 294, 153,
15918 497, 295, -1, 444, -1, 450, -1, 497, 444, -1,
15919 497, 450, -1, 294, 154, 738, 440, 499, 295, -1,
15920 726, -1, 754, -1, 499, 357, -1, 499, 809, -1,
15921 294, 155, 501, 295, -1, 444, -1, 450, -1, 294,
15922 156, 295, -1, -1, 294, 157, 504, 505, 295, -1,
15923 -1, 505, 713, -1, 505, 702, -1, 294, 157, 507,
15924 295, -1, -1, 507, 713, -1, 507, 702, -1, 507,
15925 465, -1, 294, 158, 509, 295, -1, 12, -1, 13,
15926 -1, 14, -1, 30, -1, 31, -1, 32, -1, 59,
15927 -1, 60, -1, 61, -1, 294, 159, 511, 295, -1,
15928 515, -1, 511, 408, -1, 294, 160, 847, 295, -1,
15929 294, 161, 514, 295, -1, 512, -1, 514, 357, -1,
15930 845, -1, 591, -1, 294, 162, 740, 295, -1, 592,
15931 -1, 593, -1, 594, -1, -1, 294, 163, 518, 301,
15932 522, 523, 295, -1, 782, -1, 523, 762, -1, 523,
15933 339, -1, 523, 357, -1, 523, 809, -1, 294, 164,
15934 519, 295, -1, 294, 164, 520, 295, -1, 294, 165,
15935 527, 295, -1, -1, 527, 595, -1, 294, 166, 529,
15936 295, -1, -1, 529, 680, -1, 529, 686, -1, 294,
15937 167, 531, 531, 295, -1, 581, -1, 579, -1, 294,
15938 167, 533, 533, 295, -1, 581, -1, 579, -1, 294,
15939 168, 535, 536, 537, 295, -1, 709, -1, 711, -1,
15940 711, -1, 559, -1, 777, -1, -1, 388, -1, 532,
15941 -1, -1, 294, 169, 539, 540, 295, -1, 541, -1,
15942 540, 564, -1, 702, -1, 713, -1, 710, -1, -1,
15943 294, 170, 543, 544, 295, -1, -1, 544, 552, -1,
15944 544, 550, -1, 544, 468, -1, 294, 171, 559, 295,
15945 -1, 294, 172, 559, 295, -1, 592, -1, 593, -1,
15946 593, -1, -1, 294, 173, 551, 553, 295, -1, 548,
15947 -1, -1, 553, 552, -1, 553, 542, -1, -1, 294,
15948 174, 555, 556, 295, -1, 541, -1, 556, 564, -1,
15949 294, 175, 558, 295, -1, 707, -1, 558, 719, -1,
15950 558, 357, -1, 558, 809, -1, 294, 176, 548, 560,
15951 295, -1, -1, 525, -1, -1, 294, 177, 547, 562,
15952 563, 295, -1, -1, 563, 833, -1, 563, 371, -1,
15953 563, 334, -1, 563, 361, -1, 563, 836, -1, 563,
15954 772, -1, 563, 411, -1, 563, 546, -1, 563, 545,
15955 -1, 563, 502, -1, 563, 736, -1, 563, 719, -1,
15956 563, 357, -1, 563, 809, -1, -1, 294, 178, 565,
15957 566, 295, -1, -1, 566, 552, -1, 566, 542, -1,
15958 566, 550, -1, 566, 468, -1, 294, 179, 568, 569,
15959 295, -1, 709, -1, 711, -1, -1, 388, -1, 532,
15960 -1, 294, 180, 571, 572, 295, -1, 709, -1, 711,
15961 -1, 700, -1, 549, -1, 542, -1, 550, -1, 294,
15962 181, 594, 847, 574, 295, -1, -1, 315, -1, 294,
15963 181, 593, 847, 576, 295, -1, -1, 315, -1, 294,
15964 182, 578, 295, -1, -1, 578, 581, -1, 578, 579,
15965 -1, 578, 577, -1, 294, 183, 580, 295, -1, 581,
15966 -1, 580, 408, -1, 582, -1, 740, -1, 294, 184,
15967 583, 583, 583, 295, -1, 740, -1, 802, -1, 801,
15968 -1, 294, 185, 585, 295, -1, -1, 585, 727, -1,
15969 -1, 294, 186, 587, 588, 295, -1, -1, 588, 713,
15970 -1, 588, 702, -1, 588, 837, -1, 588, 503, -1,
15971 294, 187, 590, 295, -1, 845, -1, 590, 408, -1,
15972 845, -1, 589, -1, 733, -1, 845, -1, 589, -1,
15973 733, -1, 845, -1, 589, -1, 845, -1, 589, -1,
15974 -1, 294, 188, 614, 596, 506, 597, 295, -1, -1,
15975 597, 369, -1, 597, 603, -1, 597, 446, -1, 597,
15976 595, -1, 597, 472, -1, 597, 359, -1, 597, 719,
15977 -1, 597, 357, -1, 597, 809, -1, 294, 189, 599,
15978 295, -1, 617, -1, 599, 603, -1, 599, 369, -1,
15979 599, 719, -1, 599, 357, -1, -1, 294, 190, 614,
15980 601, 602, 295, -1, 526, -1, 602, 446, -1, 602,
15981 359, -1, 602, 719, -1, 602, 357, -1, 602, 809,
15982 -1, 294, 191, 392, 604, 295, -1, 605, -1, 604,
15983 794, -1, 604, 324, -1, 294, 105, 606, 295, -1,
15984 581, -1, 579, -1, 294, 192, 608, 295, -1, -1,
15985 608, 609, -1, 608, 429, -1, 616, -1, 294, 192,
15986 611, 295, -1, -1, 611, 615, -1, 611, 617, -1,
15987 294, 193, 613, 295, -1, -1, 613, 617, -1, 613,
15988 610, -1, 613, 357, -1, 613, 809, -1, 592, -1,
15989 313, -1, 593, -1, 575, -1, 594, -1, 573, -1,
15990 294, 194, 615, 618, 295, -1, -1, 617, -1, 475,
15991 -1, 826, -1, 294, 194, 616, 620, 295, -1, -1,
15992 619, -1, 477, -1, 828, -1, 294, 195, 295, -1,
15993 -1, 294, 196, 623, 624, 295, -1, -1, 624, 713,
15994 -1, 624, 666, -1, 294, 197, 738, 626, 295, -1,
15995 440, -1, 626, 357, -1, 626, 809, -1, 294, 198,
15996 738, 440, 628, 295, -1, 726, -1, 754, -1, 628,
15997 357, -1, 628, 809, -1, 294, 199, 630, 295, -1,
15998 -1, 630, 740, -1, 630, 631, -1, 630, 629, -1,
15999 294, 201, 632, 295, -1, 740, -1, 632, 408, -1,
16000 294, 200, 634, 295, -1, -1, 634, 739, -1, 634,
16001 467, -1, 634, 357, -1, 294, 202, 636, 295, -1,
16002 707, -1, 636, 807, -1, 636, 719, -1, 636, 357,
16003 -1, 636, 809, -1, 294, 203, 424, 740, 295, -1,
16004 294, 204, 639, 295, -1, 372, -1, 639, 719, -1,
16005 294, 205, 641, 295, -1, 44, -1, 47, -1, 45,
16006 -1, 46, -1, 36, -1, 38, -1, 39, -1, 37,
16007 -1, 294, 206, 677, 295, -1, 294, 207, 738, 440,
16008 440, 644, 295, -1, 726, -1, 754, -1, 644, 357,
16009 -1, 644, 809, -1, 294, 208, 738, 440, 440, 646,
16010 295, -1, 726, -1, 754, -1, 646, 357, -1, 646,
16011 809, -1, 294, 209, 847, 648, 367, 295, -1, 444,
16012 -1, 450, -1, 294, 210, 846, 295, -1, 294, 211,
16013 651, 295, -1, 485, -1, 651, 472, -1, 651, 595,
16014 -1, 651, 600, -1, 651, 359, -1, 651, 696, -1,
16015 651, 652, -1, 651, 338, -1, 651, 357, -1, 651,
16016 809, -1, 294, 212, 729, 295, -1, 294, 215, 654,
16017 295, -1, 813, -1, 654, 408, -1, 294, 213, 812,
16018 800, 656, 295, -1, -1, 805, -1, 294, 214, 814,
16019 800, 295, -1, 294, 216, 659, 295, -1, 675, -1,
16020 659, 719, -1, -1, 294, 217, 661, 662, 295, -1,
16021 663, -1, 662, 424, -1, 294, 105, 664, 295, -1,
16022 581, -1, 579, -1, 294, 218, 847, 295, -1, -1,
16023 294, 219, 667, 668, 295, -1, -1, 668, 713, -1,
16024 668, 666, -1, 668, 622, -1, 294, 221, 670, 295,
16025 -1, -1, 670, 760, -1, 294, 222, 672, 295, -1,
16026 -1, 672, 677, -1, 672, 673, -1, 672, 671, -1,
16027 294, 223, 674, 295, -1, 677, -1, 674, 408, -1,
16028 294, 224, 676, 295, -1, -1, 676, 677, -1, 294,
16029 241, 847, 847, 295, -1, 294, 225, 679, 295, -1,
16030 675, -1, 679, 719, -1, -1, 294, 226, 708, 681,
16031 682, 295, -1, -1, 682, 406, -1, 682, 808, -1,
16032 682, 689, -1, 682, 399, -1, 682, 378, -1, 682,
16033 380, -1, 682, 382, -1, 682, 384, -1, 682, 303,
16034 -1, 682, 719, -1, 682, 357, -1, 682, 809, -1,
16035 -1, 294, 227, 713, 684, 685, 295, -1, -1, 685,
16036 808, -1, 685, 689, -1, 685, 399, -1, 685, 378,
16037 -1, 685, 380, -1, 685, 382, -1, 685, 384, -1,
16038 685, 303, -1, 685, 719, -1, 685, 357, -1, -1,
16039 294, 228, 592, 687, 688, 295, -1, 528, -1, 688,
16040 719, -1, 688, 357, -1, 688, 809, -1, 294, 229,
16041 392, 690, 295, -1, 386, -1, 530, -1, 690, 794,
16042 -1, 690, 324, -1, 294, 230, 692, 295, -1, -1,
16043 692, 693, -1, 692, 427, -1, 710, -1, 294, 230,
16044 695, 295, -1, -1, 695, 709, -1, 695, 711, -1,
16045 294, 231, 697, 295, -1, 711, -1, 709, -1, 697,
16046 365, -1, 697, 446, -1, 697, 472, -1, 697, 359,
16047 -1, 697, 717, -1, 697, 510, -1, 697, 719, -1,
16048 697, 809, -1, 697, 357, -1, 294, 232, 699, 295,
16049 -1, 713, -1, 710, -1, 699, 808, -1, 699, 689,
16050 -1, 699, 399, -1, 699, 378, -1, 699, 380, -1,
16051 699, 382, -1, 699, 384, -1, 699, 303, -1, 699,
16052 719, -1, 699, 357, -1, 699, 809, -1, 294, 233,
16053 701, 295, -1, -1, 701, 711, -1, 701, 709, -1,
16054 294, 233, 703, 295, -1, -1, 703, 713, -1, 703,
16055 710, -1, 294, 234, 708, 702, 295, -1, 294, 235,
16056 706, 295, -1, -1, 706, 711, -1, 706, 694, -1,
16057 706, 357, -1, 706, 809, -1, 591, -1, 313, -1,
16058 592, -1, 313, -1, 593, -1, 575, -1, 594, -1,
16059 573, -1, 294, 236, 709, 712, 295, -1, -1, 711,
16060 -1, 475, -1, 826, -1, 294, 236, 710, 714, 295,
16061 -1, -1, 713, -1, 477, -1, 828, -1, 294, 237,
16062 846, 716, 295, -1, -1, 815, -1, 294, 239, 718,
16063 295, -1, 723, -1, 718, 408, -1, -1, 294, 238,
16064 722, 720, 721, 295, -1, 800, -1, 721, 649, -1,
16065 721, 805, -1, 721, 719, -1, 721, 357, -1, 592,
16066 -1, 593, -1, 294, 240, 725, 295, -1, -1, 725,
16067 696, -1, 725, 446, -1, 725, 472, -1, 725, 359,
16068 -1, 725, 338, -1, 725, 717, -1, 725, 510, -1,
16069 725, 653, -1, 725, 719, -1, 725, 357, -1, 725,
16070 809, -1, 517, -1, 466, -1, 321, -1, 320, -1,
16071 430, -1, 327, -1, 294, 242, 728, 295, -1, -1,
16072 728, 726, -1, 728, 754, -1, 294, 243, 677, 730,
16073 295, -1, 677, -1, 730, 719, -1, 294, 244, 738,
16074 440, 732, 295, -1, 727, -1, 584, -1, 732, 357,
16075 -1, 732, 809, -1, 294, 245, 734, 735, 295, -1,
16076 845, -1, 589, -1, 846, -1, 768, -1, 294, 246,
16077 737, 295, -1, -1, 737, 548, -1, 591, -1, 294,
16078 247, 740, 740, 805, 295, -1, 847, -1, 294, 116,
16079 847, 847, 295, -1, 294, 248, 847, 847, 295, -1,
16080 294, 249, 847, 847, 295, -1, 294, 250, 744, 295,
16081 -1, 846, -1, 744, 743, -1, 744, 846, -1, 744,
16082 472, -1, 294, 251, 746, 295, -1, 372, -1, 746,
16083 719, -1, 592, -1, -1, 294, 252, 749, 750, 295,
16084 -1, 747, -1, 750, 704, -1, 750, 834, -1, 750,
16085 309, -1, 750, 357, -1, 750, 809, -1, -1, 294,
16086 253, 752, 753, 295, -1, -1, 753, 561, -1, 753,
16087 357, -1, 753, 809, -1, 294, 254, 755, 295, -1,
16088 -1, 726, -1, 294, 255, 826, 757, 295, -1, -1,
16089 792, -1, 294, 256, 759, 295, -1, -1, 775, -1,
16090 294, 257, 761, 295, -1, 775, -1, 761, 756, -1,
16091 -1, 294, 258, 763, 764, 295, -1, -1, 764, 842,
16092 -1, 764, 357, -1, 764, 809, -1, 294, 259, 766,
16093 767, 295, -1, 709, -1, 711, -1, 700, -1, 415,
16094 -1, 767, 794, -1, 767, 324, -1, 294, 260, 771,
16095 295, -1, 294, 7, 770, 295, -1, -1, 770, 846,
16096 -1, 770, 768, -1, 770, 769, -1, 846, -1, 771,
16097 408, -1, 294, 261, 548, 295, -1, 294, 262, 774,
16098 295, -1, -1, 774, 696, -1, 774, 446, -1, 774,
16099 472, -1, 774, 359, -1, 774, 307, -1, 774, 652,
16100 -1, 774, 338, -1, 774, 717, -1, 774, 510, -1,
16101 774, 653, -1, 774, 719, -1, 774, 357, -1, 774,
16102 809, -1, 294, 263, 776, 295, -1, -1, 776, 792,
16103 -1, 294, 264, 778, 295, -1, -1, 778, 420, -1,
16104 778, 779, -1, 294, 265, 780, 781, 295, -1, 559,
16105 -1, 711, -1, 621, -1, 777, -1, -1, 388, -1,
16106 532, -1, 294, 266, 783, 295, -1, 633, -1, 783,
16107 436, -1, 783, 434, -1, 783, 751, -1, 783, 402,
16108 -1, 783, 357, -1, 783, 809, -1, 294, 267, 847,
16109 295, -1, 294, 268, 786, 787, 295, -1, 424, -1,
16110 637, -1, 424, -1, 637, -1, 415, -1, 294, 269,
16111 847, 847, 847, 847, 847, 847, 295, -1, -1, 294,
16112 270, 790, 791, 295, -1, 392, -1, 791, 660, -1,
16113 791, 459, -1, 791, 357, -1, 791, 809, -1, 294,
16114 271, 793, 295, -1, -1, 793, 741, -1, 793, 742,
16115 -1, 793, 390, -1, 793, 640, -1, 793, 642, -1,
16116 -1, 294, 272, 795, 796, 326, 295, -1, 552, -1,
16117 542, -1, 550, -1, 294, 273, 798, 295, -1, -1,
16118 798, 351, -1, 798, 765, -1, 798, 471, -1, 294,
16119 274, 295, -1, 330, -1, 490, -1, 577, -1, 629,
16120 -1, 671, -1, 769, -1, 294, 275, 295, -1, 294,
16121 276, 295, -1, 294, 277, 804, 295, -1, 444, -1,
16122 450, -1, 804, 444, -1, 804, 450, -1, 294, 278,
16123 806, 295, -1, 8, -1, 11, -1, 16, -1, 15,
16124 -1, 17, -1, 18, -1, 20, -1, 22, -1, 23,
16125 -1, 26, -1, 34, -1, 43, -1, 49, -1, 55,
16126 -1, 57, -1, 62, -1, 294, 279, 295, -1, 294,
16127 279, 295, -1, -1, 294, 280, 810, 811, 295, -1,
16128 845, -1, 811, 847, -1, 811, 846, -1, 811, 845,
16129 -1, 811, 462, -1, 592, -1, 313, -1, 593, -1,
16130 575, -1, 594, -1, 573, -1, 294, 281, 846, 295,
16131 -1, -1, 294, 282, 823, 817, 830, 818, 295, -1,
16132 492, -1, 818, 762, -1, 818, 363, -1, 818, 357,
16133 -1, 818, 719, -1, 818, 809, -1, 294, 283, 820,
16134 295, -1, -1, 820, 826, -1, 820, 819, -1, 294,
16135 284, 822, 295, -1, -1, 822, 705, -1, 822, 683,
16136 -1, 822, 483, -1, 822, 479, -1, 822, 612, -1,
16137 822, 598, -1, 822, 357, -1, 822, 809, -1, 592,
16138 -1, 593, -1, 594, -1, 294, 285, 824, 827, 295,
16139 -1, -1, 343, -1, 294, 285, 825, 829, 295, -1,
16140 -1, 345, -1, 294, 286, 831, 295, -1, 33, -1,
16141 42, -1, 40, -1, 52, -1, 54, -1, 9, -1,
16142 29, -1, 19, -1, 25, -1, 53, -1, 294, 287,
16143 335, 295, -1, 294, 288, 581, 295, -1, -1, 294,
16144 289, 547, 740, 835, 564, 295, -1, 294, 290, 548,
16145 295, -1, -1, 294, 291, 838, 839, 295, -1, -1,
16146 839, 713, -1, 839, 702, -1, 839, 503, -1, 294,
16147 292, 841, 295, -1, 797, -1, 841, 305, -1, 841,
16148 456, -1, 841, 567, -1, 841, 534, -1, 841, 357,
16149 -1, 841, 809, -1, -1, 294, 293, 843, 844, 295,
16150 -1, 788, -1, 844, 322, -1, 844, 715, -1, 844,
16151 376, -1, 844, 719, -1, 844, 357, -1, 844, 809,
16152 -1, 4, -1, 7, -1, 5, -1, 845, -1
16153 };
16154
16155
16156
16157 const unsigned short int
16158 Parser::yyprhs_[] =
16159 {
16160 0, 0, 3, 4, 14, 15, 18, 21, 24, 27,
16161 30, 33, 35, 40, 47, 52, 54, 56, 61, 63,
16162 66, 69, 72, 75, 78, 83, 85, 87, 88, 94,
16163 96, 99, 102, 105, 108, 115, 122, 123, 125, 128,
16164 130, 135, 140, 142, 144, 146, 149, 152, 157, 162,
16165 167, 172, 176, 177, 183, 185, 187, 189, 195, 197,
16166 199, 201, 203, 208, 209, 212, 215, 218, 223, 225,
16167 228, 233, 235, 237, 244, 249, 254, 255, 262, 264,
16168 267, 270, 273, 276, 279, 282, 284, 290, 291, 293,
16169 299, 300, 302, 304, 306, 311, 313, 315, 317, 323,
16170 325, 327, 329, 330, 332, 334, 341, 342, 345, 352,
16171 357, 358, 361, 366, 367, 370, 373, 376, 379, 382,
16172 385, 388, 393, 394, 397, 402, 403, 406, 409, 412,
16173 415, 418, 421, 424, 427, 430, 433, 436, 439, 442,
16174 445, 448, 451, 454, 459, 460, 462, 467, 469, 471,
16175 473, 478, 480, 482, 487, 492, 493, 496, 499, 505,
16176 506, 508, 514, 515, 517, 522, 524, 526, 531, 533,
16177 535, 540, 542, 544, 549, 551, 553, 558, 560, 562,
16178 567, 569, 571, 576, 577, 580, 585, 587, 589, 591,
16179 592, 599, 601, 604, 607, 610, 613, 618, 620, 622,
16180 627, 629, 631, 633, 638, 639, 642, 645, 648, 651,
16181 654, 657, 660, 663, 666, 669, 672, 675, 678, 681,
16182 686, 688, 690, 693, 696, 701, 703, 705, 707, 713,
16183 715, 717, 718, 721, 724, 727, 732, 733, 736, 741,
16184 743, 746, 751, 759, 761, 763, 766, 769, 774, 776,
16185 778, 780, 787, 789, 791, 793, 795, 797, 799, 801,
16186 802, 804, 806, 807, 813, 815, 817, 819, 821, 823,
16187 826, 829, 831, 833, 835, 840, 841, 849, 851, 854,
16188 857, 860, 863, 869, 873, 878, 880, 883, 886, 889,
16189 892, 895, 898, 901, 904, 907, 910, 913, 916, 919,
16190 921, 923, 928, 930, 932, 934, 939, 941, 944, 947,
16191 950, 953, 956, 959, 962, 965, 968, 971, 974, 977,
16192 983, 984, 986, 991, 993, 995, 998, 1001, 1004, 1007,
16193 1010, 1013, 1016, 1019, 1022, 1029, 1031, 1033, 1036, 1039,
16194 1041, 1043, 1045, 1047, 1049, 1056, 1058, 1060, 1063, 1066,
16195 1073, 1075, 1077, 1080, 1083, 1090, 1096, 1098, 1100, 1102,
16196 1104, 1107, 1110, 1111, 1117, 1119, 1122, 1123, 1129, 1130,
16197 1133, 1136, 1139, 1142, 1147, 1152, 1158, 1162, 1167, 1169,
16198 1171, 1175, 1176, 1183, 1185, 1187, 1190, 1193, 1196, 1199,
16199 1202, 1205, 1208, 1211, 1217, 1218, 1220, 1222, 1228, 1229,
16200 1231, 1233, 1238, 1240, 1243, 1246, 1249, 1252, 1257, 1258,
16201 1261, 1266, 1267, 1270, 1273, 1276, 1279, 1281, 1283, 1285,
16202 1287, 1289, 1291, 1296, 1298, 1301, 1306, 1307, 1310, 1313,
16203 1316, 1321, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343,
16204 1346, 1349, 1352, 1355, 1358, 1361, 1364, 1367, 1370, 1378,
16205 1380, 1382, 1385, 1388, 1393, 1395, 1397, 1400, 1403, 1410,
16206 1412, 1414, 1417, 1420, 1425, 1427, 1429, 1433, 1434, 1440,
16207 1441, 1444, 1447, 1452, 1453, 1456, 1459, 1462, 1467, 1469,
16208 1471, 1473, 1475, 1477, 1479, 1481, 1483, 1485, 1490, 1492,
16209 1495, 1500, 1505, 1507, 1510, 1512, 1514, 1519, 1521, 1523,
16210 1525, 1526, 1534, 1536, 1539, 1542, 1545, 1548, 1553, 1558,
16211 1563, 1564, 1567, 1572, 1573, 1576, 1579, 1585, 1587, 1589,
16212 1595, 1597, 1599, 1606, 1608, 1610, 1612, 1614, 1616, 1617,
16213 1619, 1621, 1622, 1628, 1630, 1633, 1635, 1637, 1639, 1640,
16214 1646, 1647, 1650, 1653, 1656, 1661, 1666, 1668, 1670, 1672,
16215 1673, 1679, 1681, 1682, 1685, 1688, 1689, 1695, 1697, 1700,
16216 1705, 1707, 1710, 1713, 1716, 1722, 1723, 1725, 1726, 1733,
16217 1734, 1737, 1740, 1743, 1746, 1749, 1752, 1755, 1758, 1761,
16218 1764, 1767, 1770, 1773, 1776, 1777, 1783, 1784, 1787, 1790,
16219 1793, 1796, 1802, 1804, 1806, 1807, 1809, 1811, 1817, 1819,
16220 1821, 1823, 1825, 1827, 1829, 1836, 1837, 1839, 1846, 1847,
16221 1849, 1854, 1855, 1858, 1861, 1864, 1869, 1871, 1874, 1876,
16222 1878, 1885, 1887, 1889, 1891, 1896, 1897, 1900, 1901, 1907,
16223 1908, 1911, 1914, 1917, 1920, 1925, 1927, 1930, 1932, 1934,
16224 1936, 1938, 1940, 1942, 1944, 1946, 1948, 1950, 1951, 1959,
16225 1960, 1963, 1966, 1969, 1972, 1975, 1978, 1981, 1984, 1987,
16226 1992, 1994, 1997, 2000, 2003, 2006, 2007, 2014, 2016, 2019,
16227 2022, 2025, 2028, 2031, 2037, 2039, 2042, 2045, 2050, 2052,
16228 2054, 2059, 2060, 2063, 2066, 2068, 2073, 2074, 2077, 2080,
16229 2085, 2086, 2089, 2092, 2095, 2098, 2100, 2102, 2104, 2106,
16230 2108, 2110, 2116, 2117, 2119, 2121, 2123, 2129, 2130, 2132,
16231 2134, 2136, 2140, 2141, 2147, 2148, 2151, 2154, 2160, 2162,
16232 2165, 2168, 2175, 2177, 2179, 2182, 2185, 2190, 2191, 2194,
16233 2197, 2200, 2205, 2207, 2210, 2215, 2216, 2219, 2222, 2225,
16234 2230, 2232, 2235, 2238, 2241, 2244, 2250, 2255, 2257, 2260,
16235 2265, 2267, 2269, 2271, 2273, 2275, 2277, 2279, 2281, 2286,
16236 2294, 2296, 2298, 2301, 2304, 2312, 2314, 2316, 2319, 2322,
16237 2329, 2331, 2333, 2338, 2343, 2345, 2348, 2351, 2354, 2357,
16238 2360, 2363, 2366, 2369, 2372, 2377, 2382, 2384, 2387, 2394,
16239 2395, 2397, 2403, 2408, 2410, 2413, 2414, 2420, 2422, 2425,
16240 2430, 2432, 2434, 2439, 2440, 2446, 2447, 2450, 2453, 2456,
16241 2461, 2462, 2465, 2470, 2471, 2474, 2477, 2480, 2485, 2487,
16242 2490, 2495, 2496, 2499, 2505, 2510, 2512, 2515, 2516, 2523,
16243 2524, 2527, 2530, 2533, 2536, 2539, 2542, 2545, 2548, 2551,
16244 2554, 2557, 2560, 2561, 2568, 2569, 2572, 2575, 2578, 2581,
16245 2584, 2587, 2590, 2593, 2596, 2599, 2600, 2607, 2609, 2612,
16246 2615, 2618, 2624, 2626, 2628, 2631, 2634, 2639, 2640, 2643,
16247 2646, 2648, 2653, 2654, 2657, 2660, 2665, 2667, 2669, 2672,
16248 2675, 2678, 2681, 2684, 2687, 2690, 2693, 2696, 2701, 2703,
16249 2705, 2708, 2711, 2714, 2717, 2720, 2723, 2726, 2729, 2732,
16250 2735, 2738, 2743, 2744, 2747, 2750, 2755, 2756, 2759, 2762,
16251 2768, 2773, 2774, 2777, 2780, 2783, 2786, 2788, 2790, 2792,
16252 2794, 2796, 2798, 2800, 2802, 2808, 2809, 2811, 2813, 2815,
16253 2821, 2822, 2824, 2826, 2828, 2834, 2835, 2837, 2842, 2844,
16254 2847, 2848, 2855, 2857, 2860, 2863, 2866, 2869, 2871, 2873,
16255 2878, 2879, 2882, 2885, 2888, 2891, 2894, 2897, 2900, 2903,
16256 2906, 2909, 2912, 2914, 2916, 2918, 2920, 2922, 2924, 2929,
16257 2930, 2933, 2936, 2942, 2944, 2947, 2954, 2956, 2958, 2961,
16258 2964, 2970, 2972, 2974, 2976, 2978, 2983, 2984, 2987, 2989,
16259 2996, 2998, 3004, 3010, 3016, 3021, 3023, 3026, 3029, 3032,
16260 3037, 3039, 3042, 3044, 3045, 3051, 3053, 3056, 3059, 3062,
16261 3065, 3068, 3069, 3075, 3076, 3079, 3082, 3085, 3090, 3091,
16262 3093, 3099, 3100, 3102, 3107, 3108, 3110, 3115, 3117, 3120,
16263 3121, 3127, 3128, 3131, 3134, 3137, 3143, 3145, 3147, 3149,
16264 3151, 3154, 3157, 3162, 3167, 3168, 3171, 3174, 3177, 3179,
16265 3182, 3187, 3192, 3193, 3196, 3199, 3202, 3205, 3208, 3211,
16266 3214, 3217, 3220, 3223, 3226, 3229, 3232, 3237, 3238, 3241,
16267 3246, 3247, 3250, 3253, 3259, 3261, 3263, 3265, 3267, 3268,
16268 3270, 3272, 3277, 3279, 3282, 3285, 3288, 3291, 3294, 3297,
16269 3302, 3308, 3310, 3312, 3314, 3316, 3318, 3328, 3329, 3335,
16270 3337, 3340, 3343, 3346, 3349, 3354, 3355, 3358, 3361, 3364,
16271 3367, 3370, 3371, 3378, 3380, 3382, 3384, 3389, 3390, 3393,
16272 3396, 3399, 3403, 3405, 3407, 3409, 3411, 3413, 3415, 3419,
16273 3423, 3428, 3430, 3432, 3435, 3438, 3443, 3445, 3447, 3449,
16274 3451, 3453, 3455, 3457, 3459, 3461, 3463, 3465, 3467, 3469,
16275 3471, 3473, 3475, 3479, 3483, 3484, 3490, 3492, 3495, 3498,
16276 3501, 3504, 3506, 3508, 3510, 3512, 3514, 3516, 3521, 3522,
16277 3530, 3532, 3535, 3538, 3541, 3544, 3547, 3552, 3553, 3556,
16278 3559, 3564, 3565, 3568, 3571, 3574, 3577, 3580, 3583, 3586,
16279 3589, 3591, 3593, 3595, 3601, 3602, 3604, 3610, 3611, 3613,
16280 3618, 3620, 3622, 3624, 3626, 3628, 3630, 3632, 3634, 3636,
16281 3638, 3643, 3648, 3649, 3657, 3662, 3663, 3669, 3670, 3673,
16282 3676, 3679, 3684, 3686, 3689, 3692, 3695, 3698, 3701, 3704,
16283 3705, 3711, 3713, 3716, 3719, 3722, 3725, 3728, 3731, 3733,
16284 3735, 3737
16285 };
16286
16287
16288 const unsigned short int
16289 Parser::yyrline_[] =
16290 {
16291 0, 945, 945, 944, 968, 969, 970, 971, 972, 973,
16292 980, 989, 992, 998, 1007, 1013, 1014, 1017, 1020, 1021,
16293 1022, 1023, 1024, 1028, 1034, 1037, 1041, 1048, 1047, 1082,
16294 1083, 1084, 1085, 1092, 1101, 1109, 1123, 1126, 1129, 1139,
16295 1146, 1149, 1152, 1153, 1154, 1155, 1159, 1165, 1168, 1174,
16296 1180, 1186, 1190, 1189, 1219, 1220, 1221, 1224, 1227, 1228,
16297 1231, 1232, 1235, 1251, 1254, 1261, 1268, 1281, 1287, 1291,
16298 1297, 1304, 1308, 1314, 1322, 1328, 1332, 1331, 1441, 1442,
16299 1443, 1444, 1445, 1452, 1459, 1462, 1466, 1481, 1484, 1491,
16300 1506, 1509, 1516, 1522, 1528, 1535, 1539, 1543, 1549, 1552,
16301 1553, 1554, 1557, 1558, 1559, 1562, 1569, 1570, 1573, 1581,
16302 1587, 1590, 1596, 1599, 1600, 1601, 1602, 1603, 1604, 1605,
16303 1609, 1615, 1622, 1625, 1632, 1635, 1636, 1637, 1638, 1639,
16304 1640, 1641, 1642, 1643, 1644, 1645, 1656, 1667, 1668, 1669,
16305 1670, 1671, 1675, 1681, 1684, 1685, 1688, 1691, 1692, 1693,
16306 1696, 1702, 1707, 1714, 1720, 1723, 1724, 1725, 1731, 1748,
16307 1751, 1757, 1763, 1766, 1772, 1778, 1779, 1782, 1788, 1789,
16308 1792, 1798, 1799, 1802, 1808, 1809, 1812, 1818, 1825, 1834,
16309 1837, 1841, 1847, 1850, 1851, 1857, 1863, 1867, 1871, 1878,
16310 1877, 1978, 1983, 1987, 1995, 1999, 2009, 2012, 2016, 2022,
16311 2028, 2029, 2032, 2035, 2038, 2039, 2040, 2041, 2042, 2043,
16312 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2055, 2061,
16313 2064, 2065, 2066, 2067, 2070, 2077, 2081, 2085, 2091, 2094,
16314 2095, 2098, 2099, 2100, 2101, 2104, 2111, 2114, 2121, 2124,
16315 2128, 2131, 2137, 2140, 2141, 2142, 2146, 2152, 2155, 2156,
16316 2157, 2160, 2163, 2164, 2165, 2168, 2172, 2173, 2174, 2177,
16317 2178, 2179, 2183, 2182, 2215, 2216, 2217, 2218, 2219, 2220,
16318 2236, 2254, 2390, 2575, 2699, 2706, 2705, 2809, 2810, 2811,
16319 2812, 2819, 2828, 2831, 2834, 2837, 2838, 2839, 2840, 2841,
16320 2842, 2843, 2844, 2845, 2846, 2847, 2851, 2852, 2856, 2859,
16321 2862, 2865, 2868, 2869, 2870, 2873, 2876, 2877, 2878, 2879,
16322 2880, 2881, 2882, 2883, 2884, 2885, 2886, 2890, 2891, 2897,
16323 2900, 2901, 2904, 2907, 2908, 2909, 2910, 2911, 2912, 2913,
16324 2914, 2915, 2916, 2920, 2926, 2929, 2930, 2931, 2935, 2941,
16325 2942, 2943, 2944, 2945, 2948, 2952, 2953, 2954, 2958, 2964,
16326 2967, 2968, 2969, 2973, 2979, 2987, 2990, 2991, 2994, 2995,
16327 2996, 2997, 3001, 3000, 3034, 3035, 3049, 3048, 3055, 3056,
16328 3060, 3064, 3068, 3071, 3077, 3083, 3090, 3121, 3124, 3125,
16329 3128, 3132, 3131, 3575, 3580, 3584, 3588, 3593, 3598, 3607,
16330 3612, 3616, 3621, 3628, 3630, 3631, 3632, 3635, 3643, 3646,
16331 3650, 3657, 3660, 3661, 3662, 3663, 3664, 3670, 3673, 3674,
16332 3677, 3680, 3681, 3682, 3683, 3687, 3693, 3694, 3697, 3698,
16333 3701, 3702, 3705, 3711, 3715, 3721, 3738, 3741, 3747, 3753,
16334 3766, 3773, 3776, 3780, 3784, 3788, 3792, 3796, 3800, 3804,
16335 3808, 3812, 3816, 3826, 3836, 3841, 3845, 3850, 3858, 3861,
16336 3862, 3863, 3867, 3873, 3876, 3877, 3878, 3879, 3882, 3885,
16337 3886, 3887, 3891, 3897, 3900, 3901, 3904, 3908, 3907, 4017,
16338 4018, 4137, 4246, 4249, 4250, 4269, 4431, 4515, 4518, 4519,
16339 4520, 4521, 4522, 4523, 4524, 4525, 4526, 4529, 4532, 4533,
16340 4536, 4542, 4545, 4546, 4552, 4558, 4561, 4567, 4570, 4573,
16341 4580, 4579, 4704, 4705, 4706, 4707, 4714, 4723, 4726, 4732,
16342 4735, 4736, 4739, 4742, 4743, 4744, 4747, 4760, 4761, 4764,
16343 4767, 4768, 4771, 4774, 4775, 4778, 4779, 4783, 4786, 4787,
16344 4788, 4792, 4791, 4827, 4828, 4831, 4924, 4986, 5031, 5030,
16345 5124, 5125, 5126, 5127, 5130, 5136, 5142, 5145, 5151, 5155,
16346 5154, 5248, 5346, 5347, 5348, 5352, 5351, 5387, 5388, 5391,
16347 5394, 5395, 5396, 5400, 5406, 5421, 5424, 5432, 5431, 5504,
16348 5507, 5513, 5519, 5525, 5595, 5626, 5657, 5727, 5808, 5889,
16349 5894, 5964, 5968, 5976, 5987, 5986, 6068, 6069, 6070, 6071,
16350 6072, 6075, 6078, 6079, 6082, 6083, 6084, 6087, 6090, 6091,
16351 6092, 6095, 6096, 6097, 6100, 6114, 6117, 6120, 6127, 6128,
16352 6134, 6150, 6153, 6161, 6169, 6182, 6188, 6192, 6198, 6202,
16353 6214, 6241, 6245, 6249, 6255, 6258, 6259, 6263, 6262, 6372,
16354 6373, 6492, 6599, 6600, 6603, 6609, 6615, 6618, 6622, 6626,
16355 6632, 6638, 6642, 6648, 6654, 6660, 6666, 6673, 6672, 6872,
16356 6875, 6880, 6886, 6890, 6894, 6898, 6902, 6906, 6914, 6924,
16357 6927, 6928, 6932, 6936, 6937, 6944, 6943, 7042, 7043, 7044,
16358 7045, 7046, 7054, 7064, 7073, 7077, 7089, 7103, 7109, 7115,
16359 7123, 7126, 7127, 7128, 7131, 7165, 7168, 7169, 7170, 7173,
16360 7176, 7177, 7178, 7179, 7183, 7189, 7190, 7193, 7194, 7197,
16361 7198, 7201, 7204, 7205, 7206, 7207, 7210, 7240, 7243, 7247,
16362 7254, 7261, 7265, 7264, 7361, 7362, 7486, 7489, 7492, 7493,
16363 7497, 7503, 7506, 7507, 7508, 7512, 7518, 7534, 7537, 7544,
16364 7551, 7564, 7570, 7574, 7580, 7583, 7584, 7585, 7586, 7592,
16365 7595, 7596, 7597, 7598, 7602, 7608, 7614, 7617, 7618, 7621,
16366 7624, 7625, 7626, 7627, 7628, 7629, 7630, 7631, 7634, 7640,
16367 7643, 7644, 7645, 7649, 7655, 7658, 7659, 7660, 7664, 7670,
16368 7676, 7677, 7680, 7686, 7689, 7693, 7694, 7695, 7696, 7697,
16369 7698, 7699, 7700, 7704, 7710, 7713, 7716, 7717, 7720, 7813,
16370 7816, 7819, 7827, 7830, 7831, 7835, 7834, 7868, 7869, 7882,
16371 7892, 7893, 7896, 7903, 7902, 8003, 8004, 8128, 8129, 8132,
16372 8135, 8136, 8139, 8155, 8158, 8166, 8174, 8187, 8193, 8197,
16373 8203, 8206, 8207, 8213, 8219, 8222, 8223, 8227, 8226, 8387,
16374 8390, 8394, 8401, 8407, 8414, 8422, 8430, 8438, 8446, 8452,
16375 8456, 8464, 8475, 8474, 8649, 8652, 8659, 8665, 8672, 8680,
16376 8688, 8696, 8704, 8710, 8714, 8722, 8721, 8823, 8824, 8825,
16377 8833, 8843, 8853, 8859, 8865, 8877, 8891, 8894, 8895, 8896,
16378 8899, 8933, 8936, 8937, 8938, 8941, 8944, 8945, 8946, 8947,
16379 8948, 8949, 8950, 8951, 8952, 8953, 8957, 8963, 8969, 8974,
16380 8980, 8990, 8999, 9009, 9020, 9031, 9042, 9053, 9062, 9066,
16381 9071, 9078, 9081, 9082, 9083, 9086, 9093, 9096, 9101, 9110,
16382 9228, 9231, 9232, 9233, 9234, 9238, 9244, 9245, 9251, 9252,
16383 9255, 9256, 9259, 9260, 9263, 9265, 9266, 9267, 9268, 9271,
16384 9301, 9304, 9308, 9315, 9322, 9329, 9332, 9339, 9342, 9343,
16385 9347, 9346, 9439, 9460, 9466, 9471, 9472, 9480, 9483, 9486,
16386 9489, 9490, 9491, 9492, 9493, 9494, 9495, 9496, 9497, 9498,
16387 9499, 9503, 9509, 9510, 9511, 9512, 9513, 9514, 9517, 9520,
16388 9521, 9522, 9525, 9531, 9535, 9538, 9541, 9542, 9543, 9547,
16389 9553, 9561, 9567, 9573, 9577, 9583, 9590, 9593, 9600, 9603,
16390 9611, 9615, 9621, 9628, 9635, 9638, 9642, 9643, 9647, 9650,
16391 9653, 9654, 9657, 9661, 9660, 9693, 9713, 9714, 9715, 9716,
16392 9724, 9735, 9734, 9769, 9770, 9771, 9779, 9789, 9792, 9793,
16393 9796, 9799, 9800, 9803, 9806, 9807, 9810, 9813, 9814, 9818,
16394 9817, 9861, 9862, 9863, 9870, 9879, 9882, 9883, 9884, 9887,
16395 9891, 9892, 9895, 9901, 9918, 9921, 9928, 9935, 9948, 9952,
16396 9958, 9964, 9967, 9968, 9969, 9970, 9971, 9972, 9973, 9974,
16397 9975, 9976, 9977, 9978, 9979, 9983, 9989, 9992, 9993, 9996,
16398 9999, 10000, 10001, 10004, 10007, 10011, 10012, 10013, 10016, 10017,
16399 10018, 10021, 10027, 10028, 10029, 10030, 10031, 10032, 10036, 10042,
16400 10048, 10051, 10062, 10080, 10091, 10107, 10120, 10139, 10138, 10171,
16401 10180, 10181, 10182, 10191, 10202, 10205, 10206, 10207, 10208, 10209,
16402 10210, 10214, 10213, 10243, 10244, 10245, 10248, 10251, 10252, 10253,
16403 10254, 10257, 10260, 10261, 10262, 10263, 10264, 10265, 10268, 10271,
16404 10274, 10277, 10278, 10279, 10280, 10283, 10289, 10293, 10297, 10301,
16405 10305, 10309, 10313, 10317, 10321, 10325, 10329, 10333, 10337, 10341,
16406 10345, 10349, 10355, 10358, 10365, 10364, 10377, 10381, 10385, 10389,
16407 10393, 10396, 10397, 10400, 10401, 10404, 10405, 10408, 10415, 10414,
16408 10556, 10566, 10567, 10568, 10575, 10576, 10588, 10591, 10592, 10593,
16409 10596, 10599, 10600, 10601, 10602, 10603, 10604, 10605, 10606, 10610,
16410 10616, 10619, 10622, 10625, 10628, 10629, 10632, 10647, 10650, 10656,
16411 10682, 10686, 10690, 10694, 10698, 10702, 10706, 10710, 10714, 10718,
16412 10724, 10730, 10737, 10736, 10800, 10807, 10806, 10916, 10917, 11036,
16413 11143, 11146, 11149, 11150, 11151, 11152, 11153, 11154, 11158, 11165,
16414 11164, 11201, 11208, 11215, 11223, 11231, 11232, 11239, 11248, 11254,
16415 11260, 11266
16416 };
16417
16418
16419 void
16420 Parser::yystack_print_ ()
16421 {
16422 *yycdebug_ << "Stack now";
16423 for (state_stack_type::const_iterator i = yystate_stack_.begin ();
16424 i != yystate_stack_.end (); ++i)
16425 *yycdebug_ << ' ' << *i;
16426 *yycdebug_ << std::endl;
16427 }
16428
16429
16430 void
16431 Parser::yy_reduce_print_ (int yyrule)
16432 {
16433 unsigned int yylno = yyrline_[yyrule];
16434 int yynrhs = yyr2_[yyrule];
16435
16436 *yycdebug_ << "Reducing stack by rule " << yyrule - 1
16437 << " (line " << yylno << "):" << std::endl;
16438
16439 for (int yyi = 0; yyi < yynrhs; yyi++)
16440 YY_SYMBOL_PRINT (" $" << yyi + 1 << " =",
16441 yyrhs_[yyprhs_[yyrule] + yyi],
16442 &(yysemantic_stack_[(yynrhs) - (yyi + 1)]),
16443 &(yylocation_stack_[(yynrhs) - (yyi + 1)]));
16444 }
16445 #endif // YYDEBUG
16446
16447
16448 Parser::token_number_type
16449 Parser::yytranslate_ (int t)
16450 {
16451 static
16452 const token_number_type
16453 translate_table[] =
16454 {
16455 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16456 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16457 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16458 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16459 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16460 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16461 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16462 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16463 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16464 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16465 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16466 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16467 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16468 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16469 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16470 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16471 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16472 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16473 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16474 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16475 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16476 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16477 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16478 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16479 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16480 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
16481 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
16482 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
16483 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
16484 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
16485 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
16486 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
16487 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
16488 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
16489 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
16490 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
16491 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
16492 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
16493 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
16494 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
16495 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
16496 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
16497 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
16498 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
16499 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
16500 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
16501 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
16502 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
16503 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
16504 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
16505 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
16506 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
16507 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
16508 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
16509 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
16510 295
16511 };
16512 if ((unsigned int) t <= yyuser_token_number_max_)
16513 return translate_table[t];
16514 else
16515 return yyundef_token_;
16516 }
16517
16518 const int Parser::yyeof_ = 0;
16519 const int Parser::yylast_ = 2272;
16520 const int Parser::yynnts_ = 553;
16521 const int Parser::yyempty_ = -2;
16522 const int Parser::yyfinal_ = 4;
16523 const int Parser::yyterror_ = 1;
16524 const int Parser::yyerrcode_ = 256;
16525 const int Parser::yyntokens_ = 296;
16526
16527 const unsigned int Parser::yyuser_token_number_max_ = 550;
16528 const Parser::token_number_type Parser::yyundef_token_ = 2;
16529
16530
16531
16532 #line 58 "Parser.yy"
16533 } }
16534
16535
16536 #line 16537 "Parser.cc"
16537
16538
16539
16540 #line 11275 "Parser.yy"
16541
16542
16543 void
16544 torc::generic::Parser::error(const Parser::location_type& l,
16545 const std::string& m)
16546 {
16547 if( !inDriver.getIsParserErrorSet() )
16548 {
16549 Error e( eMessageIdParserError,
16550 __FUNCTION__, __FILE__, __LINE__ );
16551 e.saveContextData( "Parser error message", m );
16552 e.saveContextData( "Filename", l.begin.filename );
16553 e.saveContextData( "StartLine", l.begin.line );
16554 e.saveContextData( "EndLine", l.end.line );
16555 inDriver.setParserError( e );
16556 log("Synthetic parser error created\n");
16557 }
16558 inDriver.error(l, m);
16559 }
16560
16561