Changeset 714 for proto/JSON


Ignore:
Timestamp:
Nov 19, 2010, 5:26:42 PM (8 years ago)
Author:
ksherdy
Message:

Update character set defs.

Location:
proto/JSON
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • proto/JSON/QA/pass/number.json

    r700 r714  
    1 [0.5,98.6,99.44,1066,1e1,0.1e1,1e-1,1e00,2e+00,2e-00,1234567890,-9876.543210,0.123456789e-12,1.234567890E+34,23456789012E66
     1[0.5,98.6,99.44,1066,1e1,0.1e1,1e-1,1e00,2e+00,2e-00,1234567890,-9876.543210,0.123456789e-12,1.234567890E+34,23456789012E66]
  • proto/JSON/byteclass.py

    r713 r714  
    7171        WS = 0
    7272       
    73         # true
     73        true = 0
    7474        t = 0
    7575        r = 0
     
    7777        e = 0
    7878       
    79         # false
     79        false = 0
    8080        f = 0
    8181        a = 0
     
    8484#       e = 0
    8585       
    86         # null
     86        null = 0
    8787        n = 0
    8888#       u = 0
    8989#       l = 0
    90 #       l = 0
    91 
    92         ValueFollowSet = 0
    93         StringFollowSet = 0     
     90#       l = 0   
    9491
    9592class control_streams ():
     
    183180        temp43 = (temp29 | temp15);
    184181        Lex.PlusMinus = (temp25 & temp43);
    185         temp44 = (temp22 &~ temp5);
    186         Lex.DQuote = (temp25 & temp44);
     182        temp44 = (Lex.Minus | Lex.Digit0_9);
     183        temp45 = (temp44 | Lex.DecimalPoint);
     184        temp46 = (temp26 &~ temp3);
     185        temp47 = (temp46 & temp40);
     186        temp48 = (temp45 | temp47);
     187        temp49 = (temp26 & temp1);
     188        temp50 = (temp49 & temp40);
     189        temp51 = (temp48 | temp50);
     190        temp52 = (temp25 & temp29);
     191        temp53 = (temp51 | temp52);
     192        Lex.Number = (temp53 | Lex.Minus);
     193        temp54 = (temp22 &~ temp5);
     194        Lex.DQuote = (temp25 & temp54);
    187195        Lex.RSolidus = (temp33 & temp31);
    188196        Lex.u = (temp27 & temp40);
    189         temp45 = (Lex.DQuote | Lex.RSolidus);
    190         temp46 = (temp13 & temp28);
    191         temp47 = (temp25 & temp46);
    192         temp48 = (temp45 | temp47);
    193         temp49 = (temp26 & temp1);
    194         temp50 = (temp49 & temp44);
    195         temp51 = (temp48 | temp50);
    196         temp52 = (temp16 & temp22);
    197         temp53 = (temp49 & temp52);
    198         temp54 = (temp51 | temp53);
    199         temp55 = (temp49 & temp39);
    200         temp56 = (temp54 | temp55);
    201         temp57 = (temp27 & temp44);
    202         temp58 = (temp56 | temp57);
    203         temp59 = (temp27 & temp17);
     197        temp55 = (Lex.DQuote | Lex.RSolidus);
     198        temp56 = (temp13 & temp28);
     199        temp57 = (temp25 & temp56);
     200        temp58 = (temp55 | temp57);
     201        temp59 = (temp49 & temp54);
    204202        temp60 = (temp58 | temp59);
    205         Lex.Escape = (temp60 | Lex.u);
    206         temp61 = (temp49 &~ bit[4]);
    207         temp62 = (~temp28);
    208         temp63 = ((bit[5] & temp62)|(~(bit[5]) & temp8));
    209         temp64 = (temp61 & temp63);
    210         temp65 = (Lex.Digit0_9 | temp64);
    211         temp66 = (temp26 &~ temp3);
    212         temp67 = (temp66 &~ bit[4]);
    213         temp68 = (temp67 & temp63);
    214         Lex.HexDigit = (temp65 | temp68);
    215         temp69 = (temp15 | temp23);
    216         temp70 = (temp69 | temp24);
    217         temp71 = (temp70 &~ temp20);
    218         Lex.WS = (temp71 | Ctrl.SP);
     203        temp61 = (temp16 & temp22);
     204        temp62 = (temp49 & temp61);
     205        temp63 = (temp60 | temp62);
     206        temp64 = (temp49 & temp39);
     207        temp65 = (temp63 | temp64);
     208        temp66 = (temp27 & temp54);
     209        temp67 = (temp65 | temp66);
     210        temp68 = (temp27 & temp17);
     211        temp69 = (temp67 | temp68);
     212        Lex.Escape = (temp69 | Lex.u);
     213        temp70 = (temp49 &~ bit[4]);
     214        temp71 = (~temp28);
     215        temp72 = ((bit[5] & temp71)|(~(bit[5]) & temp8));
     216        temp73 = (temp70 & temp72);
     217        temp74 = (Lex.Digit0_9 | temp73);
     218        temp75 = (temp46 &~ bit[4]);
     219        temp76 = (temp75 & temp72);
     220        Lex.HexDigit = (temp74 | temp76);
     221        temp77 = (temp15 | temp23);
     222        temp78 = (temp77 | temp24);
     223        temp79 = (temp78 &~ temp20);
     224        Lex.WS = (temp79 | Ctrl.SP);
    219225        Lex.t = (temp27 & temp17);
    220         Lex.r = (temp27 & temp44);
     226        Lex.r = (temp27 & temp54);
    221227        Lex.e = (temp49 & temp40);
    222         Lex.f = (temp49 & temp52);
    223         temp72 = (temp14 &~ temp5);
    224         Lex.a = (temp49 & temp72);
     228        temp80 = (temp17 | temp54);
     229        temp81 = (temp80 | temp40);
     230        temp82 = (temp27 & temp81);
     231        Lex.True = (temp82 | Lex.e);
     232        Lex.f = (temp49 & temp61);
     233        temp83 = (temp14 &~ temp5);
     234        Lex.a = (temp49 & temp83);
    225235        Lex.l = (temp49 & temp31);
    226         temp73 = (temp28 &~ temp5);
    227         Lex.s = (temp27 & temp73);
     236        temp84 = (temp28 &~ temp5);
     237        Lex.s = (temp27 & temp84);
     238        temp85 = (temp61 | temp83);
     239        temp86 = (temp85 | temp31);
     240        temp87 = (temp49 & temp86);
     241        temp88 = (temp87 | Lex.s);
     242        Lex.False = (temp88 | Lex.e);
    228243        Lex.n = (temp49 & temp39);
    229         temp74 = (temp26 & bit[3]);
    230         temp75 = (temp29 & temp74);
    231         temp76 = (temp75 | Lex.Minus);
    232         temp77 = (temp76 | Lex.Digit0_9);
    233         temp78 = (temp77 | Lex.DQuote);
    234         temp79 = (temp78 | Lex.t);
    235         temp80 = (temp79 | Lex.f);
    236         Lex.ValueStartsSet = (temp80 | Lex.n);
    237         temp81 = (Lex.RSquareBracket | Lex.Comma);
    238         Lex.ValueFollowsSet = (temp81 | Lex.RCurlyBrace);
     244        temp89 = (Lex.n | Lex.u);
     245        Lex.Null = (temp89 | Lex.l);
    239246        return (u8,Lex,Ctrl)
  • proto/JSON/json_prototype.py

    r713 r714  
    2121import sys
    2222
    23 debug = True
     23debug = False
    2424filename = "json_prototype.py"
    2525
     
    133133        return
    134134
    135 
    136 #TODO - Review this function.
    137 def atom_starts(Lex,StringMask,EscapeChars):
     135def atom_starts(Lex,StringSpans):
    138136        r"""
    139137        This function returns multi-cursor start positions for each JSON value type.
    140138       
    141139        Define JSON atoms as 'String', 'Number', 'true', 'false', and 'null' types.
    142         """
    143         global lgth
    144         StringEscapeCharMask = (StringMask | EscapeChars)               
    145        
    146         ObjectStarts = Lex.LCurlyBrace &~ StringEscapeCharMask
    147         ArrayStarts = Lex.LSquareBracket &~ StringEscapeCharMask
     140       
     141        Error cases are postponed for the post-processing stage as expect() cases in
     142        a recursive descent parser.
     143        """
     144        global lgth
     145       
     146        AtomSpans = (Lex.True | Lex.False | Lex.Null | Lex.Number | StringSpans)
     147        AtomStarts = AtomSpans &~ bitutil.Advance(AtomSpans)
    148148               
    149         Comma = Lex.Comma &~ StringEscapeCharMask
    150         Colon = Lex.Colon &~ StringEscapeCharMask
    151        
    152         NonStringSyncPoint = (ArrayStarts | Comma | Colon)
    153         StringSyncPoint = (ObjectStarts | NonStringSyncPoint)
    154        
    155         StringSyncPointFollows = bitutil.Advance(StringSyncPoint)
    156         StringStarts = (StringSyncPointFollows | bitutil.ScanThru(StringSyncPointFollows, Lex.WS)) & (Lex.DQuote &~ StringEscapeCharMask)
    157 
    158         NonStringSyncPointFollows = bitutil.Advance(NonStringSyncPoint)
    159         ValueCursors = (StringSyncPointFollows | bitutil.ScanThru(StringSyncPointFollows,Lex.WS))
    160        
    161         NumberStarts = ValueCursors & ((Lex.Minus|Lex.Digit0_9) &~ StringEscapeCharMask)
    162         TrueStarts = ValueCursors & (Lex.t &~ StringEscapeCharMask)
    163         FalseStarts = ValueCursors & (Lex.f &~ StringEscapeCharMask)
    164         NullStarts = ValueCursors & (Lex.n &~ StringEscapeCharMask)
    165         ValueStarts = ValueCursors & (Lex.ValueStartsSet &~ StringEscapeCharMask)
     149        StringStarts = AtomStarts & (Lex.DQuote)       
     150        NumberStarts = AtomStarts & (Lex.Minus|Lex.Digit0_9)
     151        TrueStarts = AtomStarts & (Lex.t)
     152        FalseStarts = AtomStarts & (Lex.f)
     153        NullStarts = AtomStarts & (Lex.n)
    166154
    167155        if debug:
    168156                bitutil.print_aligned_streams([('Input Data', u8data),
    169                               ('StringEscapeCharMask', bitutil.bitstream2string(StringEscapeCharMask, lgth)),
    170                               ('ObjectStarts', bitutil.bitstream2string(ObjectStarts, lgth)),
    171                               ('ArrayStarts', bitutil.bitstream2string(ArrayStarts, lgth))])
    172        
    173         return (StringStarts, NumberStarts, TrueStarts, FalseStarts, NullStarts, ValueStarts)
     157                              ('AtomSpans', bitutil.bitstream2string(AtomSpans, lgth)),
     158                              ('AtomStarts', bitutil.bitstream2string(AtomStarts, lgth)),
     159                              ('StringSpans', bitutil.bitstream2string(StringSpans, lgth)),
     160                              ('StringStarts', bitutil.bitstream2string(StringStarts, lgth)),
     161                              ('Lex.True', bitutil.bitstream2string(Lex.True, lgth)),
     162                              ('TrueStarts', bitutil.bitstream2string(TrueStarts, lgth)),
     163                              ('Lex.False', bitutil.bitstream2string(Lex.False, lgth)),
     164                              ('FalseStarts', bitutil.bitstream2string(FalseStarts, lgth)),
     165                              ('Lex.Null', bitutil.bitstream2string(Lex.Null, lgth)),
     166                              ('NullStarts', bitutil.bitstream2string(NullStarts, lgth)),
     167                              ('Lex.Number', bitutil.bitstream2string(Lex.Number, lgth)),
     168                              ('NumberStarts', bitutil.bitstream2string(NumberStarts, lgth))])
     169
     170        return (StringStarts, NumberStarts, TrueStarts, FalseStarts, NullStarts)
    174171
    175172
     
    187184        ParityMask = parallel_prefix_parity(UnescapedDQuotes) & EOF_mask # TODO - Solve EOF_mask problem
    188185        StringMask = ParityMask & bitutil.Advance(ParityMask)   
    189        
    190         (StringStarts, NumberStarts,TrueStarts, FalseStarts, NullStarts, ValueStarts) = atom_starts(Lex, StringMask, EscapeChars)
     186        StringSpans = StringMask | UnescapedDQuotes
     187       
     188        (StringStarts, NumberStarts,TrueStarts, FalseStarts, NullStarts) = atom_starts(Lex, StringSpans)
    191189        bitutil.print_aligned_streams([('Input Data', u8data),
    192190                              ('StringStarts', bitutil.bitstream2string(StringStarts, lgth)),
     
    286284       
    287285        Errors = 0
    288         M0 = Starts                                     # Initialize marker stream     
     286        M0 = Starts                                             # Initialize marker stream     
    289287       
    290288        M1 = bitutil.ScanThru(M0, Lex.Minus & M0)               # ? Optional character class [-]
    291289        E1 = M1 &~(Lex.Zero|Lex.Digit1_9)
     290        M1 = M1 &~ E1                                           # Remove cursors at error positions so as to report a single error position
    292291
    293292        M1a = M1 & Lex.Zero                                     # Split
    294         M1b = M1 & Lex.Digit0_9                         
     293        M1b = M1 & Lex.Digit1_9                         
    295294        M2a = bitutil.Advance(M1a)
    296295        M2b = bitutil.Advance(M1b)
    297296        M3b = bitutil.ScanThru(M2b,Lex.Digit0_9)
    298         M4 = M2a | M3b                                          # Join
     297        M4 =  M2a | M3b                                         # Join
    299298       
    300299        M4a = M4 &~(Lex.DecimalPoint)                           # Split
     
    302301        M5b = bitutil.Advance(M4b)
    303302        E5b = M5b &~(Lex.Digit0_9)                              # + [0-9]+
     303        M5b = M5b &~E5b                                         # Remove cursors at error positions so as to report a single error position
     304       
    304305        M6 = bitutil.ScanThru(M5b,Lex.Digit0_9)
    305306        M7 = M4a | M6                                           # Join
    306307       
    307308        M7a = M7 &~(Lex.Ee)                                     # Split
    308         # NOTE - Number Follow Set logic occurs at the final step after the final cursor join
    309         # E7a = M7a &~(Lex.NumberFollowSet)
    310309        M7b = M7 &(Lex.Ee)
    311310        M8b = bitutil.Advance(M7b)
    312311        M9b = bitutil.ScanThru(M8b, Lex.PlusMinus & M8b)        # ? Optional character class [+-]               
    313312        E9b  = M9b &~(Lex.Digit0_9)                             # + [0-9]+
     313        M9b = M9b &~ E9b                                        # Remove cursors at error positions so as to report a single error position
    314314        M10b = bitutil.ScanThru(M9b,Lex.Digit0_9)
    315         # NOTE - Number Follow Set logic occurs at the final step after the final cursor join
    316         # E10b = M10b &~(Lex.NumberFollowSet)
    317         M11 = M7a | M10b                                        # Join
    318 
    319         ValueFollowSetErrors = M11 &~ (Lex.ValueFollowsSet | Lex.WS)
    320         ValueFollowSetErrors |= M11 &~ EOF_mask
    321        
    322         Errors = E1 | E5b | E9b | ValueFollowSetErrors # E7a | E10b
     315
     316        M11 = M7a | M10b                                       
     317       
     318        # NOTE - Number Follow Set logic occurs at the final step after the final cursor join   
     319        NumberFollowErrors = (M7a | M10b) &~(Lex.RSquareBracket | Lex.RCurlyBrace | Lex.Comma | Lex.WS)
     320       
     321        Errors = E1 | E5b | E9b | NumberFollowErrors
    323322       
    324323        NumberSpans = M11 - Starts
     
    348347                              ('M10b', bitutil.bitstream2string(M10b, lgth)),
    349348                              #('E10b', bitutil.bitstream2string(E10b, lgth)),
    350                               ('M11', bitutil.bitstream2string(M11, lgth)),
     349                              ('M11', bitutil.bitstream2string(M11, lgth+1)),
    351350                              ('Starts', bitutil.bitstream2string(Starts, lgth)),
    352351                              ('NumberSpans', bitutil.bitstream2string(NumberSpans, lgth)),
     
    366365        Ee          : _______________________1____1______________________1_______________
    367366        PlusMinus   : _1_11_1_____1___1___1____1_______1_______1______1_____1____________
    368         NumberSpans : _11_11_11__111_1111_1111_1111_1_111111111__11111__1111__1_________1
    369         Errors      : __1_1__1__1___1____1___11___11_1_________1______1_____1__1__________
     367        NumberSpans : _11_11_11___11__1111_1111_1111___11111111__11111__1111__1__________
     368        Errors      : __1_1__1__1___1____1___1____1__1_________1______1_____1__1__________
    370369        EOF_Mask    : 1111111111111111111111111111111111111111111111111111111111111111111_
    371370        <BLANKLINE>
     
    394393        Ee          : __________________________
    395394        PlusMinus   : ___________________1__1___
    396         NumberSpans : _1_____111111_1_1_111_11_1
     395        NumberSpans : _1______11111_1_1__11_11__
    397396        Errors      : __1______________1______1__
    398397        EOF_Mask    : 11111111111111111111111111_
     
    410409        ParityMask = parallel_prefix_parity(UnescapedDQuotes) & EOF_mask
    411410        StringMask = ParityMask & bitutil.Advance(ParityMask)   
    412        
    413         (StringStarts, NumberStarts, TrueStarts, FalseStarts, NullStarts, ValueStarts) = atom_starts(Lex, StringMask, EscapeChars)     
     411        StringSpans = StringMask | UnescapedDQuotes
     412       
     413        (StringStarts, NumberStarts, TrueStarts, FalseStarts, NullStarts) = atom_starts(Lex, StringSpans)       
    414414       
    415415        (Errors, NumberSpans) = validate_number(NumberStarts, Lex, EOF_mask)
     
    530530        ParityMask = parallel_prefix_parity(UnescapedDQuotes) & EOF_mask # TODO - Solve parity EOF_mask problem
    531531        StringMask = ParityMask & bitutil.Advance(ParityMask)
    532 
    533         (StringStarts, NumberStarts, TrueStarts, FalseStarts, NullStarts, ValueStarts) = atom_starts(Lex, StringMask, EscapeChars)                             
     532        StringSpans = StringMask | UnescapedDQuotes
     533
     534        (StringStarts, NumberStarts, TrueStarts, FalseStarts, NullStarts) = atom_starts(Lex, StringSpans)                               
    534535       
    535536        (Errors, StringSpans) = validate_string(StringStarts, Lex,Ctrl,StringMask,EscapeChars,UnescapedDQuotes)
     
    559560        ParityMask = parallel_prefix_parity(UnescapedDQuotes) & EOF_mask # TODO - Solve parity EOF_mask problem
    560561        StringMask = ParityMask & bitutil.Advance(ParityMask)   
    561        
    562         (StringStarts, NumberStarts, TrueStarts, FalseStarts, NullStarts, ValueStarts) = atom_starts(Lex, StringMask, EscapeChars)
     562        StringSpans = StringMask | UnescapedDQuotes
     563       
     564        (StringStarts, NumberStarts, TrueStarts, FalseStarts, NullStarts) = atom_starts(Lex, StringSpans)
    563565       
    564566        (StringErrors, StringSpans) = validate_string(StringStarts, Lex, Ctrl, StringMask, EscapeChars, UnescapedDQuotes)
     
    582584        lgth = len(u8data)
    583585
    584         (StringStarts, StringSpans, StringErrors, 
     586        (StringStarts, StringSpans, StringErrors,
    585587        NumberStarts, NumberSpans, NumberErrors,
    586588        TrueStarts, TrueSpans, TrueErrors,
     
    619621#       demo_parse_escape(u8data)
    620622#       demo_parallel_prefix_parity(u8data)
    621 #       demo_atom_starts(u8data)
     623        demo_atom_starts(u8data)
    622624#       demo_validate_number(u8data)
    623625#       demo_validate_string(u8data)
    624         demo_validate_json_atoms(u8data)
     626#       demo_validate_json_atoms(u8data)
Note: See TracChangeset for help on using the changeset viewer.