Improve 'extend' statement
This commit is contained in:
@@ -45,14 +45,34 @@ class Extend(Node):
|
|||||||
node.methods = methods
|
node.methods = methods
|
||||||
return node
|
return node
|
||||||
|
|
||||||
|
|
||||||
def ExtendParser(input):
|
def ExtendParser(input):
|
||||||
return Parser.allOf(
|
|
||||||
|
simpleExtend = Parser.allOf(
|
||||||
|
Parser.terminal(TokenType.EXTEND),
|
||||||
|
TypeParser,
|
||||||
|
Parser.terminal(TokenType.AS),
|
||||||
|
IdentifierLiteralParser,
|
||||||
|
Parser.terminal(TokenType.WITH),
|
||||||
|
Parser.wrap(FunctionDefinitionParser, lambda method: Block.withChildren([ method ], method.pos)),
|
||||||
|
createNode=lambda extend, type, _, variable, __, methods: Extend.withValues(extend.pos, type, variable, methods),
|
||||||
|
name="simple extend"
|
||||||
|
)
|
||||||
|
|
||||||
|
multiExtend = Parser.allOf(
|
||||||
Parser.terminal(TokenType.EXTEND),
|
Parser.terminal(TokenType.EXTEND),
|
||||||
TypeParser,
|
TypeParser,
|
||||||
Parser.terminal(TokenType.AS),
|
Parser.terminal(TokenType.AS),
|
||||||
IdentifierLiteralParser,
|
IdentifierLiteralParser,
|
||||||
MethodsDeclarationParser,
|
MethodsDeclarationParser,
|
||||||
createNode=lambda extend, type, _, variable, methods: Extend.withValues(extend.pos, type, variable, methods),
|
createNode=lambda extend, type, _, variable, methods: Extend.withValues(extend.pos, type, variable, methods),
|
||||||
|
name="multiple extend"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
return Parser.oneOf(
|
||||||
|
simpleExtend,
|
||||||
|
multiExtend,
|
||||||
name="extend"
|
name="extend"
|
||||||
)(input)
|
)(input)
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ tokenizers = (
|
|||||||
separated(defaultTokenizer(TokenType.EXTEND)),
|
separated(defaultTokenizer(TokenType.EXTEND)),
|
||||||
separated(defaultTokenizer(TokenType.IMPORT)),
|
separated(defaultTokenizer(TokenType.IMPORT)),
|
||||||
separated(defaultTokenizer(TokenType.FROM)),
|
separated(defaultTokenizer(TokenType.FROM)),
|
||||||
|
separated(defaultTokenizer(TokenType.WITH)),
|
||||||
separated(defaultTokenizer(TokenType.ELSE)),
|
separated(defaultTokenizer(TokenType.ELSE)),
|
||||||
separated(defaultTokenizer(TokenType.AND)),
|
separated(defaultTokenizer(TokenType.AND)),
|
||||||
separated(defaultTokenizer(TokenType.NOT)),
|
separated(defaultTokenizer(TokenType.NOT)),
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ class TokenType(Enum):
|
|||||||
EXTEND = 'extend'
|
EXTEND = 'extend'
|
||||||
IMPORT = 'import'
|
IMPORT = 'import'
|
||||||
FROM = 'from'
|
FROM = 'from'
|
||||||
|
WITH = 'with'
|
||||||
ELSE = 'else'
|
ELSE = 'else'
|
||||||
IF = 'if'
|
IF = 'if'
|
||||||
AS = 'as'
|
AS = 'as'
|
||||||
|
|||||||
Reference in New Issue
Block a user