o ½~b’7ã@sGdd„dƒZdS)c@s¼eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-S).Ú CpyParsercCs d|_dS)N)ÚBLANKÚZEROÚZEROSÚZEROESÚDATEÚFORMATÚEXTERNALÚGLOBALÚJUSTÚ JUSTIFIEDÚLEFTZ RIGHTOCCURSÚPICÚPICTUREÚ REDEFINESÚRENAMESÚSIGNÚLEADINGÚTRAILINGÚSEPARATEÚ CHARACTERZSYNCHÚ SYNCHRONIZEDÚUSAGEÚDISPLAYúCOMP-3ÚVALUEÚ.)Úkeywords©Úself©rú9d:\MyWork\GitHubRepos\mf-unlock-cobdata\src\cpy_parser.pyÚ__init__s zCpyParser.__init__cCst|ddƒS)Né)Úint©rÚlengthrrr Ú comp3_sizeszCpyParser.comp3_sizecCs|dkrdS|dkr dSdS)Nér"é érr$rrr Ú comp_sizes zCpyParser.comp_sizec CsÜg}d\}}}}t|ƒ}|D]¿}|dvr | |¡|r|d7}q|dkr;t|ƒ} | dks3Jd |¡ƒ‚| d¡d}q|d krVt|ƒ} | d ksNJd |¡ƒ‚| d ¡d}q|d kr¤d } z|D]}|dkrgqpd| t|ƒ} q_Wnty„} ztd |¡ƒ‚d} ~ ww|dksJd |¡ƒ‚| | d|d¡|r£|| d7}q|dkr«d}q|dkr´|d7}q|dkr»d}q|dkrÇd}| d¡qtd |¡ƒ‚d |¡} d| vpÞd| vpÞd| v} t| | t | ƒ|||||dS)N)ér+FN) ÚAÚBÚXÚZÚ9Ú0ú/ú,ú+ú-Ú*ú$éÚDr-zpicture error in {0!r}ZDBTÚCÚRÚCRú(r+ú)é éÿÿÿÿÚSÚPÚVrzPicture error in {!r}Úr,r.r2)ÚfinalÚnumericr%ÚscaleÚ precisionÚsignedÚdecimalÚpicture) ÚiterÚappendÚnextÚformatr#Ú ValueErrorÚ SyntaxErrorÚjoinÚdictÚlen)rÚpicÚoutrGrHrIrJÚ char_iterÚcZncZirptÚerEÚalpharrr Úpicture_parsers`   €   €€ÿ€   ÿzCpyParser.picture_parsercCs8| ¡|_|jdkr| ¡|_|j}| ¡|_| |¡S)NÚIS)Ú nextTokenÚtokenr[)rrUrrr rKRs     zCpyParser.picturecCs:| ¡|_|jdkr| ¡|_|jdvr| ¡|_dSdS)NZWHEN>rrr©r]r^rrrr Ú blankWhenZero[s    ÿzCpyParser.blankWhenZerocCsd| ¡|_|jdkr| ¡|_|jdkr| ¡|_|j dd¡r.|j dd¡r0| ¡|_dSdSdS)Nrr\r.ZYY)r]r^Ú startswithÚendswithrrrr Ú dateFormatcs     ÿzCpyParser.dateFormatcCs&| ¡|_|jdkr| ¡|_dSdS)NÚRIGHTr_rrrr Ú justifiedls  ÿzCpyParser.justifiedcCsb| ¡}|dkr | d¡S| ¡|_|jdkr| |¡S|jdkr&| ¡|_| ¡t||ddS)zParse an OCCURS clause.ZTOÚ1ÚTIMESN©Ú occurs_minÚ occurs_maxÚ depending_on)r]Úoccurs_depending_onr^Ú occurs_cruftrS)rÚoccursrrr rnrs      zCpyParser.occurscCs°|jdvr | ¡|_|jdkr| ¡|_|jdkr| ¡|_|j|jvr/| ¡|_|j|jvs$|jdkr9| ¡|_|jdkrC| ¡|_|j|jvrV| ¡|_|j|jvsIdSdS)N>Z ASCENDINGZ DESCENDINGZKEYr\ZINDEXEDZBY)r^r]rrrrr rm„s         ÿ      ÿzCpyParser.occurs_cruftcCsˆ| ¡|_|j}|}t|ƒ}| ¡|_|jdkr| ¡|_|jdkr'| ¡|_|jdkr1| ¡|_|j}| ¡|_| ¡t|||dS)z1Parse the [Occurs n TO] m Times Depending On namergZ DEPENDINGZONrh)r]r^r#rmrS)rÚlowerÚupperrirjrkrrr rl—s         zCpyParser.occurs_depending_oncCs| ¡}| ¡|_|S©Nr_)rZredefrrr Ú redefinesªs zCpyParser.redefinescCs8| ¡}| ¡|_|jdvrt|jƒ}| ¡|_tdƒ‚)N>ZTHRUZTHROUGHzRenames clause)r]r^rNZlextÚ Exception)rZren1Zren2rrr Úrenames°s     zCpyParser.renamescCs8| ¡|_|jdkr| ¡|_|jdvr| ¡tdƒ‚)Nr\)rrú Sign clause)r]r^Úsign2rsrrrr Úsign1¹s    zCpyParser.sign1cCó:| ¡|_|jdkr| ¡|_|jdkr| ¡|_tdƒ‚)Nrrru©r]r^rsrrrr rvÂó     zCpyParser.sign2cCrx)Nr rdzSynchronized clauseryrrrr Ú synchronizedÊrzzCpyParser.synchronizedcCsR| ¡|_|jdkr| ¡|_|jdvrd}n |jdvrd}n|j}| ¡|_|S)Nr\©Z COMPUTATIONALÚCOMPÚBINARYr}©zCOMPUTATIONAL-3rzPACKED-DECIMALrr_)rÚusagerrr r€Ós      zCpyParser.usagecCs`|jdkr | ¡|_| ¡g}| ¡|_|j|jvr+| |j¡| ¡|_|j|jvsd |¡S)Nr\r3)r^r]rrMrR)rZlitrrr Úvalueâs        þ zCpyParser.valuecCs(d}|D] }|||kr|}|Sq|Srqr)rZ list_dictÚkeyrÚresultrSrrr Ú filter_dictís ýzCpyParser.filter_dictccs |V|d7}q)NTr8r)rÚseedrrr Úseq_numös €þzCpyParser.seq_numcCs |j ¡Srq)Ú tokenizerÚgetTokenrrrr r]ûs zCpyParser.nextTokenc CsÒ||_| ¡|_| d¡|_| d¡|_d|_g|_i|_d|_ d|_ d|_ d|_ |jr[d\}}}d\}}i}i}i} |j  ¡rJ|j}| ¡|_ntd|jƒ‚|j|jvr_d t|jƒ¡}n|jdkrmd t|jƒ¡}n|j}| ¡|_|jr9|jdkr€q9|jd krŠ| ¡n¬|jd kr”| ¡n¢|jd vrŸ| ¡|_n—|jd vr©| ¡n|jd kr³| ¡}nƒ|jdvr½| ¡}ny|jdkrÇ| ¡}no|jdkrÑ| ¡ne|jdkrÛ| ¡n[|jdvrå| ¡nQ|jdkrï| ¡nG|jdkrù| ¡}n=|jdkr| ¡}n2|jdvrd}| ¡|_n$|jdvr d}| ¡|_n|jdvr.d}| ¡|_ntd |j¡ƒ‚|jsyd} d} |dvrH| ¡|_q)|| d<|| d <|j rtt|ƒt|j ƒkrhd!|jd"d#<d!} n t|ƒt|j ƒkrtd!} |r‰|d$| d$<|d%| d%<|d&| d&<|r©|| d'<|  |jd |¡} | r¤t| d(ƒ|_q°t!d)|ƒ‚|j|j |_|r|d*| d*<|d+| d+<|d,| d-<|d+r|d.| d.<|d/| d/<|d0| d0<|r || d1<|dkró| "|d,¡| d2<q|dkr| #|d,¡| d2<q|d,| d2<q|d,| d2<n|d,| d2<|j| d(<|r$|| d3<||_ |r0| d2|_ nd|_ |j|j |_ |j |j krE|j |_ |j $| ¡| |jt|jƒ<| ¡|_|js-|jd %d4|j i¡|jS)5Nédr+)rDrDrD)rDrDz Invalid Token for Level Number :z FILLER-X-{}ZFILLERrrr)rr )r r ZOCCURS>rr rrr>rrrrr)rz DISPLAY-1rr|r}rrz{!r} unrecognizedF)Z88Z66ÚlevelÚ data_nameTr@ÚgrouprirjrkrrÚoffsetzRedefines data name not found :rKrFr%Z disp_lengthrHrGrIr€Zstorage_lengthrÚ lrecl_max)&r‡r]r^r†ZseqnumZlinenumrZ parse_outZ parse_dictZ prev_sizeZ prev_levelÚlreclrŽÚ isnumericrPrrOrNr`rcrernrKrrrtrwrvr{r€rrQr#r„rsr&r*rMÚupdate) rr‡rŠr‹rrr€rZ occurs_dictZpic_dictZ item_dictZlevel_upZ level_downZfil_dictrrr Úparseþsü                                           Ø*                    ñzCpyParser.parseN)Ú__name__Ú __module__Ú __qualname__r!r&r*r[rKr`rcrernrmrlrrrtrwrvr{r€rr„r†r]r’rrrr rs. 4        rN)rrrrr Ús