2017-04-25 14:19:50 +02:00
|
|
|
from __future__ import absolute_import, division, print_function
|
2017-02-24 10:26:56 +01:00
|
|
|
|
2019-02-08 11:38:08 +01:00
|
|
|
from langkit.lexer import (Lexer, LexerToken, Literal, Pattern, TokenFamily,
|
|
|
|
|
WithSymbol, WithText, WithTrivia)
|
2016-02-10 13:19:29 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class Token(LexerToken):
|
2018-01-18 15:47:31 +01:00
|
|
|
Def = WithText()
|
2018-09-27 11:24:37 +02:00
|
|
|
Var = WithText()
|
2018-01-18 15:47:31 +01:00
|
|
|
Error = WithText()
|
2017-01-06 13:15:05 +01:00
|
|
|
Example = WithText()
|
|
|
|
|
Null = WithText()
|
2016-03-16 18:06:40 +01:00
|
|
|
|
2017-01-06 13:15:05 +01:00
|
|
|
Comma = WithText()
|
2017-12-21 12:38:51 +01:00
|
|
|
Dot = WithText()
|
2018-02-20 16:55:41 +01:00
|
|
|
Semicolon = WithText()
|
2017-01-06 13:15:05 +01:00
|
|
|
LPar = WithText()
|
|
|
|
|
RPar = WithText()
|
|
|
|
|
LBrace = WithText()
|
|
|
|
|
RBrace = WithText()
|
2017-11-27 10:53:33 +01:00
|
|
|
Equal = WithText()
|
2017-01-06 13:15:05 +01:00
|
|
|
Plus = WithText()
|
2018-05-30 16:33:50 +02:00
|
|
|
Minus = WithText()
|
2018-05-30 16:43:10 +02:00
|
|
|
LessThan = WithText()
|
2016-03-16 18:06:40 +01:00
|
|
|
|
|
|
|
|
Number = WithText()
|
2016-04-12 15:28:56 +02:00
|
|
|
Identifier = WithSymbol()
|
2019-06-12 16:11:56 +02:00
|
|
|
String = WithText()
|
2016-02-10 13:19:29 +01:00
|
|
|
|
2018-02-21 15:33:26 +01:00
|
|
|
Comment = WithTrivia()
|
2018-04-26 15:05:47 +02:00
|
|
|
Whitespace = WithTrivia()
|
2018-02-21 15:33:26 +01:00
|
|
|
|
2018-04-18 18:02:11 +02:00
|
|
|
Alphanumericals = TokenFamily(Def, Error, Example, Null, Number,
|
|
|
|
|
Identifier)
|
|
|
|
|
Punctuation = TokenFamily(Comma, Dot, Semicolon, LPar, RPar, LBrace,
|
|
|
|
|
RBrace, Equal, Plus)
|
|
|
|
|
Comments = TokenFamily(Comment)
|
|
|
|
|
|
2016-02-10 13:19:29 +01:00
|
|
|
|
|
|
|
|
foo_lexer = Lexer(Token)
|
|
|
|
|
foo_lexer.add_rules(
|
2018-04-26 15:05:47 +02:00
|
|
|
(Pattern(r'[ \n\r\t]+'), Token.Whitespace),
|
2016-03-16 18:06:40 +01:00
|
|
|
|
2018-01-18 15:47:31 +01:00
|
|
|
(Literal('def'), Token.Def),
|
2018-09-27 11:24:37 +02:00
|
|
|
(Literal('var'), Token.Var),
|
2018-01-18 15:47:31 +01:00
|
|
|
(Literal('error'), Token.Error),
|
2017-11-22 12:51:05 +01:00
|
|
|
(Literal('example'), Token.Example),
|
|
|
|
|
(Literal('null'), Token.Null),
|
2016-03-16 18:06:40 +01:00
|
|
|
|
2016-04-12 15:28:56 +02:00
|
|
|
(Literal(','), Token.Comma),
|
2017-12-21 12:38:51 +01:00
|
|
|
(Literal('.'), Token.Dot),
|
2018-02-20 16:55:41 +01:00
|
|
|
(Literal(';'), Token.Semicolon),
|
2016-04-12 15:28:56 +02:00
|
|
|
(Literal('('), Token.LPar),
|
|
|
|
|
(Literal(')'), Token.RPar),
|
|
|
|
|
(Literal('{'), Token.LBrace),
|
|
|
|
|
(Literal('}'), Token.RBrace),
|
2017-11-27 10:53:33 +01:00
|
|
|
(Literal('='), Token.Equal),
|
2016-12-13 17:54:54 +01:00
|
|
|
(Literal('+'), Token.Plus),
|
2018-05-30 16:33:50 +02:00
|
|
|
(Literal('-'), Token.Minus),
|
2018-05-30 16:43:10 +02:00
|
|
|
(Literal('<'), Token.LessThan),
|
2016-03-16 18:06:40 +01:00
|
|
|
|
2016-04-12 15:28:56 +02:00
|
|
|
(Pattern('[0-9]+'), Token.Number),
|
2017-01-13 10:18:57 +01:00
|
|
|
(Pattern('[a-zA-Z_][a-zA-Z0-9_]*'), Token.Identifier),
|
2019-06-12 16:11:56 +02:00
|
|
|
(Pattern(r'\"[^\"]*\"'), Token.String),
|
2018-02-21 15:33:26 +01:00
|
|
|
|
|
|
|
|
(Pattern('#(.?)+'), Token.Comment),
|
2016-02-10 13:19:29 +01:00
|
|
|
)
|
2018-04-20 11:27:25 +02:00
|
|
|
foo_lexer.add_spacing((Token.Alphanumericals, Token.Alphanumericals))
|
|
|
|
|
foo_lexer.add_newline_after(Token.Comment)
|