a É@»bTã@sddlZGdd„dƒZdS)éNc@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 úT/Users/arunkse/Documents/Data/MyWork/GitHubRepos/mf-unlock-cobdata/src/cpy_parser.pyÚ__init__szCpyParser.__init__cCst|ddƒS)Né)Úint©rÚlengthr r r!Ú comp3_sizeszCpyParser.comp3_sizecCs |dkr dS|dkrdSdSdS)Nér#é ér r%r r r!Ú comp_sizes zCpyParser.comp_sizec Csg}d\}}}}t|ƒ}|D]œ}|dvrB| |¡|r@|d7}q|dkrxt|ƒ} | dkshJd |¡ƒ‚| d¡d}q|d kr®t|ƒ} | d ksžJd |¡ƒ‚| d ¡d}q|d kr^d } z*|D] }|dkrÒqäd| t|ƒ} qÂWn4ty} ztd |¡ƒ‚WYd} ~ n d} ~ 00|dks4Jd |¡ƒ‚| | d|d¡|rº|| d7}q|dkrnd}q|dkr‚|d7}q|dkr’d}q|dkr¬d}| d¡qtd |¡ƒ‚qd |¡} d| vpàd| vpàd| v} t| | t | ƒ|||||dS)N)rrFN) ÚAÚBÚXÚZÚ9Ú0ú/ú,ú+ú-Ú*ú$éÚDr-zpicture error in {0!r}ZDBTÚCÚRZCRú(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ÚoutrFrGrHrIZ char_iterÚcZncZirptÚerDZalphar r r!Úpicture_parser sV       $       ÿzCpyParser.picture_parsercCs8| ¡|_|jdkr| ¡|_|j}| ¡|_| |¡S)NÚIS)Ú nextTokenÚtokenrX)rrTr r r!rJTs     zCpyParser.picturecCs6| ¡|_|jdkr| ¡|_|jdvr2| ¡|_dS)NZWHEN>rrr©rZr[rr r r!Ú blankWhenZero]s     zCpyParser.blankWhenZerocCs\| ¡|_|jdkr| ¡|_|jdkr2| ¡|_|j dd¡rX|j dd¡rX| ¡|_dS)NrrYr.ZYY)rZr[Ú startswithÚendswithrr r r!Ú dateFormates     zCpyParser.dateFormatcCs"| ¡|_|jdkr| ¡|_dS)NÚRIGHTr\rr r r!Ú justifiedns  zCpyParser.justifiedcCsf| ¡}|dkr| d¡S| ¡|_|jdkr8| |¡S|jdkrL| ¡|_| ¡t||ddSdS)zParse an OCCURS clause.ZTOÚ1ÚTIMESN©Ú occurs_minÚ occurs_maxÚ depending_on)rZÚoccurs_depending_onr[Ú occurs_cruftrR)rÚoccursr r r!rkts      zCpyParser.occurscCs˜|jdvr| ¡|_|jdkr(| ¡|_|jdkr<| ¡|_|j|jvrT| ¡|_q<|jdkrh| ¡|_|jdkr|| ¡|_|j|jvr”| ¡|_q|dS)N>Z DESCENDINGZ ASCENDINGZKEYrYZINDEXEDZBY)r[rZrrr r r!rj†s             zCpyParser.occurs_cruftcCsˆ| ¡|_|j}|}t|ƒ}| ¡|_|jdkr:| ¡|_|jdkrN| ¡|_|jdkrb| ¡|_|j}| ¡|_| ¡t|||dS)z1Parse the [Occurs n TO] m Times Depending On namerdZ DEPENDINGZONre)rZr[r$rjrR)rÚlowerÚupperrfrgrhr r r!ri™s         zCpyParser.occurs_depending_oncCs| ¡}| ¡|_|S©Nr\)rZredefr r r!Ú redefines¬s zCpyParser.redefinescCs<| ¡}| ¡|_|jdvr0t|jƒ}| ¡|_tdƒ‚dS)N>ZTHROUGHZTHRUzRenames clause)rZr[rMZlextÚ Exception)rZren1Zren2r r r!Úrenames²s     zCpyParser.renamescCs<| ¡|_|jdkr| ¡|_|jdvr0| ¡tdƒ‚dS)NrY)rrú Sign clause)rZr[Úsign2rprr r r!Úsign1»s     zCpyParser.sign1cCs>| ¡|_|jdkr| ¡|_|jdkr2| ¡|_tdƒ‚dS)Nrrrr©rZr[rprr r r!rsÄs      zCpyParser.sign2cCs>| ¡|_|jdkr| ¡|_|jdkr2| ¡|_tdƒ‚dS)Nr razSynchronized clauserurr r r!Ú synchronizedÌs      zCpyParser.synchronizedcCsR| ¡|_|jdkr| ¡|_|jdvr.d}n|jdvr>d}n|j}| ¡|_|S)NrY©Z COMPUTATIONALÚCOMPZBINARYrx©zCOMPUTATIONAL-3rzPACKED-DECIMALrr\)rÚusager r r!rzÕs      zCpyParser.usagecCsV|jdkr| ¡|_| ¡g}| ¡|_|j|jvrL| |j¡| ¡|_q(d |¡S)NrYr3)r[rZrrLrQ)rZlitr r r!Úvalueäs       zCpyParser.valuecCs&d}|D]}|||kr|}q"q|Srnr )rZ list_dictÚkeyr{ÚresultrRr r r!Ú filter_dictïs  zCpyParser.filter_dictccs|V|d7}qdS)Nr8r )rZseedr r r!Úseq_numøszCpyParser.seq_numcCs |j ¡Srn)Ú tokenizerÚgetTokenrr r r!rZýszCpyParser.nextTokenc Cs ||_| ¡|_| d¡|_| d¡|_d|_g|_i|_d|_ d|_ d|_ d|_ d|_ d|_d|_d|_d|_|jršd\}}}d\}}i}i}i} |j ¡r²|j}| ¡|_n td|jƒ‚|j|jvrÜd t|jƒ¡}n,|jdkrød t|jƒ¡}n|j}| ¡|_|jr²|jd kr q²|jd kr8| ¡q|jd krP| ¡q|jd vrj| ¡|_q|jd vr‚| ¡q|jdkrš| ¡}q|jdvr°| ¡}nþ|jdkrÆ| ¡}nè|jdkrÜ| ¡nÒ|jdkrò| ¡n¼|jdvr| ¡n¦|jdkr|  ¡n|jdkr4| !¡}nz|jdkrJ| "¡}nd|jdvrfd}| ¡|_nH|jdvr‚d}| ¡|_n,|jdvržd}| ¡|_nt#d |j¡ƒ‚qd} d} |dvrÐ| ¡|_qp|| d<|| d <|j r(t$|ƒt$|j ƒkrd!|jd"d#<d!} nt$|ƒt$|j ƒkr(d!} |r‚|j rBt%d$| |ƒ|d%| d%<|d&| d&<|d'| d'<d| d(<d!|_ t$|ƒ|_nÔ|j rV|jt$|ƒkrHd&|j|jd) vrÈd|j|jd) d&<t$|j|jd) d(ƒt$|j|jd) d&ƒ|j|jd) d(<t&d)t$|j|jd) d&ƒƒD]} t't&|jƒƒD]ò} t|jƒ}t( (|j| d) ¡}d(|j|d)vrŒd|j|d)d(<d(|vr |d(|_ d*|vrÔ|j|d)d+|j|d)d(|d+<n|j|d)d+|d+<d, |d t$| d)ƒt$|j|jd) d&ƒ¡|d <|d+|_||j|<qBq.d|_ d|_n|jd)7_|r–|| d*<| )|jd |¡}|rŠt$|d+ƒ|_n t*d-|ƒ‚n|j|j |_|rê|d.| d.<|d/| d/<|d0| d1<|d/rp|d2| d2<|d3| d3<|d4| d4<|jr |j}|rb|| d5<|dkr6| +|d0¡| d(<n*|dkrT| ,|d0¡| d(<n |d0| d(<n |d0| d(<n |d0| d(<|j rd(|j|j vrªd|j|j d(<|r|jt$|ƒkrt$| d(ƒt$| d&ƒ| d(<d|_ d|_n.|r||_t$|ƒ|_n|jt$|ƒkrd|_|j| d+<|r0|| d6<||_ |rH| d(|_ nd|_ |j|j |_ |j |j krr|j |_ |j -| ¡| |jt|jƒ<| ¡|_qp|j rtd&|j|jd) vrÐd|j|jd) d&<t$|j|jd) d(ƒt$|j|jd) d&ƒ|j|jd) d(<t&d)t$|j|jd) d&ƒƒD].} t't&|jƒƒD]} t|jƒ}t( (|j| d) ¡}d(|j|d)vr–d|j|d)d(<d(|vrª|d(|_ d*|vrÞ|j|d)d+|j|d)d(|d+<n|j|d)d+|d+<d, |d t$| d)ƒt$|j|jd) d&ƒ¡|d <|d+|_||j|<|j|j |_ |j |j krJ|j |_ qJq6d|_ d|_|jd .d7|j i¡|jS)8NédrF)rCrCrC)rCrCz Invalid Token for Level Number :z FILLER-X-{}ZFILLERrrr)r r )r r ZOCCURS>rrrrr>rrrrr)rz DISPLAY-1rrwrxryrz{!r} unrecognized)Z88Z66ÚlevelÚ data_nameTr?ÚgroupzNested occurs rfrgrhZstorage_lengthr8roÚoffsetz{}-{}-{}zRedefines data name not found :rJrEr&Z disp_lengthrGrFrHrzr{Ú lrecl_max)/r€rZr[rZseqnumZlinenumr†Z parse_outZ parse_dictZ prev_sizeZ prev_levelÚlreclr‡Z occurs_flgZ occurs_levelZ occurs_fieldsZ group_usageZgroup_usage_levelÚ isnumericrOrrNrMr]r`rbrkrJrorqrtrsrvrzr{rPr$ÚprintÚrangeÚreversedÚcopyr~rpr'r+rLÚupdate)rr€rƒr„rorzr{Z occurs_dictZpic_dictZ item_dictZlevel_upZ level_downÚxÚyZ next_linenumZ temp_dictZfil_dictr r r!Úparses~                                                F&    *4                 F&    *4  zCpyParser.parseN)Ú__name__Ú __module__Ú __qualname__r"r'r+rXrJr]r`rbrkrjrirorqrtrsrvrzr{r~rrZr‘r r r r!rs, 4       r)rrr r r r!Ús