(datatype action
  (:shift int)
  (:reduce int int))

(datatype action-list
  (:nil)
  (:cons int (action) (action-list)))

(datatype goto-list
  (:nil)
  (:cons int int (goto-list)))

(define terminals '#(
    rparen
    STRING
    NEWLINE
    NUMBER
    <e>
    <$>
    comma
    lparen
    NAME
  ))
(define non-terminals '#(
    predicate_c_2_q
    predicate
    list_c_1_s1
    <S>
    expr
    list
    file_c_0_s_o
    file
    atom
  ))
(define actions
    (literal #(
      (action-list:cons 5 (action:reduce 0 7) (action-list:cons 3 (action:shift 3) (action-list:cons 2 (action:shift 2) (action-list:cons 1 (action:shift 1) (action-list:cons 8 (action:shift 4) (action-list:nil))))))
      (action-list:cons 8 (action:reduce 1 8) (action-list:cons 6 (action:reduce 1 8) (action-list:cons 5 (action:reduce 1 8) (action-list:cons 3 (action:reduce 1 8) (action-list:cons 2 (action:reduce 1 8) (action-list:cons 1 (action:reduce 1 8) (action-list:cons 0 (action:reduce 1 8) (action-list:nil))))))))
      (action-list:cons 5 (action:reduce 1 6) (action-list:cons 3 (action:reduce 1 6) (action-list:cons 2 (action:reduce 1 6) (action-list:cons 1 (action:reduce 1 6) (action-list:cons 8 (action:reduce 1 6) (action-list:nil))))))
      (action-list:cons 8 (action:reduce 1 8) (action-list:cons 6 (action:reduce 1 8) (action-list:cons 5 (action:reduce 1 8) (action-list:cons 3 (action:reduce 1 8) (action-list:cons 2 (action:reduce 1 8) (action-list:cons 1 (action:reduce 1 8) (action-list:cons 0 (action:reduce 1 8) (action-list:nil))))))))
      (action-list:cons 8 (action:reduce 1 8) (action-list:cons 7 (action:shift 10) (action-list:cons 6 (action:reduce 1 8) (action-list:cons 5 (action:reduce 1 8) (action-list:cons 3 (action:reduce 1 8) (action-list:cons 2 (action:reduce 1 8) (action-list:cons 1 (action:reduce 1 8) (action-list:cons 0 (action:reduce 1 8) (action-list:nil)))))))))
      (action-list:cons 8 (action:reduce 1 4) (action-list:cons 6 (action:reduce 1 4) (action-list:cons 5 (action:reduce 1 4) (action-list:cons 3 (action:reduce 1 4) (action-list:cons 2 (action:reduce 1 4) (action-list:cons 1 (action:reduce 1 4) (action-list:cons 0 (action:reduce 1 4) (action-list:nil))))))))
      (action-list:cons 5 (action:reduce 1 6) (action-list:cons 3 (action:reduce 1 6) (action-list:cons 2 (action:reduce 1 6) (action-list:cons 1 (action:reduce 1 6) (action-list:cons 8 (action:reduce 1 6) (action-list:nil))))))
      (action-list:cons 5 (action:reduce 0 7) (action-list:cons 3 (action:shift 3) (action-list:cons 2 (action:shift 2) (action-list:cons 1 (action:shift 1) (action-list:cons 8 (action:shift 4) (action-list:nil))))))
      (action-list:cons 5 (action:shift 12) (action-list:nil))
      (action-list:cons 8 (action:reduce 1 4) (action-list:cons 6 (action:reduce 1 4) (action-list:cons 5 (action:reduce 1 4) (action-list:cons 3 (action:reduce 1 4) (action-list:cons 2 (action:reduce 1 4) (action-list:cons 1 (action:reduce 1 4) (action-list:cons 0 (action:reduce 1 4) (action-list:nil))))))))
      (action-list:cons 0 (action:reduce 0 0) (action-list:cons 3 (action:shift 3) (action-list:cons 1 (action:shift 1) (action-list:cons 8 (action:shift 4) (action-list:nil)))))
      (action-list:cons 5 (action:reduce 2 7) (action-list:nil))
      (action-list:cons 4 (action:reduce 2 3) (action-list:nil))
      (action-list:cons 0 (action:shift 16) (action-list:nil))
      (action-list:cons 6 (action:shift 17) (action-list:cons 0 (action:reduce 0 2) (action-list:nil)))
      (action-list:cons 0 (action:reduce 1 0) (action-list:nil))
      (action-list:cons 8 (action:reduce 4 1) (action-list:cons 6 (action:reduce 4 1) (action-list:cons 5 (action:reduce 4 1) (action-list:cons 3 (action:reduce 4 1) (action-list:cons 2 (action:reduce 4 1) (action-list:cons 1 (action:reduce 4 1) (action-list:cons 0 (action:reduce 4 1) (action-list:nil))))))))
      (action-list:cons 3 (action:shift 3) (action-list:cons 1 (action:shift 1) (action-list:cons 8 (action:shift 4) (action-list:nil))))
      (action-list:cons 0 (action:reduce 2 5) (action-list:nil))
      (action-list:cons 6 (action:shift 17) (action-list:cons 0 (action:reduce 0 2) (action-list:nil)))
      (action-list:cons 0 (action:reduce 3 2) (action-list:nil))
   )))
(define goto
    (literal #(
      (goto-list:cons 4 6 (goto-list:cons 1 5 (goto-list:cons 8 9 (goto-list:cons 7 8 (goto-list:cons 6 7 (goto-list:nil))))))
      (goto-list:nil)
      (goto-list:nil)
      (goto-list:nil)
      (goto-list:nil)
      (goto-list:nil)
      (goto-list:nil)
      (goto-list:cons 4 6 (goto-list:cons 1 5 (goto-list:cons 8 9 (goto-list:cons 7 11 (goto-list:cons 6 7 (goto-list:nil))))))
      (goto-list:nil)
      (goto-list:nil)
      (goto-list:cons 0 13 (goto-list:cons 1 5 (goto-list:cons 8 9 (goto-list:cons 5 15 (goto-list:cons 4 14 (goto-list:nil))))))
      (goto-list:nil)
      (goto-list:nil)
      (goto-list:nil)
      (goto-list:cons 2 18 (goto-list:nil))
      (goto-list:nil)
      (goto-list:nil)
      (goto-list:cons 4 19 (goto-list:cons 1 5 (goto-list:cons 8 9 (goto-list:nil))))
      (goto-list:nil)
      (goto-list:cons 2 20 (goto-list:nil))
      (goto-list:nil)
  )))