Class: LLIP::RegexpParser
- Inherits:
-
AbstractParser
- Object
- AbstractParser
- LLIP::RegexpParser
- Defined in:
- lib/llip/regexp_parser.rb
Overview
It’s a parser for regular expression. It correctly builds a RegexpSpecification given a valid regular expression string.
Grammar
VN = { EXP , ELEMENT , META}
char = every charachter
symb = { ( , ) , . , * , + , \ , | , [ , ] }
VT = char U symb
In every production it has been used “or” instead of “|” to not make confusion.
P =
EXP -> META EXP
EXP -> META or EXP
EXP -> META
META -> ELEMENT*
META -> ELEMENT+
META -> ELEMENT
ELEMENT -> char or . or \symb
ELEMENT -> [CLASS]
ELEMENT -> (EXP)
CLASS -> char
CLASS -> char CLASS
CLASS -> char - char
CLASS -> char - char CLASS
or in EBNF format
P’ =
EXP ::= META{[|]EXP
META ::= ELEMENT[* or +]
ELEMENT ::= char or . or \symb or (EXP) or [CLASS]
CLASS ::= char{ - char or - char char or char}
}
Defined Under Namespace
Classes: MetaAccessor
Constant Summary collapse
- SPECIALS_TABLE =
{ "n" => "\n", "r" => "\r", "t" => "\t" }
Instance Method Summary collapse
Methods inherited from AbstractParser
#[], #[]=, inherited, #initialize, #parse, #productions, #raise
Constructor Details
This class inherits a constructor from LLIP::AbstractParser
Instance Method Details
#add_char(parser, scanner, char = scanner.current.value) ⇒ Object
235 236 237 238 239 240 241 242 |
# File 'lib/llip/regexp_parser.rb', line 235 def add_char(parser, scanner, char=scanner.current.value) r = parser[:regexp].add_state parser[:last].each { |s| s[char] = r } parser[:regexp].add_state(r) parser[:last] = [r] scanner.next char end |