pytest-dsl 0.7.0__py3-none-any.whl → 0.9.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,24 @@ 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
+
26
+ class ReturnException(Exception):
27
+ """Return控制流异常"""
28
+
29
+ def __init__(self, return_value=None):
30
+ self.return_value = return_value
31
+ super().__init__(f"Return with value: {return_value}")
32
+
33
+
16
34
  class DSLExecutor:
17
35
  """DSL执行器,负责执行解析后的AST
18
36
 
@@ -20,12 +38,14 @@ class DSLExecutor:
20
38
  - PYTEST_DSL_KEEP_VARIABLES=1: 执行完成后保留变量,用于单元测试中检查变量值
21
39
  - PYTEST_DSL_KEEP_VARIABLES=0: (默认) 执行完成后清空变量,用于正常DSL执行
22
40
  """
41
+
23
42
  def __init__(self):
24
43
  """初始化DSL执行器"""
25
44
  self.variables = {}
26
45
  self.test_context = TestContext()
27
46
  self.test_context.executor = self # 让 test_context 能够访问到 executor
28
- self.variable_replacer = VariableReplacer(self.variables, self.test_context)
47
+ self.variable_replacer = VariableReplacer(
48
+ self.variables, self.test_context)
29
49
  self.imported_files = set() # 跟踪已导入的文件,避免循环导入
30
50
 
31
51
  def set_current_data(self, data):
@@ -175,7 +195,7 @@ class DSLExecutor:
175
195
  """
176
196
  left_value = self.eval_expression(expr_node.children[0])
177
197
  right_value = self.eval_expression(expr_node.children[1])
178
- operator = expr_node.value # 操作符: +, -, *, /
198
+ operator = expr_node.value # 操作符: +, -, *, /, %
179
199
 
180
200
  # 尝试类型转换 - 如果是字符串数字则转为数字
181
201
  if isinstance(left_value, str) and str(left_value).replace('.', '', 1).isdigit():
@@ -210,6 +230,11 @@ class DSLExecutor:
210
230
  if right_value == 0:
211
231
  raise Exception("除法错误: 除数不能为0")
212
232
  return left_value / right_value
233
+ elif operator == '%':
234
+ # 模运算时检查除数是否为0
235
+ if right_value == 0:
236
+ raise Exception("模运算错误: 除数不能为0")
237
+ return left_value % right_value
213
238
  else:
214
239
  raise Exception(f"未知的算术操作符: {operator}")
215
240
 
@@ -264,7 +289,8 @@ class DSLExecutor:
264
289
  # 导入自定义关键字管理器
265
290
  from pytest_dsl.core.custom_keyword_manager import custom_keyword_manager
266
291
  # 注册自定义关键字
267
- custom_keyword_manager._register_custom_keyword(stmt, "current_file")
292
+ custom_keyword_manager._register_custom_keyword(
293
+ stmt, "current_file")
268
294
 
269
295
  def _handle_start(self, node):
270
296
  """处理开始节点"""
@@ -362,7 +388,8 @@ class DSLExecutor:
362
388
  # 当 PYTEST_DSL_KEEP_VARIABLES=1 时,保留变量(用于单元测试)
363
389
  # 否则清空变量(用于正常DSL执行)
364
390
  import os
365
- keep_variables = os.environ.get('PYTEST_DSL_KEEP_VARIABLES', '0') == '1'
391
+ keep_variables = os.environ.get(
392
+ 'PYTEST_DSL_KEEP_VARIABLES', '0') == '1'
366
393
 
367
394
  if not keep_variables:
368
395
  self.variables.clear()
@@ -372,7 +399,11 @@ class DSLExecutor:
372
399
  def _handle_statements(self, node):
373
400
  """处理语句列表"""
374
401
  for stmt in node.children:
375
- self.execute(stmt)
402
+ try:
403
+ self.execute(stmt)
404
+ except ReturnException as e:
405
+ # 将return异常向上传递,不在这里处理
406
+ raise e
376
407
 
377
408
  @allure.step("变量赋值")
378
409
  def _handle_assignment(self, node):
@@ -458,7 +489,32 @@ class DSLExecutor:
458
489
  self.variable_replacer.local_variables[var_name] = i
459
490
  self.test_context.set(var_name, i) # 同时添加到测试上下文
460
491
  with allure.step(f"循环轮次: {var_name} = {i}"):
461
- self.execute(node.children[2])
492
+ try:
493
+ self.execute(node.children[2])
494
+ except BreakException:
495
+ # 遇到break语句,退出循环
496
+ allure.attach(
497
+ f"在 {var_name} = {i} 时遇到break语句,退出循环",
498
+ name="循环Break",
499
+ attachment_type=allure.attachment_type.TEXT
500
+ )
501
+ break
502
+ except ContinueException:
503
+ # 遇到continue语句,跳过本次循环
504
+ allure.attach(
505
+ f"在 {var_name} = {i} 时遇到continue语句,跳过本次循环",
506
+ name="循环Continue",
507
+ attachment_type=allure.attachment_type.TEXT
508
+ )
509
+ continue
510
+ except ReturnException as e:
511
+ # 遇到return语句,将异常向上传递
512
+ allure.attach(
513
+ f"在 {var_name} = {i} 时遇到return语句,退出函数",
514
+ name="循环Return",
515
+ attachment_type=allure.attachment_type.TEXT
516
+ )
517
+ raise e
462
518
 
463
519
  def _execute_keyword_call(self, node):
464
520
  """执行关键字调用"""
@@ -505,11 +561,36 @@ class DSLExecutor:
505
561
  Args:
506
562
  node: Return节点
507
563
 
508
- Returns:
509
- 表达式求值结果
564
+ Raises:
565
+ ReturnException: 抛出异常来实现return控制流
510
566
  """
