Changeset 3084 for proto


Ignore:
Timestamp:
Apr 27, 2013, 8:41:00 PM (6 years ago)
Author:
ksherdy
Message:

Updated regular expression grammar. Checks out against tests.

File:
1 edited

Legend:

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

    r3077 r3084  
    55// Supports context dependent lexical analysis.
    66//
    7 // Modified:    31-09-2012      Original definition.
    8 // Modified:    04-25-2013              Added by Character-by-character lexical analysis, any , sos, eos, bounded repetition.
     7// 31-09-2012   Original definition.
     8// 04-25-2013   Character-by-character lexical analysis, any , sos, eos, bounded repetition (all types).
     9// 04-27-2013   Negated character classes.
     10//
    911
    1012types {}
     
    1719                Escape[UNICODE_ESCAPE]                  "\\u" "0123456789abcdefABCDEF" 4 4 16,
    1820                Punctuator,
    19                 Comment [IGNORE] "(?#" ")",
     21                Comment [IGNORE] "(?#" ")",     // comments
    2022                EndOfInput,                                             // must precede CHARACTER
    2123                Character [CHARACTER],                  // non-punctuators     
     
    2527                LEFTROUND       "(",   
    2628                RIGHTROUND      ")",
     29                LEFTSQUARENEGATE "[^",
    2730                LEFTSQUARE      "[",     
    2831                LEFTCURLY       "{",     
     
    4245context charClass {     
    4346        recognizers {
    44                 Whitespace [IGNORE],
     47                // Whitespace [IGNORE],                 // POSIX standard
    4548                Escape[CHARACTER_ESCAPE]                "\\" "[.]" 1 1,
    4649                Escape[HEXADECIMAL_ESCAPE]              "\\x" "0123456789abcdefABCDEF" 2 2 16,
     
    5356        tokens {
    5457                RIGHTSQUARE "]",
    55                 NOT             "^",
     58        //      NOT             "^",
    5659                THROUGH         "-",
    5760        //      BACKSLASH       "\\",
     
    7376
    7477interfaces {
    75         complementable {boolean isComplemented = false;},
    7678        repeatable{boolean isRepeated = true;},
    7779        intValued {int value = 0;},
     
    8082
    8183nodes {
    82         characterClass {complementable;} [],
    8384        lowerBound{intValued;} [],
    8485        upperBound{intValued;} [],
    85         repetitionIndicator{intRange;} [],
    86         boundedRepetitionIndicator{repeatable;} [],
     86        repetitionIndicator{intRange;} [boundedRepetitionIndicator],
    8787}
    8888//
     
    106106                                                        PLUS {@lowerBound = 1; @upperBound = -1;};
    107107                                                       
    108         boundedRepetitionIndicator      → LEFTCURLY◊(boundedRepetition) (lowerBound)? (COMMA {@isRepeated=false;} (upperBound)? )? RIGHTCURLY◊ ;
    109         lowerBound              → INTEGER_CONST {@value = @@value;} ;
    110         upperBound              → INTEGER_CONST {@value = @@value;} ;                                         
     108        boundedRepetitionIndicator      → LEFTCURLY◊(boundedRepetition)
     109                                                                          ( lowerBound!   {@lowerBound = @:value;}  )
     110                                                                          (
     111                                                                              (COMMA upperBound!   {@upperBound = @:value;}     ) |
     112                                                                              (ε                   {@upperBound = @lowerBound;} )
     113                                                                          )
     114                                                                  RIGHTCURLY◊ ;
     115                                                                 
     116        lowerBound              → INTEGER_CONST {@value = @@value;} |
     117                                          ε                    {@value = 0;}       ;
     118                                         
     119        upperBound              → INTEGER_CONST {@value = @@value;} |
     120                                          ε                    {@value = -1;}      ;                                           
    111121       
    112         atom                    ʉ → LEFTROUND re RIGHTROUND | char | characterClass | any | sos | eos ;
     122        atom                    ʉ → LEFTROUND re RIGHTROUND | char | characterClass | negatedCharacterClass | any | sos | eos ;
    113123       
    114124        char                    → CHARACTER | CHARACTER_ESCAPE | HEXADECIMAL_ESCAPE | UNICODE_ESCAPE ;
    115125               
    116         characterClass  →     LEFTSQUARE◊(charClass)
    117                                                         (NOT {@isComplemented = true;})?
     126        characterClass  →     LEFTSQUARE
     127                                                        ◊(charClass)
    118128                                                        range*
    119129                                                RIGHTSQUARE◊ ;
    120                                          
     130                                               
     131        negatedCharacterClass   â†’     LEFTSQUARENEGATE
     132                                                                        ◊(charClass)
     133                                                                        range*
     134                                                                RIGHTSQUARE◊ ;                                       
     135                                                                                 
    121136        range                   Ê‰ → char (THROUGH↑ char)? ;
    122137
Note: See TracChangeset for help on using the changeset viewer.