-
Notifications
You must be signed in to change notification settings - Fork 0
arjun-krishna/regex
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
#### README ####
_______________________________________________________________________________
author : Arjun Krishna
_______________________________________________________________________________
# the following looks good when viewed from the vi editor #
_______________________________________________________________________________
file_structure:
a) main.cpp : Main code compiled as match (executable)
b) grammer.cnf : Grammer which generates valid regular expressions
c) cnf.h : Library for converting a cnf grammer containing file
i.e grammer.cnf ( which is required in a described format )
d) regex.h : Library for constructing an NFA for a regular expression
and for matching strings (i.e to check if string belongs
to the language represented by the regular expression.
_______________________________________________________________________________
FORMAT FOR GRAMMER ( for grammer.cnf ):
____________________________________________________________________________
| FORMAT |
| |
|<A>=<B><C> |
|<A>=$a$ |
|____________________________________________________________________________|
meaning,
grammer has productions
A -> BC
A -> a
<B> -- indicates non terminal symbol
$B$ -- indicates a terminal symbol
_______________________________________________________________________________
cnf.h:
class CNF:
constructor : CNF(file_name) # file_name contains the grammer in CNF
functions:
1) print_productions() # prints the productions in the grammer
2) CYK(s) # run the CYK algorithm on string s
# returns 1 if s is in language of the Grammer
_______________________________________________________________________________
regex.h:
class automaton:
public variables:
vector <int> S # Start states
vector <int> F # Final states
adj # The di-graph representation of automaton
Q # The number of states in automaton
constructor: automaton(char a) # automaton that accepts only string a
functions: {Not part of the class}
nfa_union(A,B) # return NFA of union of A and B
dot(A,B) # return NFA of concatenation of A and B
astrix(A) # return NFA of A*
create_automaton(regex) # returns automaton that accepts L(regex)
run_NFA(M,s) # run's the string s on NFA M
match_string(M,s) # returns 1 if s is accepted by 1 else 0
_______________________________________________________________________________
main.cpp :
# code when compiled requires input of the format
N is a integer
|regex| <= 100
|string| <= 100000
input:
regex
N
{followed by N strings to be tested}
output:
{ Yes/No N times }
# Yes if the string is accepted by L(regex)
# No otherwise
_______________________________________________________________________________
--------------------------------- END -----------------------------------------
About
A good C++ implementation of CYK algorithm for a generic CNF grammer and also parsing RegExp
Topics
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published