Commit Graph

196 Commits (ae09462bd482fd3a6fd60df0fcb332b2fc1dcd60)
 

Author SHA1 Message Date
Aadhavan Srinivasan 269e2d0e1c Updated go.mod
Aadhavan Srinivasan 21142e6e13 Wrote function to clone the NFA starting at a given state, and a function to find question mark operator (a? == (a|))
Aadhavan Srinivasan b602295bee Added support for specifying how often a postfixNode is repeated
Aadhavan Srinivasan 1d9d1a5b81 Fixed calculation of overlapping (used to check for subset instead)
Aadhavan Srinivasan d8f52b8ccc Added support for numeric specifiers, moved question mark operator to its own function
Aadhavan Srinivasan dca81c1796 Replaced rune-slice parameters with string parameters in functions; avoids unnecessary conversion from strings to rune-slices
Aadhavan Srinivasan 723be527fb Updated TODO
Aadhavan Srinivasan fccd3a76f5 Wrote function to check if the assertion of a state is true
Aadhavan Srinivasan 315f68df12 Fixed typo
Aadhavan Srinivasan fd957d9518 Added more test cases
Aadhavan Srinivasan 19dc5064c8 Made conditions for word boundary a little more relaxed
Aadhavan Srinivasan a19d409796 Set node type to ASSERTION if the character represents an assertion
Aadhavan Srinivasan 0736e813c1 Fixed boneheaded mistake with checking assertion types
Aadhavan Srinivasan 1aff6e2fa4 Added a field to State, that tells me what kind of assertion (if any) it is making. Also added function to check if a state's contents contain a given value (checks assertions), and to find all matches that a state has for a character
Aadhavan Srinivasan f3bf5e9740 Added function to check for word boundaries and delete an element from a slice
Aadhavan Srinivasan 20db62c596 Got rid of function that I don't need anymore
Aadhavan Srinivasan 360bdc8e11 Big rewrite - assertion handling, zero-match fixes, change in recursive calls
I added support for transitions. I wrote a function to determine if
a given state has transitions for a character at a given point in the
string. This helps me check if the current state has an assertion, and
take actions based on that.

I also fixed zero-length matching (almost, see todo.txt). It works for
nearly all cases I could think of, although I still need to write more
tests. I wrote a function to check if zero-length matches are possible
with a given state.

I also changed the way recursive calls work. Rather than passing a
modified string, the function stores the location in the input string.
This location is updated with each call to the function.

Finally, the function now increments the offset by 1 instead of
incrementing by the length of the longest match. This leads to a bit of
overhead eg. if a regex matches index 1-5, then 1-5, 2-5, 3-5, 4-5 are
all stored. To fix this, I wrote (and used) a function to check if
a match overlaps with any matches in a slice.
Aadhavan Srinivasan 8dbecde3ae Added support for detecting assertion characters; changed input so that newline isn't required
Aadhavan Srinivasan a752491563 Added more test cases
Aadhavan Srinivasan 656c506aa8 Wrote function to provide correct node for escaped character
Aadhavan Srinivasan 1bafdcdb7e Added support for inverted matches; moved escape character detection to its own function
Aadhavan Srinivasan 5f4a6c5a3b Added constants for LBRACKET and RBRACKET
Aadhavan Srinivasan e6c607319c Added more tests
Aadhavan Srinivasan 8e8e9e133f Fixed matching greediness eg. a(a|b)*a would not match 'aaa' in 'aaab'
Aadhavan Srinivasan a619fd24f6 Added map and reduce functions, and a function to return the difference between two sets
Aadhavan Srinivasan f8ee1b3200 Added more tests
Aadhavan Srinivasan a66e8f1c08 Concatenate every character if it is escaped
Aadhavan Srinivasan d8299294ed Added test cases
Aadhavan Srinivasan 45d348e7f4 Updated TODO
Aadhavan Srinivasan 7b815343f4 Removed exclamation mark in inverted metacharacters - had the opposite effect becasue of the way deleteFunc works
Aadhavan Srinivasan 1a7fd12569 Added support for some escaped metacharacters
Aadhavan Srinivasan b8d5ea0897 Wrote function to create a character node regardless of the contents of the node
Aadhavan Srinivasan 445a7247f8 Defined variables to provide ranges of characters for metacharacters
Aadhavan Srinivasan ca945c7740 Added support for character ranges and dot metacharacter
Aadhavan Srinivasan 2af4a5f9fd Added more tests
Aadhavan Srinivasan 76157af2b8 Wrote function to generate rune slice representing valid dot metacharacter values
Aadhavan Srinivasan 96b3009c14 Updated TODO
Aadhavan Srinivasan 444413e1f7 Added postfixNode type to represent a node in the postfix representation of the regex
Aadhavan Srinivasan 74c6a2e195 Added more functions to stateContents type, removed append because I don't think I need it
Aadhavan Srinivasan 49b84c5728 Added test cases
Aadhavan Srinivasan 3778869567 Use stateContents type to allow a state to store multiple characters
Aadhavan Srinivasan 4f2f14212c Use contains function, since the content may have multiple characters
Aadhavan Srinivasan 11073759e3 Added support for character classes (not ranges, yet); also take input from stdin instead of cmdline arg
Aadhavan Srinivasan cd680371fb Added function allEqual - checks if all given values are equal
Aadhavan Srinivasan df6efcd1f0 Unique append to match indices (ensure match indices aren't repeated
Aadhavan Srinivasan 704bec122a Added more tests
Aadhavan Srinivasan 3a7373bb2b Started working on new type to represent state contents
Aadhavan Srinivasan fe5c94b4df Use new unique append to check if unique states have been added to tempStates
Aadhavan Srinivasan 3984c54080 Added more test cases
Aadhavan Srinivasan 84c768fd5e Fixed small bug with question mark operator, wasn't adding the empty state's output