511
567
  expr_node = node.children[0]
512
- return self.eval_expression(expr_node)
568
+ return_value = self.eval_expression(expr_node)
569
+ raise ReturnException(return_value)
570
+
571
+ @allure.step("执行break语句")
572
+ def _handle_break(self, node):
573
+ """处理break语句
574
+
575
+ Args:
576
+ node: Break节点
577
+
578
+ Raises:
579
+ BreakException: 抛出异常来实现break控制流
580
+ """
581
+ raise BreakException()
582
+
583
+ @allure.step("执行continue语句")
584
+ def _handle_continue(self, node):
585
+ """处理continue语句
586
+
587
+ Args:
588
+ node: Continue节点
589
+
590
+ Raises:
591
+ ContinueException: 抛出异常来实现continue控制流
592
+ """
593
+ raise ContinueException()
513
594
 
514
595
  @allure.step("执行条件语句")
515
596
  def _handle_if_statement(self, node):
@@ -524,7 +605,8 @@ class DSLExecutor:
524
605
  if condition:
525
606
  # 执行if分支
526
607
  with allure.step("执行if分支"):
527
- return self.execute(node.children[1])
608
+ self.execute(node.children[1])
609
+ return
528
610
 
529
611
  # 如果if条件为假,检查elif分支
530
612
  for i in range(2, len(node.children)):
@@ -535,13 +617,15 @@ class DSLExecutor:
535
617
  elif_condition = self.eval_expression(child.children[0])
536
618
  if elif_condition:
537
619
  with allure.step(f"执行elif分支 {i-1}"):
538
- return self.execute(child.children[1])
620
+ self.execute(child.children[1])
621
+ return
539
622
 
540
623
  # 如果是普通的statements节点(else分支)
541
624
  elif not hasattr(child, 'type') or child.type == 'Statements':
542
625
  # 这是else分支,只有在所有前面的条件都为假时才执行
543
626
  with allure.step("执行else分支"):
544
- return self.execute(child)
627
+ self.execute(child)
628
+ return
545
629
 
546
630
  # 如果所有条件都为假且没有else分支,则不执行任何操作
547
631
  return None
@@ -578,7 +662,8 @@ class DSLExecutor:
578
662
  with allure.step(f"执行远程关键字: {alias}|{keyword_name}"):
579
663
  try:
580
664
  # 执行远程关键字
581
- result = remote_keyword_manager.execute_remote_keyword(alias, keyword_name, **kwargs)
665
+ result = remote_keyword_manager.execute_remote_keyword(
666
+ alias, keyword_name, **kwargs)
582
667
  allure.attach(
583
668
  f"远程关键字参数: {kwargs}\n"
584
669
  f"远程关键字结果: {result}",
@@ -664,7 +749,9 @@ class DSLExecutor:
664
749
  'CustomKeyword': lambda _: None, # 添加对CustomKeyword节点的处理,只需注册不需执行
665
750
  'RemoteImport': self._handle_remote_import,
666
751
  'RemoteKeywordCall': self._execute_remote_keyword_call,
667
- 'AssignmentRemoteKeywordCall': self._handle_assignment_remote_keyword_call
752
+ 'AssignmentRemoteKeywordCall': self._handle_assignment_remote_keyword_call,
753
+ 'Break': self._handle_break,
754
+ 'Continue': self._handle_continue
668
755
  }
669
756
 
670
757
  handler = handlers.get(node.type)
@@ -672,6 +759,7 @@ class DSLExecutor:
672
759
  return handler(node)
673
760
  raise Exception(f"未知的节点类型: {node.type}")
674
761
 
762
+
675
763
  def read_file(filename):
676
764
  """读取 DSL 文件内容"""
677
765
  with open(filename, 'r', encoding='utf-8') as f:
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
  ]