-
Notifications
You must be signed in to change notification settings - Fork 0
/
css_lexer.py
executable file
·82 lines (72 loc) · 1.85 KB
/
css_lexer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/python
# ------------------------------------------------------------
# CSSP: CSS Preprocessor (bitremix.com/p/cssp)
# Ver: 0.0.1
# Copyright 2010 Francisco Pinzon: ([email protected])
# ------------------------------------------------------------
#
#css_lexer.py
#This file is part of CSSP.
#
#CSSP is free software: you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#any later version.
#
#CSSP is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU General Public License
#along with CSSP. If not, see <http://www.gnu.org/licenses/>.
#
# ------------------------------------------------------------
import ply.lex as lex
# List of token names that reserved words.
tokens=[
'COMMENT',
'DOLLAR',
'AT',
'EQUALS',
'RCURL',
'LCURL',
'COLON',
'SEMICOLON',
'STRING'
]
#List of ignored characters
t_ignore = ' \t\r'
#Token value assignation
t_LCURL=r'\{'
t_RCURL=r'\}'
t_EQUALS=r'='
t_DOLLAR=r'[$]'
t_AT=r'@'
t_COLON=r':'
t_SEMICOLON=r';'
t_STRING='([A-Za-z0-9 ]|[,_>.#"%()!*]|[-]|\'|[[]|[]])+'
#Comment handling rule
def t_COMMENT(t):
r'/\*(.|\n)*?[*]/'
pass
# Error handling rule
def t_error(t):
print "Illegal character '%s'" % t.value[0]
t.lexer.skip(1)
# NewLine handling rule
def t_newline(t):
r'\n+'
t.lexer.lineno+=t.value.count("\n")
lexer=lex.lex();
###############################STANDALONE CAPABILITIES
def lex_line(line):
lexer.input(line)
while True:
tok=lexer.token()
if not tok:break
print tok
if __name__=='__main__':
print '\t\tCSS LEXER'
while True:
lex_line(raw_input("css_lexer>"))