Changeset 739 for proto/JSON


Ignore:
Timestamp:
Nov 29, 2010, 11:06:07 PM (8 years ago)
Author:
ksherdy
Message:

Remove '& EOF_mask' on parallel_prefix_parity method calls.

Location:
proto/JSON
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • proto/JSON/json_compilable.py

    r672 r739  
    11# -*- coding: utf-8 -*-
     2#
     3# json_compilable.py
     4#
     5# Parallel JSON validation.
     6#
     7# RFC 4627 - JavaScript Object Notation (JSON) 
     8# RFC 5234 - Augmented BNF for Syntax Specifications: ABNF
     9#
     10# Ken Herdy
     11# November 26, 2010
     12#
     13       
    214def main(u8data):
     15        # Transpose to parallel bit streams and prepare an EOF mask.
     16        (bit, EOF_mask) = bitutil.transpose_streams(u8data)
    317
    4   return
     18        # Classify bytes for UTF-8 processing, whitespace control processing, and JSON lexical analysis.       
     19        u8.unibyte = (~bit[0]);
     20        u8.prefix = (bit[0] & bit[1]);
     21        u8.prefix2 = (u8.prefix &~ bit[2]);
     22        temp1 = (bit[2] &~ bit[3]);
     23        u8.prefix3 = (u8.prefix & temp1);
     24        temp2 = (bit[2] & bit[3]);
     25        u8.prefix4 = (u8.prefix & temp2);
     26        u8.suffix = (bit[0] &~ bit[1]);
     27        temp3 = (bit[2] | bit[3]);
     28        temp4 = (u8.prefix &~ temp3);
     29        temp5 = (bit[4] | bit[5]);
     30        temp6 = (temp5 | bit[6]);
     31        temp7 = (temp4 &~ temp6);
     32        temp8 = (bit[6] | bit[7]);
     33        temp9 = (bit[5] & temp8);
     34        temp10 = (bit[4] | temp9);
     35        temp11 = (u8.prefix4 & temp10);
     36        u8.badprefix = (temp7 | temp11);
     37        temp12 = (temp5 | temp8);
     38        u8.xE0 = (u8.prefix3 &~ temp12);
     39        temp13 = (bit[4] & bit[5]);
     40        temp14 = (bit[7] &~ bit[6]);
     41        temp15 = (temp13 & temp14);
     42        u8.xED = (u8.prefix3 & temp15);
     43        u8.xF0 = (u8.prefix4 &~ temp12);
     44        temp16 = (bit[5] &~ bit[4]);
     45        temp17 = (temp16 &~ temp8);
     46        u8.xF4 = (u8.prefix4 & temp17);
     47        u8.xA0_xBF = (u8.suffix & bit[2]);
     48        u8.x80_x9F = (u8.suffix &~ bit[2]);
     49        u8.x90_xBF = (u8.suffix & temp3);
     50        u8.x80_x8F = (u8.suffix &~ temp3);
     51        temp18 = (bit[0] | bit[1]);
     52        temp19 = (temp18 | bit[2]);
     53        Ctrl.x00_x1F = (~temp19);
     54        temp20 = (temp18 | temp3);
     55        Ctrl.CR = (temp15 &~ temp20);
     56        temp21 = (bit[4] &~ bit[5]);
     57        temp22 = (bit[6] &~ bit[7]);
     58        temp23 = (temp21 & temp22);
     59        Ctrl.LF = (temp23 &~ temp20);
     60        temp24 = (temp21 & temp14);
     61        Ctrl.HT = (temp24 &~ temp20);
     62        temp25 = (temp1 &~ temp18);
     63        Ctrl.SP = (temp25 &~ temp12);
     64        temp26 = (bit[1] &~ bit[0]);
     65        temp27 = (temp26 & temp2);
     66        temp28 = (bit[6] & bit[7]);
     67        temp29 = (temp21 & temp28);
     68        Lex.LCurlyBrace = (temp27 & temp29);
     69        temp30 = (temp2 &~ temp18);
     70        Lex.Colon = (temp30 & temp23);
     71        temp31 = (temp13 &~ temp8);
     72        Lex.Comma = (temp25 & temp31);
     73        Lex.RCurlyBrace = (temp27 & temp15);
     74        temp32 = (bit[3] &~ bit[2]);
     75        temp33 = (temp26 & temp32);
     76        Lex.LSquareBracket = (temp33 & temp29);
     77        Lex.RSquareBracket = (temp33 & temp15);
     78        Lex.Minus = (temp25 & temp15);
     79        Lex.Zero = (temp30 &~ temp12);
     80        temp34 = (bit[5] | bit[6]);
     81        temp35 = (~temp34);
     82        temp36 = (bit[5] | temp8);
     83        temp37 = ((bit[4] & temp35)|(~(bit[4]) & temp36));
     84        Lex.Digit1_9 = (temp30 & temp37);
     85        temp38 = (bit[4] & temp34);
     86        Lex.Digit0_9 = (temp30 &~ temp38);
     87        temp39 = (temp13 & temp22);
     88        Lex.DecimalPoint = (temp25 & temp39);
     89        temp40 = (temp16 & temp14);
     90        temp41 = (temp3 &~ temp1);
     91        temp42 = (temp26 &~ temp41);
     92        Lex.Ee = (temp40 & temp42);
     93        temp43 = (temp29 | temp15);
     94        Lex.PlusMinus = (temp25 & temp43);
     95        temp44 = (Lex.Minus | Lex.Digit0_9);
     96        temp45 = (temp44 | Lex.DecimalPoint);
     97        temp46 = (temp26 &~ temp3);
     98        temp47 = (temp46 & temp40);
     99        temp48 = (temp45 | temp47);
     100        temp49 = (temp26 & temp1);
     101        temp50 = (temp49 & temp40);
     102        temp51 = (temp48 | temp50);
     103        temp52 = (temp25 & temp29);
     104        temp53 = (temp51 | temp52);
     105        Lex.Number = (temp53 | Lex.Minus);
     106        temp54 = (temp22 &~ temp5);
     107        Lex.DQuote = (temp25 & temp54);
     108        Lex.RSolidus = (temp33 & temp31);
     109        Lex.u = (temp27 & temp40);
     110        temp55 = (Lex.DQuote | Lex.RSolidus);
     111        temp56 = (temp13 & temp28);
     112        temp57 = (temp25 & temp56);
     113        temp58 = (temp55 | temp57);
     114        temp59 = (temp49 & temp54);
     115        temp60 = (temp58 | temp59);
     116        temp61 = (temp16 & temp22);
     117        temp62 = (temp49 & temp61);
     118        temp63 = (temp60 | temp62);
     119        temp64 = (temp49 & temp39);
     120        temp65 = (temp63 | temp64);
     121        temp66 = (temp27 & temp54);
     122        temp67 = (temp65 | temp66);
     123        temp68 = (temp27 & temp17);
     124        temp69 = (temp67 | temp68);
     125        Lex.Escape = (temp69 | Lex.u);
     126        temp70 = (temp49 &~ bit[4]);
     127        temp71 = (~temp28);
     128        temp72 = ((bit[5] & temp71)|(~(bit[5]) & temp8));
     129        temp73 = (temp70 & temp72);
     130        temp74 = (Lex.Digit0_9 | temp73);
     131        temp75 = (temp46 &~ bit[4]);
     132        temp76 = (temp75 & temp72);
     133        Lex.HexDigit = (temp74 | temp76);
     134        temp77 = (temp15 | temp23);
     135        temp78 = (temp77 | temp24);
     136        temp79 = (temp78 &~ temp20);
     137        Lex.WS = (temp79 | Ctrl.SP);
     138        Lex.t = (temp27 & temp17);
     139        Lex.r = (temp27 & temp54);
     140        Lex.e = (temp49 & temp40);
     141        temp80 = (temp17 | temp54);
     142        temp81 = (temp80 | temp40);
     143        temp82 = (temp27 & temp81);
     144        Lex.True = (temp82 | Lex.e);
     145        Lex.f = (temp49 & temp61);
     146        temp83 = (temp14 &~ temp5);
     147        Lex.a = (temp49 & temp83);
     148        Lex.l = (temp49 & temp31);
     149        temp84 = (temp28 &~ temp5);
     150        Lex.s = (temp27 & temp84);
     151        temp85 = (temp61 | temp83);
     152        temp86 = (temp85 | temp31);
     153        temp87 = (temp49 & temp86);
     154        temp88 = (temp87 | Lex.s);
     155        Lex.False = (temp88 | Lex.e);
     156        Lex.n = (temp49 & temp39);
     157        temp89 = (Lex.n | Lex.u);
     158        Lex.Null = (temp89 | Lex.l);
     159
     160        return (u8,Lex,Ctrl,EOF_mask)
     161
  • proto/JSON/json_prototype.py

    r718 r739  
    1919# - Conditionally validate JSON Unicode \u4HEXDIG and \u4HEXDIG\u4HEXDIG character escape sequences, (if \u escape sequence).
    2020#
    21 #
    22 #
    2321
    2422import bitutil
     
    9088        Translate to library function.
    9189       
    92         x y x XOR y
     90        x y | x XOR y
    9391        ------------
    94         0 0   0
    95         0 1   1
    96         1 0   1
    97         0 0   0
     92        0 0 | 0
     93        0 1 | 1
     94        1 0 | 1
     95        0 0 | 0
    9896
    9997        Let n = length(bitstream).
    10098
    101         Define Pk,i as the parity of the bit range [k-(k+2^i),k] for bit positions n >= k >= 1.
    102        
    103         Base Case: Pk,0 = bitstream at position k, for all k, n >= k >= 0.
     99        Define Pk,i as the parity of the bit range [k,(k+(2^i))-1] for each bit position k, 1 <= k <= n.
     100       
     101        Base Case: Pk,0 = bitstream at position k, for all k, n >= k >= 1.
    104102        Inductive Step: Pk,i+1 = (Pk,i << 2^i) XOR Pk,i.
    105103       
    106         Pk,ceil(log(n) denotes the parity of the bit position k, n >= k >= 0.
    107        
    108         bitstream[k] = 1 --> odd parity
    109         bitstream[k] = 0 --> even parity
     104        Pk,ceil(log(n) denotes the parity of the bit position k, n >= k >= 1.
     105       
     106        bitstream[k] = 1 => odd parity
     107        bitstream[k] = 0 => even parity
    110108        """
    111109        global lgth
     
    188186        UnescapedDQuotes = (Lex.DQuote &~ EscapeChars)
    189187       
    190         ParityMask = parallel_prefix_parity(UnescapedDQuotes) & EOF_mask # TODO - Solve EOF_mask problem
     188        ParityMask = parallel_prefix_parity(UnescapedDQuotes) # TODO - Solve EOF_mask problem, if final position is 1 then the final DQUOTE is not matched.
    191189        StringMask = ParityMask & bitutil.Advance(ParityMask)   
    192190        StringSpans = StringMask | UnescapedDQuotes
     
    413411        UnescapedDQuotes = (Lex.DQuote &~ EscapeChars)
    414412       
    415         ParityMask = parallel_prefix_parity(UnescapedDQuotes) & EOF_mask
     413        ParityMask = parallel_prefix_parity(UnescapedDQuotes)
    416414        StringMask = ParityMask & bitutil.Advance(ParityMask)   
    417415        StringSpans = StringMask | UnescapedDQuotes
     
    533531
    534532        # (3) Construct string interiors mask
    535         ParityMask = parallel_prefix_parity(UnescapedDQuotes) & EOF_mask # TODO - Solve parity EOF_mask problem
     533        ParityMask = parallel_prefix_parity(UnescapedDQuotes)
    536534        StringMask = ParityMask & bitutil.Advance(ParityMask)
    537535        StringSpans = StringMask | UnescapedDQuotes
     
    563561        EscapeChars = parse_escape(Lex, EOF_mask)
    564562        UnescapedDQuotes = (Lex.DQuote &~ EscapeChars)
    565         ParityMask = parallel_prefix_parity(UnescapedDQuotes) & EOF_mask # TODO - Solve parity EOF_mask problem
     563        ParityMask = parallel_prefix_parity(UnescapedDQuotes)
    566564        StringMask = ParityMask & bitutil.Advance(ParityMask)   
    567565        StringSpans = StringMask | UnescapedDQuotes
     
    625623
    626624#       demo_parse_escape(u8data)
    627 #       demo_parallel_prefix_parity(u8data)
     625        demo_parallel_prefix_parity(u8data)
    628626#       demo_atom_starts(u8data)
    629         demo_validate_number(u8data)
     627#       demo_validate_number(u8data)
    630628#       demo_validate_string(u8data)
    631629#       demo_validate_json_atoms(u8data)
Note: See TracChangeset for help on using the changeset viewer.