#
# Example 7
#
from Plex import *
letter = Range("AZaz")
digit = Range("09")
name = letter + Rep(letter | digit)
number = Rep1(digit)
space = Any(" \t\n")
class MyScanner(Scanner):
def begin_comment(self, text):
if self.nesting_level == 0:
self.begin('comment')
self.nesting_level = self.nesting_level + 1
def end_comment(self, text):
self.nesting_level = self.nesting_level - 1
if self.nesting_level == 0:
self.begin('')
lexicon = Lexicon([
(name, 'ident'),
(number, 'int'),
(space, IGNORE),
(Str("(*"), begin_comment),
State('comment', [
(Str("(*"), begin_comment),
(Str("*)"), end_comment),
(AnyChar, IGNORE)
])
])
def __init__(self, file, name):
Scanner.__init__(self, self.lexicon, file, name)
self.nesting_level = 0
filename = "example7.in"
f = open(filename, "r")
scanner = MyScanner(f, filename)
while 1:
token = scanner.read()
print token
if token[0] is None:
break
syntax highlighted by Code2HTML, v. 0.9.1