úÎ<”3Aē      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨͧĻĐŠŦŽ­ŪŊ°ą Safe-Inferred`†This is the parser stream type. We can switch from String to ByteString or other input stream by changing the definition of SdfStringa  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a`_^]\[ZXYVWUTSRQPONMLKIJHGFDEC@BA?>9=<;:780654321./+-,"*)('&%$#!   ; ! "*)('&%$#+-,./0654321789=<;:>?@BACDEFGHIJKLMNOPQRSTUVWXYZ[\]^_` Safe-Inferred aaLanguage definition for the SDF file format Note that the input stream is specialized for the `J type so that we can easily change the stream type in one single placeblThis is a convenience function used to parse a SDF file and return the AST representation of the SDF file. §@Given a parser, attempt to parse. If parser succeeds, returns a ē value, else ģ is returned.ĻFSince the format (FOO ...) occurs so often in SDF syntax, the parser Ļ' is a short cut version for this parserĐ\Parses a rtriple or a rnumber Here we take a shortcut in the data representation, where an m0 is represented as an rtriple of the same valueŠ Parses a š or an œŦYParses a posPair or a negPair name1 and name2 is the edge name, ie. posedge or negedge ŽParses the negative sign ī, or the positive ĩ" Absence of sign implies positiveŪÚThis is the identifier defined in the SDF spec, but the parser does not consume trailing white spaces (ie. wrapped in a lexeme) as other parsers do. We keep this version of the parser so that we can combine it with { parser later to form q parserNabcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨͧĻĐŠŦŽ­ŪŊ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨͧĻĐŠŦŽ­ŪNabcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨͧĻĐŠŦŽ­ŪNabcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨͧĻĐŠŦŽ­Ū Safe-InferredŊēGiven a SDF file, parse the cells using the customized cell parser and return a list of parsed cells. This function can be used whenever the SDF is too large to parse wholesale°ŧGiven a SDF file, lazily parse the cells using the customized cell parser and return a list of parsed cells. This function can be used whenever the SDF is too large to parse wholesale. ąHGiven a SDF file, parse the SDF headers, ignoring all the cell instancesķxlazy version of the many parser Note that the following function does not return a parser, but returns a list insteadŊ°ąķŊ°ąŊ°ąŊ°ąķ·      !"#$%&'()*+,-./001234567889:;<=>?@ABCDDEFGHHIJKLMNOPQRSTTUUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨͧĻĐŠŦŽ­ŪŊ°ŪŊąŪēģŪēīĩķsdf2p1-parser-0.1.1Text.SDF.V2p1.Parser.SDFTypesText.SDF.V2p1.Parser.SDFParserText.SDF.V2p1.Parser.SDFQueryEqualityOperatorBinaryOperatorInversionOperator UnaryOperatorScalarConstantTimingCheckConditionSimpleExpressionConditionalPortExpr RvalueListRtripleRvalueTripleValue PortInstanceBusPort ScalarPortPortPortPathEdgeIdentifierPortEdgePortSpecPortSpecPortEdgePortSpecPortPathConstraintPathPortTchk PortTchkCondPortTchkPortSpecCnsDefCnsDefSkewconstraint CnsDefDiff CnsDefSumCnsDefPathconstraintTchkDefTchkDefNochange TchkDefPeriod TchkDefWidth TchkDefSkewTchkDefRecoveryTchkDefSetuphold TchkDefHold TchkDefSetupTcDef TcDefCnsDef TcDefTchkDefNetSpecDelDef DelDefDeviceDelDefNetdelayDelDefInterconnect DelDefPort DelDefCond DelDefIopathInputOutputPathDeltypeDeltypeIncrementDeltypeAbsoluteDeltypeGlobalpathpulseDeltypePathpulseTcSpecDelSpec TimingSpec TimingSpecTc TimingSpecDel CorrFactor CorrelationInstance CellInstanceCelltypeCell TimeScale TemperatureProcessVoltageHierarchyDividerProgramVersion ProgramNameVendorDate DesignName SdfVersion SdfHeader DelayFile IdentifierTsvalueDnumberRnumberNumberQstring SdfStringsdflangparseSdflexerlexemesymbolparensreserved reservedOpbraces whiteSpaceqstringnumberrnumberdnumbertsvalue identifierpath delay_file sdf_header sdf_version design_namedatevendor program_nameprogram_versionhierarchy_dividerhcharvoltageprocess temperature time_scalecellcelltype cell_instance instance' correlation corr_factor timing_specdel_spectc_specdeltypeinput_output_pathdel_defnet_spectc_deftchk_defcns_def port_tchkconstraint_path port_spec port_edgeedge_identifier port_pathport scalar_portbus_port port_instancevaluetriplervaluertriple rvalue_listconditional_port_exprsimple_expressiontiming_check_conditionscalar_constantunary_operatorinversion_operatorbinary_operatorequality_operator maybeParser sdf_simplertriple_or_rnumber valueOrRvalue posOrNegPairsigntripleOrRtriple identifier' parseCellsparseCellsLazy parseHeadersbase Data.MaybeJustNothingGHC.Num-+lazyMany