Ignore:
Timestamp:
Apr 27, 2013, 12:19:44 AM (6 years ago)
Author:
ksherdy
Message:

Updated grammar to handle '$'. Added lower bound / upper bound attributes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • proto/RE/input/grammar/re.scatter

    r3074 r3076  
    88// Modified:    04-25-2013              Character-by-character, any character, sos, eos, bounded repetition.
    99//                                                              Context for bounded repetition.
    10 //
     10//
     11// Todo: Verify BackSlash.
    1112
    1213types {}
     
    1516        recognizers {
    1617                Whitespace [IGNORE],
     18                Escape[CHARACTER_ESCAPE]                "\\" "[.]" 1 1,
     19                Escape[HEXADECIMAL_ESCAPE]              "\\x" "0123456789abcdefABCDEF" 2 2 16,
     20                Escape[UNICODE_ESCAPE]                  "\\u" "0123456789abcdefABCDEF" 4 4 16,
    1721                Punctuator,
    1822                Comment [IGNORE] "(?#" ")",
    19                 EndOfInput,                             // must precede Character or loops
    20                 Character [CHARACTER], 
     23                EndOfInput,                                             // must precede CHARACTER
     24                Character [CHARACTER],                  // non-punctuators     
    2125        }
    2226
    2327        tokens { 
    24                 LEFTROUND       "(",    RIGHTROUND              ")",
     28                LEFTROUND       "(",   
     29                RIGHTROUND      ")",
    2530                LEFTSQUARE      "[",     
    26                 LEFTCURLY       "{",    // non standard meta-character
     31                LEFTCURLY       "{",     
    2732
    2833                OR                      "|",
     
    3237               
    3338                ANY             ".",
    34                 SOS             "^",    // start-of-string
    35                 EOS                     "$",    // end-of-string, non-standard, '$' is standard
    36 
    37                 BACKSLASH       "\\",
     39                SOS             "^",   
     40                EOS                     "$",   
     41        //      BACKSLASH       "\\",
    3842        }
    3943}
     
    4246        recognizers {
    4347                Whitespace [IGNORE],
     48                Escape[CHARACTER_ESCAPE]                "\\" "[.]" 1 1,
     49                Escape[HEXADECIMAL_ESCAPE]              "\\x" "0123456789abcdefABCDEF" 2 2 16,
     50                Escape[UNICODE_ESCAPE]                  "\\u" "0123456789abcdefABCDEF" 4 4 16,
    4451                Punctuator,
    45                 Character [CHARACTER], // non meta-characters (punctuators)
    46                 EndOfInput,
     52                EndOfInput,                                             // must precede CHARACTER
     53                Character [CHARACTER],                  // non-punctuators
     54               
    4755        }       
    4856        tokens {
     
    5058                NOT             "^",
    5159                THROUGH         "-",
    52                 BACKSLASH       "\\",
     60        //      BACKSLASH       "\\",
    5361        }
    5462}
     
    6775}
    6876
    69 interfaces {
    70         escapable {boolean isEscape = false;}, //  boolean isHexEscape = false; boolean isUnicodeEscape = false;},
     77interfaces {
    7178        complementable {boolean isComplemented = false;},
    72         repeatable {boolean isRange = false;},
     79        repeatable{boolean isRepeated = true;},
    7380        intValued {int value = 0;},
     81        intRange{int lowerBound = 0; int upperBound = 0;},
    7482}
    7583
    7684nodes {
    77         char {escapable;} [escapedChar characterClassChar characterClassEscapedChar],
    7885        characterClass {complementable;} [],
    7986        lowerBound{intValued;} [],
    8087        upperBound{intValued;} [],
     88        repetitionIndicator{intRange;} [],
    8189        boundedRepetitionIndicator{repeatable;} [],
    8290}
     
    97105        repetition              ʉ → atom (repetitionIndicator | boundedRepetitionIndicator)?; // ↑↑!? ;
    98106       
    99         repetitionIndicator             â†’ OPTIONAL | STAR | PLUS ;
     107        repetitionIndicator →         OPTIONAL {@lowerBound = 0; @upperBound = 1;} |
     108                                                        STAR {@lowerBound = 0; @upperBound = -1;} |
     109                                                        PLUS {@lowerBound = 1; @upperBound = -1;};
    100110                                                       
    101         boundedRepetitionIndicator      → LEFTCURLY◊(boundedRepetition) (lowerBound)? (COMMA {@isRange=true;} (upperBound)? )? RIGHTCURLY◊ ;
    102        
    103         lowerBound              -> INTEGER_CONST {@value = @@value;} ;
    104         upperBound              -> INTEGER_CONST {@value = @@value;} ;                                         
     111        boundedRepetitionIndicator      → LEFTCURLY◊(boundedRepetition) (lowerBound)? (COMMA {@isRepeated=false;} (upperBound)? )? RIGHTCURLY◊ ;
     112        lowerBound              → INTEGER_CONST {@value = @@value;} ;
     113        upperBound              → INTEGER_CONST {@value = @@value;} ;                                         
    105114       
    106115        atom                    ʉ → LEFTROUND re RIGHTROUND | char | characterClass | any | sos | eos ;
    107116       
    108         char                    ʉ → CHARACTER | BACKSLASH escapedChar {@:isEscape = true;} ;
    109     escapedChar         â†’     CHARACTER | LEFTROUND | RIGHTROUND | LEFTSQUARE | LEFTCURLY | COMMA | OR | OPTIONAL | STAR | PLUS | ANY | SOS | EOS | BACKSLASH | LEFTCURLY;
     117        char                    → CHARACTER | CHARACTER_ESCAPE | HEXADECIMAL_ESCAPE | UNICODE_ESCAPE ;
    110118               
    111119        characterClass  →     LEFTSQUARE◊(charClass)
     
    114122                                                RIGHTSQUARE◊ ;
    115123                                         
    116         range                   Ê‰ → characterClassChar (THROUGH↑ characterClassChar)? ;
    117          
    118         characterClassChar                      ʉ → CHARACTER | BACKSLASH characterClassEscapedChar {@:isEscape = true;} ;
    119     characterClassEscapedChar   â†’ CHARACTER | NOT | THROUGH | BACKSLASH | RIGHTSQUARE;
     124        range                   Ê‰ → char (THROUGH↑ char)? ;
    120125
    121126        any                             â†’ ANY ;
    122127        sos                             â†’ SOS ;
    123         eos                             â†’ EOS ;
     128        eos                             â†’ EOS ;
     129       
     130        // backslash            → BACKSLASH ;
    124131}
Note: See TracChangeset for help on using the changeset viewer.