Changeset 24513
- Timestamp:
- 11/20/08 23:45:10 (7 weeks ago)
- Location:
- lang/python/dfareg/branches/codezine200809/dfareg
- Files:
-
- 2 modified
-
nfabuilder.py (modified) (4 diffs)
-
parser.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/python/dfareg/branches/codezine200809/dfareg/nfabuilder.py
r21916 r24513 71 71 return frag 72 72 73 def __str__(self): 74 return "(%s|%s)" % (self.operand1, self.operand2) 75 73 76 74 77 class Concat(object): … … 89 92 90 93 return frag 94 def __str__(self): 95 return "(%s%s)" % (self.operand1, self.operand2) 96 91 97 92 98 class Star(object): … … 109 115 return frag 110 116 117 def __str__(self): 118 return "%s*" % self.operand 119 111 120 class Character(object): 112 121 def __init__(self, char): … … 123 132 124 133 return frag 134 def __str__(self): 135 return self.char -
lang/python/dfareg/branches/codezine200809/dfareg/parser.py
r23630 r24513 13 13 ---------------------------------------- 14 14 expression -> subexpr 15 subexpr -> seq '|' subexpr | seq 15 subexpr -> subexpr '|' seq | seq 16 ( 17 subexpr -> seq _subexpr 18 _subexpr -> '|' seq _subexpr | ε 19 ) 16 20 seq -> subseq | ε 17 subseq -> star subseq | star 21 subseq -> subseq star | star 22 ( 23 subseq -> star _subseq 24 _subseq -> star _subseq | ε 25 ) 18 26 star -> factor '*' | factor 19 27 factor -> '(' subexpr ')' | CHARACTER … … 46 54 47 55 def subexpr(self): 48 # subexpr -> seq '|' subexpr | seq56 # subexpr -> seq _subexpr 49 57 node = self.seq() 50 if self.look.kind == Token.OPE_UNION: 51 self.match(Token.OPE_UNION) 52 node2 = self.subexpr() 53 node = Union(node, node2) 58 while True: 59 if self.look.kind == Token.OPE_UNION: 60 # _subexpr -> '|' seq _subexpr | ε 61 self.match(Token.OPE_UNION) 62 node2 = self.seq() 63 node = Union(node, node2) 64 else: 65 # _subexpr -> ε 66 break 54 67 return node 55 68 … … 64 77 65 78 def subseq(self): 66 node1 = self.star() 67 if self.look.kind == Token.LPAREN \ 68 or self.look.kind == Token.CHARACTER: 69 # subseq -> star subseq 70 node2 = self.subseq() 71 node = Concat(node1, node2) 72 return node 73 else: 74 # subseq -> star 75 return node1 79 # subseq -> star _subseq 80 node = self.star() 81 while True: 82 if self.look.kind == Token.LPAREN \ 83 or self.look.kind == Token.CHARACTER: 84 # _subseq -> star _subseq 85 node2 = self.star() 86 node = Concat(node, node2) 87 continue 88 else: 89 # _subseq -> ε 90 break 91 return node 76 92 77 93 def star(self):
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)