pytest-dsl 0.7.0__py3-none-any.whl → 0.8.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,6 +13,16 @@ from pytest_dsl.core.yaml_vars import yaml_vars
13
13
  from pytest_dsl.core.variable_utils import VariableReplacer
14
14
 
15
15
 
16
+ class BreakException(Exception):
17
+ """Break控制流异常"""
18
+ pass
19
+
20
+
21
+ class ContinueException(Exception):
22
+ """Continue控制流异常"""
23
+ pass
24
+
25
+
16
26
  class DSLExecutor:
17
27
  """DSL执行器,负责执行解析后的AST
18
28
 
@@ -175,7 +185,7 @@ class DSLExecutor:
175
185
  """
176
186
  left_value = self.eval_expression(expr_node.children[0])
177
187
  right_value = self.eval_expression(expr_node.children[1])
178
- operator = expr_node.value # 操作符: +, -, *, /
188
+ operator = expr_node.value # 操作符: +, -, *, /, %
179
189
 
180
190
  # 尝试类型转换 - 如果是字符串数字则转为数字
181
191
  if isinstance(left_value, str) and str(left_value).replace('.', '', 1).isdigit():
@@ -210,6 +220,11 @@ class DSLExecutor:
210
220
  if right_value == 0:
211
221
  raise Exception("除法错误: 除数不能为0")
212
222
  return left_value / right_value
223
+ elif operator == '%':
224
+ # 模运算时检查除数是否为0
225
+ if right_value == 0:
226
+ raise Exception("模运算错误: 除数不能为0")
227
+ return left_value % right_value
213
228
  else:
214
229
  raise Exception(f"未知的算术操作符: {operator}")
215
230
 
@@ -458,7 +473,24 @@ class DSLExecutor:
458
473
  self.variable_replacer.local_variables[var_name] = i
459
474
  self.test_context.set(var_name, i) # 同时添加到测试上下文
460
475
  with allure.step(f"循环轮次: {var_name} = {i}"):
461
- self.execute(node.children[2])
476
+ try:
477
+ self.execute(node.children[2])
478
+ except BreakException:
479
+ # 遇到break语句,退出循环
480
+ allure.attach(
481
+ f"在 {var_name} = {i} 时遇到break语句,退出循环",
482
+ name="循环Break",
483
+ attachment_type=allure.attachment_type.TEXT
484
+ )
485
+ break
486
+ except ContinueException:
487
+ # 遇到continue语句,跳过本次循环
488
+ allure.attach(
489
+ f"在 {var_name} = {i} 时遇到continue语句,跳过本次循环",
490
+ name="循环Continue",
491
+ attachment_type=allure.attachment_type.TEXT
492
+ )
493
+ continue
462
494
 
463
495
  def _execute_keyword_call(self, node):
464
496
  """执行关键字调用"""
@@ -511,6 +543,30 @@ class DSLExecutor:
511
543
  expr_node = node.children[0]
512
544
  return self.eval_expression(expr_node)
513
545
 
546
+ @allure.step("执行break语句")
547
+ def _handle_break(self, node):
548
+ """处理break语句
549
+
550
+ Args:
551
+ node: Break节点
552
+
553
+ Raises:
554
+ BreakException: 抛出异常来实现break控制流
555
+ """
556
+ raise BreakException()
557
+
558
+ @allure.step("执行continue语句")
559
+ def _handle_continue(self, node):
560
+ """处理continue语句
561
+
562
+ Args:
563
+ node: Continue节点
564
+
565
+ Raises:
566
+ ContinueException: 抛出异常来实现continue控制流
567
+ """
568
+ raise ContinueException()
569
+
514
570
  @allure.step("执行条件语句")
515
571
  def _handle_if_statement(self, node):
