mirror of https://github.com/patacrep/patacrep.git
Luthaf
10 years ago
2 changed files with 59 additions and 0 deletions
@ -0,0 +1,59 @@ |
|||||
|
"""ChordPro lexer""" |
||||
|
|
||||
|
import logging |
||||
|
import ply.lex as lex |
||||
|
|
||||
|
LOGGER = logging.getLogger() |
||||
|
|
||||
|
#pylint: disable=invalid-name |
||||
|
tokens = ( |
||||
|
'LBRACKET', |
||||
|
'RBRACKET', |
||||
|
'LBRACE', |
||||
|
'RBRACE', |
||||
|
'NEWLINE', |
||||
|
'COLON', |
||||
|
'WORD', |
||||
|
'SPACE', |
||||
|
'NUMBER' |
||||
|
) |
||||
|
|
||||
|
class ChordProLexer: |
||||
|
"""ChordPro Lexer class""" |
||||
|
|
||||
|
tokens = tokens |
||||
|
|
||||
|
t_LBRACKET = r'\[' |
||||
|
t_RBRACKET = r'\]' |
||||
|
t_LBRACE = r'{' |
||||
|
t_RBRACE = r'}' |
||||
|
t_SPACE = r'[ \t]+' |
||||
|
t_COLON = r':' |
||||
|
t_WORD = r'[a-zA-Z_]+' #TODO: handle unicode |
||||
|
|
||||
|
def __init__(self): |
||||
|
self.__class__.lexer = lex.lex(module=self) |
||||
|
|
||||
|
# Define a rule so we can track line numbers |
||||
|
@staticmethod |
||||
|
def t_NEWLINE(token): |
||||
|
r'[\n\r]' |
||||
|
token.lexer.lineno += 1 |
||||
|
return token |
||||
|
|
||||
|
@staticmethod |
||||
|
def t_comment(token): |
||||
|
r'\#.*' |
||||
|
pass |
||||
|
|
||||
|
@staticmethod |
||||
|
def t_NUMBER(token): |
||||
|
r'[0-9]+' |
||||
|
token.value = int(token.value) |
||||
|
return token |
||||
|
|
||||
|
@staticmethod |
||||
|
def t_error(token): |
||||
|
"""Manage errors""" |
||||
|
LOGGER.error("Illegal character '{}'".format(token.value[0])) |
||||
|
token.lexer.skip(1) |
Loading…
Reference in new issue