516
572
  """处理if-elif-else语句
@@ -664,7 +720,9 @@ class DSLExecutor:
664
720
  'CustomKeyword': lambda _: None, # 添加对CustomKeyword节点的处理,只需注册不需执行
665
721
  'RemoteImport': self._handle_remote_import,
666
722
  'RemoteKeywordCall': self._execute_remote_keyword_call,
667
- 'AssignmentRemoteKeywordCall': self._handle_assignment_remote_keyword_call
723
+ 'AssignmentRemoteKeywordCall': self._handle_assignment_remote_keyword_call,
724
+ 'Break': self._handle_break,
725
+ 'Continue': self._handle_continue
668
726
  }
669
727
 
670
728
  handler = handlers.get(node.type)
pytest_dsl/core/lexer.py CHANGED
@@ -16,7 +16,9 @@ reserved = {
16
16
  'if': 'IF', # 添加if关键字支持
17
17
  'as': 'AS', # 添加as关键字支持,用于远程关键字别名
18
18
  'function': 'FUNCTION', # 添加function关键字支持,用于自定义关键字定义
19
- 'teardown': 'TEARDOWN' # 添加teardown关键字支持,用于清理操作
19
+ 'teardown': 'TEARDOWN', # 添加teardown关键字支持,用于清理操作
20
+ 'break': 'BREAK', # 添加break关键字支持,用于循环控制
21
+ 'continue': 'CONTINUE' # 添加continue关键字支持,用于循环控制
20
22
  }
21
23
 
22
24
  # token 名称列表
@@ -53,6 +55,7 @@ tokens = [
53
55
  'MINUS', # 减法 -
54
56
  'TIMES', # 乘法 *
55
57
  'DIVIDE', # 除法 /
58
+ 'MODULO', # 模运算 %
56
59
  'PIPE', # 管道符 |,用于远程关键字调用
57
60
  ] + list(reserved.values())
58
61
 
@@ -76,10 +79,13 @@ t_PLUS = r'\+'
76
79
  t_MINUS = r'-'
77
80
  t_TIMES = r'\*'
78
81
  t_DIVIDE = r'/'
82
+ t_MODULO = r'%'
79
83
 
80
84
  # 增加PLACEHOLDER规则,匹配 ${变量名} 格式,支持点号、数组索引和字典键访问
81
85
  # 匹配: ${variable}, ${obj.prop}, ${arr[0]}, ${dict["key"]}, ${obj[0].prop} 等
82
- t_PLACEHOLDER = r'\$\{[a-zA-Z_\u4e00-\u9fa5][a-zA-Z0-9_\u4e00-\u9fa5]*(?:(?:\.[a-zA-Z_\u4e00-\u9fa5][a-zA-Z0-9_\u4e00-\u9fa5]*)|(?:\[[^\]]+\]))*\}'
86
+ t_PLACEHOLDER = (r'\$\{[a-zA-Z_\u4e00-\u9fa5][a-zA-Z0-9_\u4e00-\u9fa5]*'
87
+ r'(?:(?:\.[a-zA-Z_\u4e00-\u9fa5][a-zA-Z0-9_\u4e00-\u9fa5]*)'
88
+ r'|(?:\[[^\]]+\]))*\}')
83
89
 
84
90
  # 添加管道符的正则表达式定义
85
91
  t_PIPE = r'\|'
pytest_dsl/core/parser.py CHANGED
@@ -14,7 +14,7 @@ precedence = (
14
14
  ('left', 'COMMA'),
15
15
  ('left', 'GT', 'LT', 'GE', 'LE', 'EQ', 'NE'), # 比较运算符优先级
16
16
  ('left', 'PLUS', 'MINUS'), # 加减运算符优先级
17
- ('left', 'TIMES', 'DIVIDE'), # 乘除运算符优先级
17
+ ('left', 'TIMES', 'DIVIDE', 'MODULO'), # 乘除模运算符优先级
18
18
  ('right', 'EQUALS'),
19
19
  )
20
20
 
@@ -124,7 +124,9 @@ def p_statement(p):
124
124
  | loop
125
125
  | custom_keyword
126
126
  | return_statement
127
- | if_statement'''
127
+ | if_statement
128
+ | break_statement
129
+ | continue_statement'''
128
130
  p[0] = p[1]
129
131
 
130
132
 
@@ -302,6 +304,16 @@ def p_return_statement(p):
302
304
  p[0] = Node('Return', [p[2]])
303
305
 
304
306
 
307
+ def p_break_statement(p):
308
+ '''break_statement : BREAK'''
309
+ p[0] = Node('Break', [])
310
+
311
+
312
+ def p_continue_statement(p):
313
+ '''continue_statement : CONTINUE'''
314
+ p[0] = Node('Continue', [])
315
+
316
+
305
317
  def p_if_statement(p):
306
318
  '''if_statement : IF expression DO statements END
307
319
  | IF expression DO statements elif_clauses END
@@ -367,7 +379,8 @@ def p_arithmetic_expr(p):
367
379
  '''arithmetic_expr : expression PLUS expression
368
380
  | expression MINUS expression
369
381
  | expression TIMES expression
370
- | expression DIVIDE expression'''
382
+ | expression DIVIDE expression
383
+ | expression MODULO expression'''
371
384
 
372
385
  # 根据规则索引判断使用的是哪个操作符
373
386
  if p.slice[2].type == 'PLUS':
@@ -378,6 +391,8 @@ def p_arithmetic_expr(p):
378
391
  operator = '*'
379
392
  elif p.slice[2].type == 'DIVIDE':
380
393
  operator = '/'
394
+ elif p.slice[2].type == 'MODULO':
395
+ operator = '%'
381
396
  else:
382
397
  print(f"警告: 无法识别的操作符类型 {p.slice[2].type}")
383
398
  operator = None
@@ -6,9 +6,9 @@ _tabversion = '3.10'
6
6
 
7
7
  _lr_method = 'LALR'
8
8
 
9
- _lr_signature = 'leftCOMMAleftGTLTGELEEQNEleftPLUSMINUSleftTIMESDIVIDErightEQUALSAS AUTHOR_KEYWORD COLON COMMA DATA_KEYWORD DATE DATE_KEYWORD DESCRIPTION_KEYWORD DIVIDE DO ELIF ELSE END EQ EQUALS FALSE FOR FUNCTION GE GT ID IF IMPORT_KEYWORD IN LBRACE LBRACKET LE LPAREN LT MINUS NAME_KEYWORD NE NUMBER PIPE PLACEHOLDER PLUS RANGE RBRACE RBRACKET REMOTE_KEYWORD RETURN RPAREN STRING TAGS_KEYWORD TEARDOWN TIMES TRUE USINGstart : metadata statements teardown\n | metadata statements\n | statements teardown\n | statementsmetadata : metadata_items\n | emptyempty :metadata_items : metadata_item metadata_items\n | metadata_itemmetadata_item : NAME_KEYWORD COLON metadata_value\n | DESCRIPTION_KEYWORD COLON metadata_value\n | TAGS_KEYWORD COLON LBRACKET tags RBRACKET\n | AUTHOR_KEYWORD COLON metadata_value\n | DATE_KEYWORD COLON DATE\n | DATA_KEYWORD COLON data_source\n | IMPORT_KEYWORD COLON STRING\n | REMOTE_KEYWORD COLON STRING AS IDmetadata_value : STRING\n | IDtags : tag COMMA tags\n | tagtag : STRING\n | IDstatements : statement statements\n | statementstatement : assignment\n | keyword_call\n | remote_keyword_call\n | loop\n | custom_keyword\n | return_statement\n | if_statementassignment : ID EQUALS expression\n | ID EQUALS keyword_call\n | ID EQUALS remote_keyword_callexpression : expr_atom\n | comparison_expr\n | arithmetic_exprexpr_atom : NUMBER\n | STRING\n | PLACEHOLDER\n | ID\n | boolean_expr\n | list_expr\n | dict_expr\n | LPAREN expression RPARENboolean_expr : TRUE\n | FALSElist_expr : LBRACKET list_items RBRACKET\n | LBRACKET RBRACKETlist_items : list_item\n | list_item COMMA list_itemslist_item : expressiondict_expr : LBRACE dict_items RBRACE\n | LBRACE RBRACEdict_items : dict_item\n | dict_item COMMA dict_itemsdict_item : expression COLON expressionloop : FOR ID IN RANGE LPAREN expression COMMA expression RPAREN DO statements ENDkeyword_call : LBRACKET ID RBRACKET COMMA parameter_list\n | LBRACKET ID RBRACKETparameter_list : parameter_itemsparameter_items : parameter_item COMMA parameter_items\n | parameter_itemparameter_item : ID COLON expressionteardown : TEARDOWN DO statements ENDdata_source : STRING USING IDcustom_keyword : FUNCTION ID LPAREN param_definitions RPAREN DO statements ENDparam_definitions : param_def_list\n | param_def_list : param_def COMMA param_def_list\n | param_defparam_def : ID EQUALS STRING\n | ID EQUALS NUMBER\n | IDreturn_statement : RETURN expressionif_statement : IF expression DO statements END\n | IF expression DO statements elif_clauses END\n | IF expression DO statements ELSE statements END\n | IF expression DO statements elif_clauses ELSE statements ENDelif_clauses : elif_clause\n | elif_clause elif_clauseselif_clause : ELIF expression DO statementscomparison_expr : expr_atom GT expr_atom\n | expr_atom LT expr_atom\n | expr_atom GE expr_atom\n | expr_atom LE expr_atom\n | expr_atom EQ expr_atom\n | expr_atom NE expr_atomarithmetic_expr : expression PLUS expression\n | expression MINUS expression\n | expression TIMES expression\n | expression DIVIDE expressionremote_keyword_call : ID PIPE LBRACKET ID RBRACKET COMMA parameter_list\n | ID PIPE LBRACKET ID RBRACKET'
9
+ _lr_signature = 'leftCOMMAleftGTLTGELEEQNEleftPLUSMINUSleftTIMESDIVIDEMODULOrightEQUALSAS AUTHOR_KEYWORD BREAK COLON COMMA CONTINUE DATA_KEYWORD DATE DATE_KEYWORD DESCRIPTION_KEYWORD DIVIDE DO ELIF ELSE END EQ EQUALS FALSE FOR FUNCTION GE GT ID IF IMPORT_KEYWORD IN LBRACE LBRACKET LE LPAREN LT MINUS MODULO NAME_KEYWORD NE NUMBER PIPE PLACEHOLDER PLUS RANGE RBRACE RBRACKET REMOTE_KEYWORD RETURN RPAREN STRING TAGS_KEYWORD TEARDOWN TIMES TRUE USINGstart : metadata statements teardown\n | metadata statements\n | statements teardown\n | statementsmetadata : metadata_items\n | emptyempty :metadata_items : metadata_item metadata_items\n | metadata_itemmetadata_item : NAME_KEYWORD COLON metadata_value\n | DESCRIPTION_KEYWORD COLON metadata_value\n | TAGS_KEYWORD COLON LBRACKET tags RBRACKET\n | AUTHOR_KEYWORD COLON metadata_value\n | DATE_KEYWORD COLON DATE\n | DATA_KEYWORD COLON data_source\n | IMPORT_KEYWORD COLON STRING\n | REMOTE_KEYWORD COLON STRING AS IDmetadata_value : STRING\n | IDtags : tag COMMA tags\n | tagtag : STRING\n | IDstatements : statement statements\n | statementstatement : assignment\n | keyword_call\n | remote_keyword_call\n | loop\n | custom_keyword\n | return_statement\n | if_statement\n | break_statement\n | continue_statementassignment : ID EQUALS expression\n | ID EQUALS keyword_call\n | ID EQUALS remote_keyword_callexpression : expr_atom\n | comparison_expr\n | arithmetic_exprexpr_atom : NUMBER\n | STRING\n | PLACEHOLDER\n | ID\n | boolean_expr\n | list_expr\n | dict_expr\n | LPAREN expression RPARENboolean_expr : TRUE\n | FALSElist_expr : LBRACKET list_items RBRACKET\n | LBRACKET RBRACKETlist_items : list_item\n | list_item COMMA list_itemslist_item : expressiondict_expr : LBRACE dict_items RBRACE\n | LBRACE RBRACEdict_items : dict_item\n | dict_item COMMA dict_itemsdict_item : expression COLON expressionloop : FOR ID IN RANGE LPAREN expression COMMA expression RPAREN DO statements ENDkeyword_call : LBRACKET ID RBRACKET COMMA parameter_list\n | LBRACKET ID RBRACKETparameter_list : parameter_itemsparameter_items : parameter_item COMMA parameter_items\n | parameter_itemparameter_item : ID COLON expressionteardown : TEARDOWN DO statements ENDdata_source : STRING USING IDcustom_keyword : FUNCTION ID LPAREN param_definitions RPAREN DO statements ENDparam_definitions : param_def_list\n | param_def_list : param_def COMMA param_def_list\n | param_defparam_def : ID EQUALS STRING\n | ID EQUALS NUMBER\n | IDreturn_statement : RETURN expressionbreak_statement : BREAKcontinue_statement : CONTINUEif_statement : IF expression DO statements END\n | IF expression DO statements elif_clauses END\n | IF expression DO statements ELSE statements END\n | IF expression DO statements elif_clauses ELSE statements ENDelif_clauses : elif_clause\n | elif_clause elif_clauseselif_clause : ELIF expression DO statementscomparison_expr : expr_atom GT expr_atom\n | expr_atom LT expr_atom\n | expr_atom GE expr_atom\n | expr_atom LE expr_atom\n | expr_atom EQ expr_atom\n | expr_atom NE expr_atomarithmetic_expr : expression PLUS expression\n | expression MINUS expression\n | expression TIMES expression\n | expression DIVIDE expression\n | expression MODULO expressionremote_keyword_call : ID PIPE LBRACKET ID RBRACKET COMMA parameter_list\n | ID PIPE LBRACKET ID RBRACKET'
10
10
 
11
- _lr_action_items = {'ID':([0,2,4,5,6,7,8,9,10,11,12,13,14,18,25,26,27,28,33,34,35,38,43,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,65,66,67,68,69,70,71,72,73,74,76,78,79,80,81,82,83,85,86,87,88,89,90,91,92,93,94,95,98,102,105,111,112,113,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,139,140,142,143,144,145,146,147,148,151,155,157,159,161,162,163,167,169,170,174,175,176,177,180,181,183,184,187,189,],[24,24,-5,-6,24,-9,-26,-27,-28,-29,-30,-31,-32,37,45,46,54,54,-8,68,68,68,78,-76,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,54,-47,-48,54,54,24,-10,-18,-19,-11,110,-61,-13,-14,-15,-16,-42,-33,-34,-35,114,115,117,54,54,54,54,54,54,54,54,54,54,-50,-55,24,141,145,146,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,54,-54,54,54,-12,110,-60,-62,-64,-67,-17,-95,54,117,-77,24,54,54,141,141,24,-78,24,-65,-63,-94,54,-79,24,-68,-80,24,-59,]),'LBRACKET':([0,2,4,5,6,7,8,9,10,11,12,13,14,27,28,33,36,43,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,65,66,67,68,69,71,72,73,74,76,78,79,80,81,82,86,87,88,89,90,91,92,93,94,95,98,102,105,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,139,142,143,144,145,146,147,148,155,157,159,161,167,169,170,174,175,176,177,180,181,183,184,187,189,],[18,18,-5,-6,18,-9,-26,-27,-28,-29,-30,-31,-32,61,61,-8,70,82,83,-76,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,61,-47,-48,61,61,18,-10,-18,-19,-11,-61,-13,-14,-15,-16,-42,-33,-34,-35,61,61,61,61,61,61,61,61,61,61,61,-50,-55,18,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,61,-54,61,61,-12,-60,-62,-64,-67,-17,-95,61,-77,18,61,61,18,-78,18,-65,-63,-94,61,-79,18,-68,-80,18,-59,]),'FOR':([0,2,4,5,6,7,8,9,10,11,12,13,14,33,47,48,49,50,51,52,53,54,55,56,57,59,60,65,66,67,68,69,71,72,73,74,76,78,79,80,81,98,102,105,121,122,123,124,125,126,127,128,129,130,131,132,134,139,142,143,144,145,146,147,155,157,167,169,170,174,175,176,180,181,183,184,187,189,],[25,25,-5,-6,25,-9,-26,-27,-28,-29,-30,-31,-32,-8,-76,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,25,-10,-18,-19,-11,-61,-13,-14,-15,-16,-42,-33,-34,-35,-50,-55,25,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,-12,-60,-62,-64,-67,-17,-95,-77,25,25,-78,25,-65,-63,-94,-79,25,-68,-80,25,-59,]),'FUNCTION':([0,2,4,5,6,7,8,9,10,11,12,13,14,33,47,48,49,50,51,52,53,54,55,56,57,59,60,65,66,67,68,69,71,72,73,74,76,78,79,80,81,98,102,105,121,122,123,124,125,126,127,128,129,130,131,132,134,139,142,143,144,145,146,147,155,157,167,169,170,174,175,176,180,181,183,184,187,189,],[26,26,-5,-6,26,-9,-26,-27,-28,-29,-30,-31,-32,-8,-76,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,26,-10,-18,-19,-11,-61,-13,-14,-15,-16,-42,-33,-34,-35,-50,-55,26,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,-12,-60,-62,-64,-67,-17,-95,-77,26,26,-78,26,-65,-63,-94,-79,26,-68,-80,26,-59,]),'RETURN':([0,2,4,5,6,7,8,9,10,11,12,13,14,33,47,48,49,50,51,52,53,54,55,56,57,59,60,65,66,67,68,69,71,72,73,74,76,78,79,80,81,98,102,105,121,122,123,124,125,126,127,128,129,130,131,132,134,139,142,143,144,145,146,147,155,157,167,169,170,174,175,176,180,181,183,184,187,189,],[27,27,-5,-6,27,-9,-26,-27,-28,-29,-30,-31,-32,-8,-76,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,27,-10,-18,-19,-11,-61,-13,-14,-15,-16,-42,-33,-34,-35,-50,-55,27,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,-12,-60,-62,-64,-67,-17,-95,-77,27,27,-78,27,-65,-63,-94,-79,27,-68,-80,27,-59,]),'IF':([0,2,4,5,6,7,8,9,10,11,12,13,14,33,47,48,49,50,51,52,53,54,55,56,57,59,60,65,66,67,68,69,71,72,73,74,76,78,79,80,81,98,102,105,121,122,123,124,125,126,127,128,129,130,131,132,134,139,142,143,144,145,146,147,155,157,167,169,170,174,175,176,180,181,183,184,187,189,],[28,28,-5,-6,28,-9,-26,-27,-28,-29,-30,-31,-32,-8,-76,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,28,-10,-18,-19,-11,-61,-13,-14,-15,-16,-42,-33,-34,-35,-50,-55,28,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,-12,-60,-62,-64,-67,-17,-95,-77,28,28,-78,28,-65,-63,-94,-79,28,-68,-80,28,-59,]),'NAME_KEYWORD':([0,7,66,67,68,69,72,73,74,76,139,145,146,],[15,15,-10,-18,-19,-11,-13,-14,-15,-16,-12,-67,-17,]),'DESCRIPTION_KEYWORD':([0,7,66,67,68,69,72,73,74,76,139,145,146,],[16,16,-10,-18,-19,-11,-13,-14,-15,-16,-12,-67,-17,]),'TAGS_KEYWORD':([0,7,66,67,68,69,72,73,74,76,139,145,146,],[17,17,-10,-18,-19,-11,-13,-14,-15,-16,-12,-67,-17,]),'AUTHOR_KEYWORD':([0,7,66,67,68,69,72,73,74,76,139,145,146,],[19,19,-10,-18,-19,-11,-13,-14,-15,-16,-12,-67,-17,]),'DATE_KEYWORD':([0,7,66,67,68,69,72,73,74,76,139,145,146,],[20,20,-10,-18,-19,-11,-13,-14,-15,-16,-12,-67,-17,]),'DATA_KEYWORD':([0,7,66,67,68,69,72,73,74,76,139,145,146,],[21,21,-10,-18,-19,-11,-13,-14,-15,-16,-12,-67,-17,]),'IMPORT_KEYWORD':([0,7,66,67,68,69,72,73,74,76,139,145,146,],[22,22,-10,-18,-19,-11,-13,-14,-15,-16,-12,-67,-17,]),'REMOTE_KEYWORD':([0,7,66,67,68,69,72,73,74,76,139,145,146,],[23,23,-10,-18,-19,-11,-13,-14,-15,-16,-12,-67,-17,]),'$end':([1,3,6,8,9,10,11,12,13,14,29,30,32,47,48,49,50,51,52,53,54,55,56,57,59,60,64,71,78,79,80,81,98,102,121,122,123,124,125,126,127,128,129,130,131,132,134,138,142,143,144,147,155,169,174,175,176,180,183,184,189,],[0,-4,-25,-26,-27,-28,-29,-30,-31,-32,-2,-3,-24,-76,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,-1,-61,-42,-33,-34,-35,-50,-55,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,-66,-60,-62,-64,-95,-77,-78,-65,-63,-94,-79,-68,-80,-59,]),'TEARDOWN':([3,6,8,9,10,11,12,13,14,29,32,47,48,49,50,51,52,53,54,55,56,57,59,60,71,78,79,80,81,98,102,121,122,123,124,125,126,127,128,129,130,131,132,134,142,143,144,147,155,169,174,175,176,180,183,184,189,],[31,-25,-26,-27,-28,-29,-30,-31,-32,31,-24,-76,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,-61,-42,-33,-34,-35,-50,-55,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,-60,-62,-64,-95,-77,-78,-65,-63,-94,-79,-68,-80,-59,]),'END':([6,8,9,10,11,12,13,14,32,47,48,49,50,51,52,53,54,55,56,57,59,60,71,78,79,80,81,98,102,106,121,122,123,124,125,126,127,128,129,130,131,132,134,137,142,143,144,147,155,156,158,169,171,172,174,175,176,178,179,180,183,184,185,188,189,],[-25,-26,-27,-28,-29,-30,-31,-32,-24,-76,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,-61,-42,-33,-34,-35,-50,-55,138,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,155,-60,-62,-64,-95,-77,169,-81,-78,180,-82,-65,-63,-94,183,184,-79,-68,-80,-83,189,-59,]),'ELSE':([6,8,9,10,11,12,13,14,32,47,48,49,50,51,52,53,54,55,56,57,59,60,71,78,79,80,81,98,102,121,122,123,124,125,126,127,128,129,130,131,132,134,137,142,143,144,147,155,156,158,169,172,174,175,176,180,183,184,185,189,],[-25,-26,-27,-28,-29,-30,-31,-32,-24,-76,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,-61,-42,-33,-34,-35,-50,-55,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,157,-60,-62,-64,-95,-77,170,-81,-78,-82,-65,-63,-94,-79,-68,-80,-83,-59,]),'ELIF':([6,8,9,10,11,12,13,14,32,47,48,49,50,51,52,53,54,55,56,57,59,60,71,78,79,80,81,98,102,121,122,123,124,125,126,127,128,129,130,131,132,134,137,142,143,144,147,155,158,169,174,175,176,180,183,184,185,189,],[-25,-26,-27,-28,-29,-30,-31,-32,-24,-76,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,-61,-42,-33,-34,-35,-50,-55,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,159,-60,-62,-64,-95,-77,159,-78,-65,-63,-94,-79,-68,-80,-83,-59,]),'COLON':([15,16,17,19,20,21,22,23,48,49,50,51,52,53,54,55,56,57,59,60,98,102,104,121,122,123,124,125,126,127,128,129,130,131,132,134,141,],[34,35,36,38,39,40,41,42,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,-50,-55,136,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,161,]),'EQUALS':([24,117,],[43,149,]),'PIPE':([24,78,],[44,44,]),'NUMBER':([27,28,43,58,61,62,82,86,87,88,89,90,91,92,93,94,95,133,135,136,148,149,159,161,177,],[51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,166,51,51,51,]),'STRING':([27,28,34,35,38,40,41,42,43,58,61,62,70,82,86,87,88,89,90,91,92,93,94,95,133,135,136,140,148,149,159,161,177,],[52,52,67,67,67,75,76,77,52,52,52,52,109,52,52,52,52,52,52,52,52,52,52,52,52,52,52,109,52,165,52,52,52,]),'PLACEHOLDER':([27,28,43,58,61,62,82,86,87,88,89,90,91,92,93,94,95,133,135,136,148,159,161,177,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'LPAREN':([27,28,43,46,58,61,62,82,86,87,88,89,90,91,92,93,94,95,116,133,135,136,148,159,161,177,],[58,58,58,85,58,58,58,58,58,58,58,58,58,58,58,58,58,58,148,58,58,58,58,58,58,58,]),'TRUE':([27,28,43,58,61,62,82,86,87,88,89,90,91,92,93,94,95,133,135,136,148,159,161,177,],[59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,]),'FALSE':([27,28,43,58,61,62,82,86,87,88,89,90,91,92,93,94,95,133,135,136,148,159,161,177,],[60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,]),'LBRACE':([27,28,43,58,61,62,82,86,87,88,89,90,91,92,93,94,95,133,135,136,148,159,161,177,],[62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,]),'DO':([31,48,49,50,51,52,53,54,55,56,57,59,60,63,98,102,121,122,123,124,125,126,127,128,129,130,131,132,134,150,173,186,],[65,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,105,-50,-55,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,167,181,187,]),'RBRACKET':([37,48,49,50,51,52,53,54,55,56,57,59,60,61,82,97,98,99,100,102,107,108,109,110,114,115,121,122,123,124,125,126,127,128,129,130,131,132,134,152,160,],[71,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,98,98,132,-50,-51,-53,-55,139,-21,-22,-23,71,147,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,-52,-20,]),'DATE':([39,],[73,]),'IN':([45,],[84,]),'PLUS':([47,48,49,50,51,52,53,54,55,56,57,59,60,63,78,79,96,98,100,102,104,114,121,122,123,124,125,126,127,128,129,130,131,132,134,154,164,173,174,182,],[86,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,86,-42,86,86,-50,86,-55,86,-42,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,86,86,86,86,86,]),'MINUS':([47,48,49,50,51,52,53,54,55,56,57,59,60,63,78,79,96,98,100,102,104,114,121,122,123,124,125,126,127,128,129,130,131,132,134,154,164,173,174,182,],[87,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,87,-42,87,87,-50,87,-55,87,-42,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,87,87,87,87,87,]),'TIMES':([47,48,49,50,51,52,53,54,55,56,57,59,60,63,78,79,96,98,100,102,104,114,121,122,123,124,125,126,127,128,129,130,131,132,134,154,164,173,174,182,],[88,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,88,-42,88,88,-50,88,-55,88,-42,88,88,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,88,88,88,88,88,]),'DIVIDE':([47,48,49,50,51,52,53,54,55,56,57,59,60,63,78,79,96,98,100,102,104,114,121,122,123,124,125,126,127,128,129,130,131,132,134,154,164,173,174,182,],[89,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,89,-42,89,89,-50,89,-55,89,-42,89,89,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,89,89,89,89,89,]),'RPAREN':([48,49,50,51,52,53,54,55,56,57,59,60,85,96,98,102,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,134,165,166,168,182,],[-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,-70,131,-50,-55,-75,150,-69,-72,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,-73,-74,-71,186,]),'COMMA':([48,49,50,51,52,53,54,55,56,57,59,60,71,98,99,100,102,103,108,109,110,114,117,120,121,122,123,124,125,126,127,128,129,130,131,132,134,144,147,154,164,165,166,174,],[-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,111,-50,133,-53,-55,135,140,-22,-23,-42,-75,151,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,162,163,-58,177,-73,-74,-65,]),'RBRACE':([48,49,50,51,52,53,54,55,56,57,59,60,62,98,101,102,103,121,122,123,124,125,126,127,128,129,130,131,132,134,153,154,],[-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-47,-48,102,-50,134,-55,-56,-90,-91,-92,-93,-84,-85,-86,-87,-88,-89,-46,-49,-54,-57,-58,]),'GT':([48,51,52,53,54,55,56,57,59,60,78,98,102,114,131,132,134,],[90,-39,-40,-41,-42,-43,-44,-45,-47,-48,-42,-50,-55,-42,-46,-49,-54,]),'LT':([48,51,52,53,54,55,56,57,59,60,78,98,102,114,131,132,134,],[91,-39,-40,-41,-42,-43,-44,-45,-47,-48,-42,-50,-55,-42,-46,-49,-54,]),'GE':([48,51,52,53,54,55,56,57,59,60,78,98,102,114,131,132,134,],[92,-39,-40,-41,-42,-43,-44,-45,-47,-48,-42,-50,-55,-42,-46,-49,-54,]),'LE':([48,51,52,53,54,55,56,57,59,60,78,98,102,114,131,132,134,],[93,-39,-40,-41,-42,-43,-44,-45,-47,-48,-42,-50,-55,-42,-46,-49,-54,]),'EQ':([48,51,52,53,54,55,56,57,59,60,78,98,102,114,131,132,134,],[94,-39,-40,-41,-42,-43,-44,-45,-47,-48,-42,-50,-55,-42,-46,-49,-54,]),'NE':([48,51,52,53,54,55,56,57,59,60,78,98,102,114,131,132,134,],[95,-39,-40,-41,-42,-43,-44,-45,-47,-48,-42,-50,-55,-42,-46,-49,-54,]),'USING':([75,],[112,]),'AS':([77,],[113,]),'RANGE':([84,],[116,]),}
11
+ _lr_action_items = {'ID':([0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,20,27,28,29,30,31,32,37,38,39,42,47,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,69,70,71,72,73,74,75,76,77,78,80,82,83,84,85,86,87,89,90,91,92,93,94,95,96,97,98,99,100,103,107,110,116,117,118,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,145,146,148,149,150,151,152,153,154,157,161,163,165,167,168,169,173,175,176,180,181,182,183,186,187,189,190,193,195,],[26,26,-5,-6,26,-9,-26,-27,-28,-29,-30,-31,-32,-33,-34,41,49,50,58,58,-79,-80,-8,72,72,72,82,-78,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,58,-49,-50,58,58,26,-10,-18,-19,-11,115,-63,-13,-14,-15,-16,-44,-35,-36,-37,119,120,122,58,58,58,58,58,58,58,58,58,58,58,-52,-57,26,147,151,152,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,58,-56,58,58,-12,115,-62,-64,-66,-69,-17,-100,58,122,-81,26,58,58,147,147,26,-82,26,-67,-65,-99,58,-83,26,-70,-84,26,-61,]),'LBRACKET':([0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,29,30,31,32,37,40,47,48,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,69,70,71,72,73,75,76,77,78,80,82,83,84,85,86,90,91,92,93,94,95,96,97,98,99,100,103,107,110,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,145,148,149,150,151,152,153,154,161,163,165,167,173,175,176,180,181,182,183,186,187,189,190,193,195,],[20,20,-5,-6,20,-9,-26,-27,-28,-29,-30,-31,-32,-33,-34,65,65,-79,-80,-8,74,86,87,-78,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,65,-49,-50,65,65,20,-10,-18,-19,-11,-63,-13,-14,-15,-16,-44,-35,-36,-37,65,65,65,65,65,65,65,65,65,65,65,65,-52,-57,20,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,65,-56,65,65,-12,-62,-64,-66,-69,-17,-100,65,-81,20,65,65,20,-82,20,-67,-65,-99,65,-83,20,-70,-84,20,-61,]),'FOR':([0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,31,32,37,51,52,53,54,55,56,57,58,59,60,61,63,64,69,70,71,72,73,75,76,77,78,80,82,83,84,85,103,107,110,126,127,128,129,130,131,132,133,134,135,136,137,138,140,145,148,149,150,151,152,153,161,163,173,175,176,180,181,182,186,187,189,190,193,195,],[27,27,-5,-6,27,-9,-26,-27,-28,-29,-30,-31,-32,-33,-34,-79,-80,-8,-78,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,27,-10,-18,-19,-11,-63,-13,-14,-15,-16,-44,-35,-36,-37,-52,-57,27,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,-12,-62,-64,-66,-69,-17,-100,-81,27,27,-82,27,-67,-65,-99,-83,27,-70,-84,27,-61,]),'FUNCTION':([0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,31,32,37,51,52,53,54,55,56,57,58,59,60,61,63,64,69,70,71,72,73,75,76,77,78,80,82,83,84,85,103,107,110,126,127,128,129,130,131,132,133,134,135,136,137,138,140,145,148,149,150,151,152,153,161,163,173,175,176,180,181,182,186,187,189,190,193,195,],[28,28,-5,-6,28,-9,-26,-27,-28,-29,-30,-31,-32,-33,-34,-79,-80,-8,-78,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,28,-10,-18,-19,-11,-63,-13,-14,-15,-16,-44,-35,-36,-37,-52,-57,28,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,-12,-62,-64,-66,-69,-17,-100,-81,28,28,-82,28,-67,-65,-99,-83,28,-70,-84,28,-61,]),'RETURN':([0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,31,32,37,51,52,53,54,55,56,57,58,59,60,61,63,64,69,70,71,72,73,75,76,77,78,80,82,83,84,85,103,107,110,126,127,128,129,130,131,132,133,134,135,136,137,138,140,145,148,149,150,151,152,153,161,163,173,175,176,180,181,182,186,187,189,190,193,195,],[29,29,-5,-6,29,-9,-26,-27,-28,-29,-30,-31,-32,-33,-34,-79,-80,-8,-78,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,29,-10,-18,-19,-11,-63,-13,-14,-15,-16,-44,-35,-36,-37,-52,-57,29,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,-12,-62,-64,-66,-69,-17,-100,-81,29,29,-82,29,-67,-65,-99,-83,29,-70,-84,29,-61,]),'IF':([0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,31,32,37,51,52,53,54,55,56,57,58,59,60,61,63,64,69,70,71,72,73,75,76,77,78,80,82,83,84,85,103,107,110,126,127,128,129,130,131,132,133,134,135,136,137,138,140,145,148,149,150,151,152,153,161,163,173,175,176,180,181,182,186,187,189,190,193,195,],[30,30,-5,-6,30,-9,-26,-27,-28,-29,-30,-31,-32,-33,-34,-79,-80,-8,-78,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,30,-10,-18,-19,-11,-63,-13,-14,-15,-16,-44,-35,-36,-37,-52,-57,30,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,-12,-62,-64,-66,-69,-17,-100,-81,30,30,-82,30,-67,-65,-99,-83,30,-70,-84,30,-61,]),'BREAK':([0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,31,32,37,51,52,53,54,55,56,57,58,59,60,61,63,64,69,70,71,72,73,75,76,77,78,80,82,83,84,85,103,107,110,126,127,128,129,130,131,132,133,134,135,136,137,138,140,145,148,149,150,151,152,153,161,163,173,175,176,180,181,182,186,187,189,190,193,195,],[31,31,-5,-6,31,-9,-26,-27,-28,-29,-30,-31,-32,-33,-34,-79,-80,-8,-78,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,31,-10,-18,-19,-11,-63,-13,-14,-15,-16,-44,-35,-36,-37,-52,-57,31,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,-12,-62,-64,-66,-69,-17,-100,-81,31,31,-82,31,-67,-65,-99,-83,31,-70,-84,31,-61,]),'CONTINUE':([0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,31,32,37,51,52,53,54,55,56,57,58,59,60,61,63,64,69,70,71,72,73,75,76,77,78,80,82,83,84,85,103,107,110,126,127,128,129,130,131,132,133,134,135,136,137,138,140,145,148,149,150,151,152,153,161,163,173,175,176,180,181,182,186,187,189,190,193,195,],[32,32,-5,-6,32,-9,-26,-27,-28,-29,-30,-31,-32,-33,-34,-79,-80,-8,-78,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,32,-10,-18,-19,-11,-63,-13,-14,-15,-16,-44,-35,-36,-37,-52,-57,32,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,-12,-62,-64,-66,-69,-17,-100,-81,32,32,-82,32,-67,-65,-99,-83,32,-70,-84,32,-61,]),'NAME_KEYWORD':([0,7,70,71,72,73,76,77,78,80,145,151,152,],[17,17,-10,-18,-19,-11,-13,-14,-15,-16,-12,-69,-17,]),'DESCRIPTION_KEYWORD':([0,7,70,71,72,73,76,77,78,80,145,151,152,],[18,18,-10,-18,-19,-11,-13,-14,-15,-16,-12,-69,-17,]),'TAGS_KEYWORD':([0,7,70,71,72,73,76,77,78,80,145,151,152,],[19,19,-10,-18,-19,-11,-13,-14,-15,-16,-12,-69,-17,]),'AUTHOR_KEYWORD':([0,7,70,71,72,73,76,77,78,80,145,151,152,],[21,21,-10,-18,-19,-11,-13,-14,-15,-16,-12,-69,-17,]),'DATE_KEYWORD':([0,7,70,71,72,73,76,77,78,80,145,151,152,],[22,22,-10,-18,-19,-11,-13,-14,-15,-16,-12,-69,-17,]),'DATA_KEYWORD':([0,7,70,71,72,73,76,77,78,80,145,151,152,],[23,23,-10,-18,-19,-11,-13,-14,-15,-16,-12,-69,-17,]),'IMPORT_KEYWORD':([0,7,70,71,72,73,76,77,78,80,145,151,152,],[24,24,-10,-18,-19,-11,-13,-14,-15,-16,-12,-69,-17,]),'REMOTE_KEYWORD':([0,7,70,71,72,73,76,77,78,80,145,151,152,],[25,25,-10,-18,-19,-11,-13,-14,-15,-16,-12,-69,-17,]),'$end':([1,3,6,8,9,10,11,12,13,14,15,16,31,32,33,34,36,51,52,53,54,55,56,57,58,59,60,61,63,64,68,75,82,83,84,85,103,107,126,127,128,129,130,131,132,133,134,135,136,137,138,140,144,148,149,150,153,161,175,180,181,182,186,189,190,195,],[0,-4,-25,-26,-27,-28,-29,-30,-31,-32,-33,-34,-79,-80,-2,-3,-24,-78,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,-1,-63,-44,-35,-36,-37,-52,-57,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,-68,-62,-64,-66,-100,-81,-82,-67,-65,-99,-83,-70,-84,-61,]),'TEARDOWN':([3,6,8,9,10,11,12,13,14,15,16,31,32,33,36,51,52,53,54,55,56,57,58,59,60,61,63,64,75,82,83,84,85,103,107,126,127,128,129,130,131,132,133,134,135,136,137,138,140,148,149,150,153,161,175,180,181,182,186,189,190,195,],[35,-25,-26,-27,-28,-29,-30,-31,-32,-33,-34,-79,-80,35,-24,-78,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,-63,-44,-35,-36,-37,-52,-57,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,-62,-64,-66,-100,-81,-82,-67,-65,-99,-83,-70,-84,-61,]),'END':([6,8,9,10,11,12,13,14,15,16,31,32,36,51,52,53,54,55,56,57,58,59,60,61,63,64,75,82,83,84,85,103,107,111,126,127,128,129,130,131,132,133,134,135,136,137,138,140,143,148,149,150,153,161,162,164,175,177,178,180,181,182,184,185,186,189,190,191,194,195,],[-25,-26,-27,-28,-29,-30,-31,-32,-33,-34,-79,-80,-24,-78,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,-63,-44,-35,-36,-37,-52,-57,144,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,161,-62,-64,-66,-100,-81,175,-85,-82,186,-86,-67,-65,-99,189,190,-83,-70,-84,-87,195,-61,]),'ELSE':([6,8,9,10,11,12,13,14,15,16,31,32,36,51,52,53,54,55,56,57,58,59,60,61,63,64,75,82,83,84,85,103,107,126,127,128,129,130,131,132,133,134,135,136,137,138,140,143,148,149,150,153,161,162,164,175,178,180,181,182,186,189,190,191,195,],[-25,-26,-27,-28,-29,-30,-31,-32,-33,-34,-79,-80,-24,-78,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,-63,-44,-35,-36,-37,-52,-57,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,163,-62,-64,-66,-100,-81,176,-85,-82,-86,-67,-65,-99,-83,-70,-84,-87,-61,]),'ELIF':([6,8,9,10,11,12,13,14,15,16,31,32,36,51,52,53,54,55,56,57,58,59,60,61,63,64,75,82,83,84,85,103,107,126,127,128,129,130,131,132,133,134,135,136,137,138,140,143,148,149,150,153,161,164,175,180,181,182,186,189,190,191,195,],[-25,-26,-27,-28,-29,-30,-31,-32,-33,-34,-79,-80,-24,-78,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,-63,-44,-35,-36,-37,-52,-57,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,165,-62,-64,-66,-100,-81,165,-82,-67,-65,-99,-83,-70,-84,-87,-61,]),'COLON':([17,18,19,21,22,23,24,25,52,53,54,55,56,57,58,59,60,61,63,64,103,107,109,126,127,128,129,130,131,132,133,134,135,136,137,138,140,147,],[38,39,40,42,43,44,45,46,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,-52,-57,142,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,167,]),'EQUALS':([26,122,],[47,155,]),'PIPE':([26,82,],[48,48,]),'NUMBER':([29,30,47,62,65,66,86,90,91,92,93,94,95,96,97,98,99,100,139,141,142,154,155,165,167,183,],[55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,172,55,55,55,]),'STRING':([29,30,38,39,42,44,45,46,47,62,65,66,74,86,90,91,92,93,94,95,96,97,98,99,100,139,141,142,146,154,155,165,167,183,],[56,56,71,71,71,79,80,81,56,56,56,56,114,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,114,56,171,56,56,56,]),'PLACEHOLDER':([29,30,47,62,65,66,86,90,91,92,93,94,95,96,97,98,99,100,139,141,142,154,165,167,183,],[57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,]),'LPAREN':([29,30,47,50,62,65,66,86,90,91,92,93,94,95,96,97,98,99,100,121,139,141,142,154,165,167,183,],[62,62,62,89,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,154,62,62,62,62,62,62,62,]),'TRUE':([29,30,47,62,65,66,86,90,91,92,93,94,95,96,97,98,99,100,139,141,142,154,165,167,183,],[63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,]),'FALSE':([29,30,47,62,65,66,86,90,91,92,93,94,95,96,97,98,99,100,139,141,142,154,165,167,183,],[64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,]),'LBRACE':([29,30,47,62,65,66,86,90,91,92,93,94,95,96,97,98,99,100,139,141,142,154,165,167,183,],[66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,]),'DO':([35,52,53,54,55,56,57,58,59,60,61,63,64,67,103,107,126,127,128,129,130,131,132,133,134,135,136,137,138,140,156,179,192,],[69,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,110,-52,-57,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,173,187,193,]),'RBRACKET':([41,52,53,54,55,56,57,58,59,60,61,63,64,65,86,102,103,104,105,107,112,113,114,115,119,120,126,127,128,129,130,131,132,133,134,135,136,137,138,140,158,166,],[75,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,103,103,138,-52,-53,-55,-57,145,-21,-22,-23,75,153,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,-54,-20,]),'DATE':([43,],[77,]),'IN':([49,],[88,]),'PLUS':([51,52,53,54,55,56,57,58,59,60,61,63,64,67,82,83,101,103,105,107,109,119,126,127,128,129,130,131,132,133,134,135,136,137,138,140,160,170,179,180,188,],[90,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,90,-44,90,90,-52,90,-57,90,-44,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,90,90,90,90,90,]),'MINUS':([51,52,53,54,55,56,57,58,59,60,61,63,64,67,82,83,101,103,105,107,109,119,126,127,128,129,130,131,132,133,134,135,136,137,138,140,160,170,179,180,188,],[91,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,91,-44,91,91,-52,91,-57,91,-44,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,91,91,91,91,91,]),'TIMES':([51,52,53,54,55,56,57,58,59,60,61,63,64,67,82,83,101,103,105,107,109,119,126,127,128,129,130,131,132,133,134,135,136,137,138,140,160,170,179,180,188,],[92,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,92,-44,92,92,-52,92,-57,92,-44,92,92,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,92,92,92,92,92,]),'DIVIDE':([51,52,53,54,55,56,57,58,59,60,61,63,64,67,82,83,101,103,105,107,109,119,126,127,128,129,130,131,132,133,134,135,136,137,138,140,160,170,179,180,188,],[93,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,93,-44,93,93,-52,93,-57,93,-44,93,93,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,93,93,93,93,93,]),'MODULO':([51,52,53,54,55,56,57,58,59,60,61,63,64,67,82,83,101,103,105,107,109,119,126,127,128,129,130,131,132,133,134,135,136,137,138,140,160,170,179,180,188,],[94,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,94,-44,94,94,-52,94,-57,94,-44,94,94,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,94,94,94,94,94,]),'RPAREN':([52,53,54,55,56,57,58,59,60,61,63,64,89,101,103,107,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,140,171,172,174,188,],[-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,-72,137,-52,-57,-77,156,-71,-74,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,-75,-76,-73,192,]),'COMMA':([52,53,54,55,56,57,58,59,60,61,63,64,75,103,104,105,107,108,113,114,115,119,122,125,126,127,128,129,130,131,132,133,134,135,136,137,138,140,150,153,160,170,171,172,180,],[-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,116,-52,139,-55,-57,141,146,-22,-23,-44,-77,157,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,168,169,-60,183,-75,-76,-67,]),'RBRACE':([52,53,54,55,56,57,58,59,60,61,63,64,66,103,106,107,108,126,127,128,129,130,131,132,133,134,135,136,137,138,140,159,160,],[-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-49,-50,107,-52,140,-57,-58,-94,-95,-96,-97,-98,-88,-89,-90,-91,-92,-93,-48,-51,-56,-59,-60,]),'GT':([52,55,56,57,58,59,60,61,63,64,82,103,107,119,137,138,140,],[95,-41,-42,-43,-44,-45,-46,-47,-49,-50,-44,-52,-57,-44,-48,-51,-56,]),'LT':([52,55,56,57,58,59,60,61,63,64,82,103,107,119,137,138,140,],[96,-41,-42,-43,-44,-45,-46,-47,-49,-50,-44,-52,-57,-44,-48,-51,-56,]),'GE':([52,55,56,57,58,59,60,61,63,64,82,103,107,119,137,138,140,],[97,-41,-42,-43,-44,-45,-46,-47,-49,-50,-44,-52,-57,-44,-48,-51,-56,]),'LE':([52,55,56,57,58,59,60,61,63,64,82,103,107,119,137,138,140,],[98,-41,-42,-43,-44,-45,-46,-47,-49,-50,-44,-52,-57,-44,-48,-51,-56,]),'EQ':([52,55,56,57,58,59,60,61,63,64,82,103,107,119,137,138,140,],[99,-41,-42,-43,-44,-45,-46,-47,-49,-50,-44,-52,-57,-44,-48,-51,-56,]),'NE':([52,55,56,57,58,59,60,61,63,64,82,103,107,119,137,138,140,],[100,-41,-42,-43,-44,-45,-46,-47,-49,-50,-44,-52,-57,-44,-48,-51,-56,]),'USING':([79,],[117,]),'AS':([81,],[118,]),'RANGE':([88,],[121,]),}
12
12
 
13
13
  _lr_action = {}
14
14
  for _k, _v in _lr_action_items.items():
@@ -17,7 +17,7 @@ for _k, _v in _lr_action_items.items():
17
17
  _lr_action[_x][_k] = _y
18
18
  del _lr_action_items
19
19
 
20
- _lr_goto_items = {'start':([0,],[1,]),'metadata':([0,],[2,]),'statements':([0,2,6,65,105,157,167,170,181,187,],[3,29,32,106,137,171,178,179,185,188,]),'metadata_items':([0,7,],[4,33,]),'empty':([0,],[5,]),'statement':([0,2,6,65,105,157,167,170,181,187,],[6,6,6,6,6,6,6,6,6,6,]),'metadata_item':([0,7,],[7,7,]),'assignment':([0,2,6,65,105,157,167,170,181,187,],[8,8,8,8,8,8,8,8,8,8,]),'keyword_call':([0,2,6,43,65,105,157,167,170,181,187,],[9,9,9,80,9,9,9,9,9,9,9,]),'remote_keyword_call':([0,2,6,43,65,105,157,167,170,181,187,],[10,10,10,81,10,10,10,10,10,10,10,]),'loop':([0,2,6,65,105,157,167,170,181,187,],[11,11,11,11,11,11,11,11,11,11,]),'custom_keyword':([0,2,6,65,105,157,167,170,181,187,],[12,12,12,12,12,12,12,12,12,12,]),'return_statement':([0,2,6,65,105,157,167,170,181,187,],[13,13,13,13,13,13,13,13,13,13,]),'if_statement':([0,2,6,65,105,157,167,170,181,187,],[14,14,14,14,14,14,14,14,14,14,]),'teardown':([3,29,],[30,64,]),'expression':([27,28,43,58,61,62,82,86,87,88,89,133,135,136,148,159,161,177,],[47,63,79,96,100,104,100,121,122,123,124,100,104,154,164,173,174,182,]),'expr_atom':([27,28,43,58,61,62,82,86,87,88,89,90,91,92,93,94,95,133,135,136,148,159,161,177,],[48,48,48,48,48,48,48,48,48,48,48,125,126,127,128,129,130,48,48,48,48,48,48,48,]),'comparison_expr':([27,28,43,58,61,62,82,86,87,88,89,133,135,136,148,159,161,177,],[49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,]),'arithmetic_expr':([27,28,43,58,61,62,82,86,87,88,89,133,135,136,148,159,161,177,],[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,]),'boolean_expr':([27,28,43,58,61,62,82,86,87,88,89,90,91,92,93,94,95,133,135,136,148,159,161,177,],[55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,]),'list_expr':([27,28,43,58,61,62,82,86,87,88,89,90,91,92,93,94,95,133,135,136,148,159,161,177,],[56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,]),'dict_expr':([27,28,43,58,61,62,82,86,87,88,89,90,91,92,93,94,95,133,135,136,148,159,161,177,],[57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,]),'metadata_value':([34,35,38,],[66,69,72,]),'data_source':([40,],[74,]),'list_items':([61,82,133,],[97,97,152,]),'list_item':([61,82,133,],[99,99,99,]),'dict_items':([62,135,],[101,153,]),'dict_item':([62,135,],[103,103,]),'tags':([70,140,],[107,160,]),'tag':([70,140,],[108,108,]),'param_definitions':([85,],[118,]),'param_def_list':([85,151,],[119,168,]),'param_def':([85,151,],[120,120,]),'parameter_list':([111,163,],[142,176,]),'parameter_items':([111,162,163,],[143,175,143,]),'parameter_item':([111,162,163,],[144,144,144,]),'elif_clauses':([137,158,],[156,172,]),'elif_clause':([137,158,],[158,158,]),}
20
+ _lr_goto_items = {'start':([0,],[1,]),'metadata':([0,],[2,]),'statements':([0,2,6,69,110,163,173,176,187,193,],[3,33,36,111,143,177,184,185,191,194,]),'metadata_items':([0,7,],[4,37,]),'empty':([0,],[5,]),'statement':([0,2,6,69,110,163,173,176,187,193,],[6,6,6,6,6,6,6,6,6,6,]),'metadata_item':([0,7,],[7,7,]),'assignment':([0,2,6,69,110,163,173,176,187,193,],[8,8,8,8,8,8,8,8,8,8,]),'keyword_call':([0,2,6,47,69,110,163,173,176,187,193,],[9,9,9,84,9,9,9,9,9,9,9,]),'remote_keyword_call':([0,2,6,47,69,110,163,173,176,187,193,],[10,10,10,85,10,10,10,10,10,10,10,]),'loop':([0,2,6,69,110,163,173,176,187,193,],[11,11,11,11,11,11,11,11,11,11,]),'custom_keyword':([0,2,6,69,110,163,173,176,187,193,],[12,12,12,12,12,12,12,12,12,12,]),'return_statement':([0,2,6,69,110,163,173,176,187,193,],[13,13,13,13,13,13,13,13,13,13,]),'if_statement':([0,2,6,69,110,163,173,176,187,193,],[14,14,14,14,14,14,14,14,14,14,]),'break_statement':([0,2,6,69,110,163,173,176,187,193,],[15,15,15,15,15,15,15,15,15,15,]),'continue_statement':([0,2,6,69,110,163,173,176,187,193,],[16,16,16,16,16,16,16,16,16,16,]),'teardown':([3,33,],[34,68,]),'expression':([29,30,47,62,65,66,86,90,91,92,93,94,139,141,142,154,165,167,183,],[51,67,83,101,105,109,105,126,127,128,129,130,105,109,160,170,179,180,188,]),'expr_atom':([29,30,47,62,65,66,86,90,91,92,93,94,95,96,97,98,99,100,139,141,142,154,165,167,183,],[52,52,52,52,52,52,52,52,52,52,52,52,131,132,133,134,135,136,52,52,52,52,52,52,52,]),'comparison_expr':([29,30,47,62,65,66,86,90,91,92,93,94,139,141,142,154,165,167,183,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'arithmetic_expr':([29,30,47,62,65,66,86,90,91,92,93,94,139,141,142,154,165,167,183,],[54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,]),'boolean_expr':([29,30,47,62,65,66,86,90,91,92,93,94,95,96,97,98,99,100,139,141,142,154,165,167,183,],[59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,]),'list_expr':([29,30,47,62,65,66,86,90,91,92,93,94,95,96,97,98,99,100,139,141,142,154,165,167,183,],[60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,]),'dict_expr':([29,30,47,62,65,66,86,90,91,92,93,94,95,96,97,98,99,100,139,141,142,154,165,167,183,],[61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,]),'metadata_value':([38,39,42,],[70,73,76,]),'data_source':([44,],[78,]),'list_items':([65,86,139,],[102,102,158,]),'list_item':([65,86,139,],[104,104,104,]),'dict_items':([66,141,],[106,159,]),'dict_item':([66,141,],[108,108,]),'tags':([74,146,],[112,166,]),'tag':([74,146,],[113,113,]),'param_definitions':([89,],[123,]),'param_def_list':([89,157,],[124,174,]),'param_def':([89,157,],[125,125,]),'parameter_list':([116,169,],[148,182,]),'parameter_items':([116,168,169,],[149,181,149,]),'parameter_item':([116,168,169,],[150,150,150,]),'elif_clauses':([143,164,],[162,178,]),'elif_clause':([143,164,],[164,164,]),}
21
21
 
22
22
  _lr_goto = {}
23
23
  for _k, _v in _lr_goto_items.items():
@@ -59,67 +59,72 @@ _lr_productions = [
59
59
  ('statement -> custom_keyword','statement',1,'p_statement','parser.py',125),
60
60
  ('statement -> return_statement','statement',1,'p_statement','parser.py',126),
61
61
  ('statement -> if_statement','statement',1,'p_statement','parser.py',127),
62
- ('assignment -> ID EQUALS expression','assignment',3,'p_assignment','parser.py',132),
63
- ('assignment -> ID EQUALS keyword_call','assignment',3,'p_assignment','parser.py',133),
64
- ('assignment -> ID EQUALS remote_keyword_call','assignment',3,'p_assignment','parser.py',134),
65
- ('expression -> expr_atom','expression',1,'p_expression','parser.py',144),
66
- ('expression -> comparison_expr','expression',1,'p_expression','parser.py',145),
67
- ('expression -> arithmetic_expr','expression',1,'p_expression','parser.py',146),
68
- ('expr_atom -> NUMBER','expr_atom',1,'p_expr_atom','parser.py',155),
69
- ('expr_atom -> STRING','expr_atom',1,'p_expr_atom','parser.py',156),
70
- ('expr_atom -> PLACEHOLDER','expr_atom',1,'p_expr_atom','parser.py',157),
71
- ('expr_atom -> ID','expr_atom',1,'p_expr_atom','parser.py',158),
72
- ('expr_atom -> boolean_expr','expr_atom',1,'p_expr_atom','parser.py',159),
73
- ('expr_atom -> list_expr','expr_atom',1,'p_expr_atom','parser.py',160),
74
- ('expr_atom -> dict_expr','expr_atom',1,'p_expr_atom','parser.py',161),
75
- ('expr_atom -> LPAREN expression RPAREN','expr_atom',3,'p_expr_atom','parser.py',162),
76
- ('boolean_expr -> TRUE','boolean_expr',1,'p_boolean_expr','parser.py',173),
77
- ('boolean_expr -> FALSE','boolean_expr',1,'p_boolean_expr','parser.py',174),
78
- ('list_expr -> LBRACKET list_items RBRACKET','list_expr',3,'p_list_expr','parser.py',179),
79
- ('list_expr -> LBRACKET RBRACKET','list_expr',2,'p_list_expr','parser.py',180),
80
- ('list_items -> list_item','list_items',1,'p_list_items','parser.py',188),
81
- ('list_items -> list_item COMMA list_items','list_items',3,'p_list_items','parser.py',189),
82
- ('list_item -> expression','list_item',1,'p_list_item','parser.py',197),
83
- ('dict_expr -> LBRACE dict_items RBRACE','dict_expr',3,'p_dict_expr','parser.py',202),
84
- ('dict_expr -> LBRACE RBRACE','dict_expr',2,'p_dict_expr','parser.py',203),
85
- ('dict_items -> dict_item','dict_items',1,'p_dict_items','parser.py',211),
86
- ('dict_items -> dict_item COMMA dict_items','dict_items',3,'p_dict_items','parser.py',212),
87
- ('dict_item -> expression COLON expression','dict_item',3,'p_dict_item','parser.py',220),
88
- ('loop -> FOR ID IN RANGE LPAREN expression COMMA expression RPAREN DO statements END','loop',12,'p_loop','parser.py',225),
89
- ('keyword_call -> LBRACKET ID RBRACKET COMMA parameter_list','keyword_call',5,'p_keyword_call','parser.py',230),
90
- ('keyword_call -> LBRACKET ID RBRACKET','keyword_call',3,'p_keyword_call','parser.py',231),
91
- ('parameter_list -> parameter_items','parameter_list',1,'p_parameter_list','parser.py',239),
92
- ('parameter_items -> parameter_item COMMA parameter_items','parameter_items',3,'p_parameter_items','parser.py',244),
93
- ('parameter_items -> parameter_item','parameter_items',1,'p_parameter_items','parser.py',245),
94
- ('parameter_item -> ID COLON expression','parameter_item',3,'p_parameter_item','parser.py',253),
95
- ('teardown -> TEARDOWN DO statements END','teardown',4,'p_teardown','parser.py',258),
96
- ('data_source -> STRING USING ID','data_source',3,'p_data_source','parser.py',263),
97
- ('custom_keyword -> FUNCTION ID LPAREN param_definitions RPAREN DO statements END','custom_keyword',8,'p_custom_keyword','parser.py',268),
98
- ('param_definitions -> param_def_list','param_definitions',1,'p_param_definitions','parser.py',273),
99
- ('param_definitions -> <empty>','param_definitions',0,'p_param_definitions','parser.py',274),
100
- ('param_def_list -> param_def COMMA param_def_list','param_def_list',3,'p_param_def_list','parser.py',282),
101
- ('param_def_list -> param_def','param_def_list',1,'p_param_def_list','parser.py',283),
102
- ('param_def -> ID EQUALS STRING','param_def',3,'p_param_def','parser.py',291),
103
- ('param_def -> ID EQUALS NUMBER','param_def',3,'p_param_def','parser.py',292),
104
- ('param_def -> ID','param_def',1,'p_param_def','parser.py',293),
105
- ('return_statement -> RETURN expression','return_statement',2,'p_return_statement','parser.py',301),
106
- ('if_statement -> IF expression DO statements END','if_statement',5,'p_if_statement','parser.py',306),
107
- ('if_statement -> IF expression DO statements elif_clauses END','if_statement',6,'p_if_statement','parser.py',307),
108
- ('if_statement -> IF expression DO statements ELSE statements END','if_statement',7,'p_if_statement','parser.py',308),
109
- ('if_statement -> IF expression DO statements elif_clauses ELSE statements END','if_statement',8,'p_if_statement','parser.py',309),
110
- ('elif_clauses -> elif_clause','elif_clauses',1,'p_elif_clauses','parser.py',325),
111
- ('elif_clauses -> elif_clause elif_clauses','elif_clauses',2,'p_elif_clauses','parser.py',326),
112
- ('elif_clause -> ELIF expression DO statements','elif_clause',4,'p_elif_clause','parser.py',334),
113
- ('comparison_expr -> expr_atom GT expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',339),
114
- ('comparison_expr -> expr_atom LT expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',340),
115
- ('comparison_expr -> expr_atom GE expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',341),
116
- ('comparison_expr -> expr_atom LE expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',342),
117
- ('comparison_expr -> expr_atom EQ expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',343),
118
- ('comparison_expr -> expr_atom NE expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',344),
119
- ('arithmetic_expr -> expression PLUS expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',367),
120
- ('arithmetic_expr -> expression MINUS expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',368),
121
- ('arithmetic_expr -> expression TIMES expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',369),
122
- ('arithmetic_expr -> expression DIVIDE expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',370),
123
- ('remote_keyword_call -> ID PIPE LBRACKET ID RBRACKET COMMA parameter_list','remote_keyword_call',7,'p_remote_keyword_call','parser.py',401),
124
- ('remote_keyword_call -> ID PIPE LBRACKET ID RBRACKET','remote_keyword_call',5,'p_remote_keyword_call','parser.py',402),
62
+ ('statement -> break_statement','statement',1,'p_statement','parser.py',128),
63
+ ('statement -> continue_statement','statement',1,'p_statement','parser.py',129),
64
+ ('assignment -> ID EQUALS expression','assignment',3,'p_assignment','parser.py',134),
65
+ ('assignment -> ID EQUALS keyword_call','assignment',3,'p_assignment','parser.py',135),
66
+ ('assignment -> ID EQUALS remote_keyword_call','assignment',3,'p_assignment','parser.py',136),
67
+ ('expression -> expr_atom','expression',1,'p_expression','parser.py',146),
68
+ ('expression -> comparison_expr','expression',1,'p_expression','parser.py',147),
69
+ ('expression -> arithmetic_expr','expression',1,'p_expression','parser.py',148),
70
+ ('expr_atom -> NUMBER','expr_atom',1,'p_expr_atom','parser.py',157),
71
+ ('expr_atom -> STRING','expr_atom',1,'p_expr_atom','parser.py',158),
72
+ ('expr_atom -> PLACEHOLDER','expr_atom',1,'p_expr_atom','parser.py',159),
73
+ ('expr_atom -> ID','expr_atom',1,'p_expr_atom','parser.py',160),
74
+ ('expr_atom -> boolean_expr','expr_atom',1,'p_expr_atom','parser.py',161),
75
+ ('expr_atom -> list_expr','expr_atom',1,'p_expr_atom','parser.py',162),
76
+ ('expr_atom -> dict_expr','expr_atom',1,'p_expr_atom','parser.py',163),
77
+ ('expr_atom -> LPAREN expression RPAREN','expr_atom',3,'p_expr_atom','parser.py',164),
78
+ ('boolean_expr -> TRUE','boolean_expr',1,'p_boolean_expr','parser.py',175),
79
+ ('boolean_expr -> FALSE','boolean_expr',1,'p_boolean_expr','parser.py',176),
80
+ ('list_expr -> LBRACKET list_items RBRACKET','list_expr',3,'p_list_expr','parser.py',181),
81
+ ('list_expr -> LBRACKET RBRACKET','list_expr',2,'p_list_expr','parser.py',182),
82
+ ('list_items -> list_item','list_items',1,'p_list_items','parser.py',190),
83
+ ('list_items -> list_item COMMA list_items','list_items',3,'p_list_items','parser.py',191),
84
+ ('list_item -> expression','list_item',1,'p_list_item','parser.py',199),
85
+ ('dict_expr -> LBRACE dict_items RBRACE','dict_expr',3,'p_dict_expr','parser.py',204),
86
+ ('dict_expr -> LBRACE RBRACE','dict_expr',2,'p_dict_expr','parser.py',205),
87
+ ('dict_items -> dict_item','dict_items',1,'p_dict_items','parser.py',213),
88
+ ('dict_items -> dict_item COMMA dict_items','dict_items',3,'p_dict_items','parser.py',214),
89
+ ('dict_item -> expression COLON expression','dict_item',3,'p_dict_item','parser.py',222),
90
+ ('loop -> FOR ID IN RANGE LPAREN expression COMMA expression RPAREN DO statements END','loop',12,'p_loop','parser.py',227),
91
+ ('keyword_call -> LBRACKET ID RBRACKET COMMA parameter_list','keyword_call',5,'p_keyword_call','parser.py',232),
92
+ ('keyword_call -> LBRACKET ID RBRACKET','keyword_call',3,'p_keyword_call','parser.py',233),
93
+ ('parameter_list -> parameter_items','parameter_list',1,'p_parameter_list','parser.py',241),
94
+ ('parameter_items -> parameter_item COMMA parameter_items','parameter_items',3,'p_parameter_items','parser.py',246),
95
+ ('parameter_items -> parameter_item','parameter_items',1,'p_parameter_items','parser.py',247),
96
+ ('parameter_item -> ID COLON expression','parameter_item',3,'p_parameter_item','parser.py',255),
97
+ ('teardown -> TEARDOWN DO statements END','teardown',4,'p_teardown','parser.py',260),
98
+ ('data_source -> STRING USING ID','data_source',3,'p_data_source','parser.py',265),
99
+ ('custom_keyword -> FUNCTION ID LPAREN param_definitions RPAREN DO statements END','custom_keyword',8,'p_custom_keyword','parser.py',270),
100
+ ('param_definitions -> param_def_list','param_definitions',1,'p_param_definitions','parser.py',275),
101
+ ('param_definitions -> <empty>','param_definitions',0,'p_param_definitions','parser.py',276),
102
+ ('param_def_list -> param_def COMMA param_def_list','param_def_list',3,'p_param_def_list','parser.py',284),
103
+ ('param_def_list -> param_def','param_def_list',1,'p_param_def_list','parser.py',285),
104
+ ('param_def -> ID EQUALS STRING','param_def',3,'p_param_def','parser.py',293),
105
+ ('param_def -> ID EQUALS NUMBER','param_def',3,'p_param_def','parser.py',294),
106
+ ('param_def -> ID','param_def',1,'p_param_def','parser.py',295),
107
+ ('return_statement -> RETURN expression','return_statement',2,'p_return_statement','parser.py',303),
108
+ ('break_statement -> BREAK','break_statement',1,'p_break_statement','parser.py',308),
109
+ ('continue_statement -> CONTINUE','continue_statement',1,'p_continue_statement','parser.py',313),
110
+ ('if_statement -> IF expression DO statements END','if_statement',5,'p_if_statement','parser.py',318),
111
+ ('if_statement -> IF expression DO statements elif_clauses END','if_statement',6,'p_if_statement','parser.py',319),
112
+ ('if_statement -> IF expression DO statements ELSE statements END','if_statement',7,'p_if_statement','parser.py',320),
113
+ ('if_statement -> IF expression DO statements elif_clauses ELSE statements END','if_statement',8,'p_if_statement','parser.py',321),
114
+ ('elif_clauses -> elif_clause','elif_clauses',1,'p_elif_clauses','parser.py',337),
115
+ ('elif_clauses -> elif_clause elif_clauses','elif_clauses',2,'p_elif_clauses','parser.py',338),
116
+ ('elif_clause -> ELIF expression DO statements','elif_clause',4,'p_elif_clause','parser.py',346),
117
+ ('comparison_expr -> expr_atom GT expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',351),
118
+ ('comparison_expr -> expr_atom LT expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',352),
119
+ ('comparison_expr -> expr_atom GE expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',353),
120
+ ('comparison_expr -> expr_atom LE expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',354),
121
+ ('comparison_expr -> expr_atom EQ expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',355),
122
+ ('comparison_expr -> expr_atom NE expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',356),
123
+ ('arithmetic_expr -> expression PLUS expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',379),
124
+ ('arithmetic_expr -> expression MINUS expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',380),
125
+ ('arithmetic_expr -> expression TIMES expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',381),
126
+ ('arithmetic_expr -> expression DIVIDE expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',382),
127
+ ('arithmetic_expr -> expression MODULO expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',383),
128
+ ('remote_keyword_call -> ID PIPE LBRACKET ID RBRACKET COMMA parameter_list','remote_keyword_call',7,'p_remote_keyword_call','parser.py',416),
129
+ ('remote_keyword_call -> ID PIPE LBRACKET ID RBRACKET','remote_keyword_call',5,'p_remote_keyword_call','parser.py',417),
125
130
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytest-dsl
3
- Version: 0.7.0
3
+ Version: 0.8.0
4
4
  Summary: A DSL testing framework based on pytest
5
5
  Author: Chen Shuanglin
6
6
  License: MIT
@@ -114,8 +114,32 @@ version = "1.0.0"
114
114
  # 数字变量
115
115
  port = 8080
116
116
 
117
+ # 布尔值变量
118
+ is_enabled = True
119
+ is_disabled = False
120
+
117
121
  # 列表
118
122
  users = ["alice", "bob", "charlie"]
123
+
124
+ # 字典
125
+ user_info = {"name": "张三", "age": 30, "city": "北京"}
126
+
127
+ # 嵌套字典
128
+ config = {
129
+ "database": {
130
+ "host": "localhost",
131
+ "port": 3306,
132
+ "name": "test_db"
133
+ },
134
+ "api": {
135
+ "base_url": "https://api.example.com",
136
+ "timeout": 30
137
+ }
138
+ }
139
+
140
+ # 访问字典值
141
+ username = ${user_info["name"]}
142
+ db_host = ${config["database"]["host"]}
119
143
  ```
120
144
 
121
145
  #### 流程控制
@@ -129,12 +153,33 @@ else
129
153
  [打印], 内容: "测试失败"
130
154
  end
131
155
 
156
+ # 使用布尔值的条件判断
157
+ is_ready = True
158
+ if ${is_ready} do
159
+ [打印], 内容: "系统就绪"
160
+ end
161
+
132
162
  # 循环结构
133
163
  num = 4
134
164
  for i in range(1, num) do
135
165
  [打印], 内容: "执行第 ${i} 次"
136
166
  end
137
167
 
168
+ # 循环中的break和continue
169
+ for j in range(1, 11) do
170
+ # 跳过偶数
171
+ if ${j} % 2 == 0 do
172
+ continue
173
+ end
174
+
175
+ # 当达到7时退出循环
176
+ if ${j} == 7 do
177
+ [打印], 内容: "达到7,退出循环"
178
+ break
179
+ end
180
+
181
+ [打印], 内容: "奇数: ${j}"
182
+ end
138
183
  ```
139
184
 
140
185
  ### 2. 内置关键字详解
@@ -1034,6 +1079,9 @@ pytest-dsl api_basic.dsl
1034
1079
  - ✅ 断言重试机制
1035
1080
  - ✅ 认证功能示例
1036
1081
  - ✅ 数据驱动测试(pytest集成)
1082
+ - ✅ 布尔值支持和条件判断
1083
+ - ✅ 字典定义和嵌套访问
1084
+ - ✅ 循环控制语句(break/continue)
1037
1085
 
1038
1086
  ---
1039
1087
 
@@ -9,15 +9,15 @@ pytest_dsl/core/auto_decorator.py,sha256=9Mga-GB4AzV5nkB6zpfaq8IuHa0KOH8LlFvnWyH
9
9
  pytest_dsl/core/auto_directory.py,sha256=egyTnVxtGs4P75EIivRauLRPJfN9aZpoGVvp_Ma72AM,2714
10
10
  pytest_dsl/core/context.py,sha256=fXpVQon666Lz_PCexjkWMBBr-Xcd1SkDMp2vHar6eIs,664
11
11
  pytest_dsl/core/custom_keyword_manager.py,sha256=QY-wXvzON2kkFwojBSXqWcQpo_aKixKhG-rsacV8gzE,7955
12
- pytest_dsl/core/dsl_executor.py,sha256=cmddS97y9ABpdlmk6rE78dJqP9mec95GsYoPERoMoK0,27651
12
+ pytest_dsl/core/dsl_executor.py,sha256=-pOZ-FAU6BqUhjydE2a9uUOolxAtVwrKWSD9j_5rYGk,29488
13
13
  pytest_dsl/core/dsl_executor_utils.py,sha256=cFoR2p3qQ2pb-UhkoefleK-zbuFqf0aBLh2Rlp8Ebs4,2180
14
14
  pytest_dsl/core/global_context.py,sha256=NcEcS2V61MT70tgAsGsFWQq0P3mKjtHQr1rgT3yTcyY,3535
15
15
  pytest_dsl/core/http_client.py,sha256=1AHqtM_fkXf8JrM0ljMsJwUkyt-ysjR16NoyCckHfGc,15810
16
16
  pytest_dsl/core/http_request.py,sha256=nGMlx0mFc7rDLIdp9GJ3e09OQH3ryUA56yJdRZ99dOQ,57445
17
17
  pytest_dsl/core/keyword_manager.py,sha256=FtPsXlI7PxvVQMJfDN_nQYvRhkag5twvaHXjELQsCEo,4068
18
- pytest_dsl/core/lexer.py,sha256=kHy5GDjthEG70Wt5meMgkJgbuVMUkT04H5Xfk1Gz-eE,4101
19
- pytest_dsl/core/parser.py,sha256=myy5Kit4fVE2J48qgmtwqViQCU-uIvkQn3MKOAaWce0,11462
20
- pytest_dsl/core/parsetab.py,sha256=iIRdVySF85RDyVRscbTodpsTh6-OZK4E3dLGeBy6PPw,28433
18
+ pytest_dsl/core/lexer.py,sha256=WaLzt9IhtHiA90Fg2WGgfVztveCUhtgxzANBaEiy-F8,4347
19
+ pytest_dsl/core/parser.py,sha256=xxy6yC6NdwHxln200aIuaWWN3w44uI8kkNlw8PTVpYI,11855
20
+ pytest_dsl/core/parsetab.py,sha256=aN-2RRTr3MSbMyfe-9zOj_t96Xu84avE29GWqH6nqmg,31472
21
21
  pytest_dsl/core/plugin_discovery.py,sha256=vcO4-I9o4GSffLDd36idhOz6XUI1K7JhOQWwhpCDoNw,6523
22
22
  pytest_dsl/core/utils.py,sha256=q0AMdw5HO33JvlA3UJeQ7IXh1Z_8K1QlwiM1_yiITrU,5350
23
23
  pytest_dsl/core/variable_utils.py,sha256=sx5DFZAO_syi0E_0ACisiZUQL9yxGeOfNmMtV6w9V3E,13947
@@ -59,9 +59,9 @@ pytest_dsl/keywords/assertion_keywords.py,sha256=WOCGP7WX2wZ6mQPDGmi38LWdG2NaThH
59
59
  pytest_dsl/keywords/global_keywords.py,sha256=4yw5yeXoGf_4W26F39EA2Pp-mH9GiKGy2jKgFO9a_wM,2509
60
60
  pytest_dsl/keywords/http_keywords.py,sha256=DY1SvUgOziN6Ga-QgE0q4XFd2qGGwvbv1B_k2gTdPLw,25554
61
61
  pytest_dsl/keywords/system_keywords.py,sha256=n_jRrMvSv2v6Pm_amokfyLNVOLYP7CFWbBE3_dlO7h4,11299
62
- pytest_dsl-0.7.0.dist-info/licenses/LICENSE,sha256=Rguy8cb9sYhK6cmrBdXvwh94rKVDh2tVZEWptsHIsVM,1071
63
- pytest_dsl-0.7.0.dist-info/METADATA,sha256=Yk23qg5nm9IYqIKk-SFH6DoJc8rESXzHp7RgqyISsNk,25750
64
- pytest_dsl-0.7.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
65
- pytest_dsl-0.7.0.dist-info/entry_points.txt,sha256=qqxFwSHQtjoae8_WWiO6w8y0N9nC4H8eFRvOnr_OipE,152
66
- pytest_dsl-0.7.0.dist-info/top_level.txt,sha256=4CrSx4uNqxj7NvK6k1y2JZrSrJSzi-UvPZdqpUhumWM,11
67
- pytest_dsl-0.7.0.dist-info/RECORD,,
62
+ pytest_dsl-0.8.0.dist-info/licenses/LICENSE,sha256=Rguy8cb9sYhK6cmrBdXvwh94rKVDh2tVZEWptsHIsVM,1071
63
+ pytest_dsl-0.8.0.dist-info/METADATA,sha256=hdWrlddZUtb3iV3hpz1YJdiv2y7jgWMnPPB_k6wyKP4,26712
64
+ pytest_dsl-0.8.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
65
+ pytest_dsl-0.8.0.dist-info/entry_points.txt,sha256=qqxFwSHQtjoae8_WWiO6w8y0N9nC4H8eFRvOnr_OipE,152
66
+ pytest_dsl-0.8.0.dist-info/top_level.txt,sha256=4CrSx4uNqxj7NvK6k1y2JZrSrJSzi-UvPZdqpUhumWM,11
67
+ pytest_dsl-0.8.0.dist-info/RECORD,,