packages feed

antlr-haskell-0.1.0.0: test/shared/Language/ANTLR4/Example/Optionals.hs

{-# LANGUAGE QuasiQuotes, DeriveAnyClass, DeriveGeneric, TypeFamilies
    , DataKinds, ScopedTypeVariables, OverloadedStrings, TypeSynonymInstances
    , FlexibleInstances, UndecidableInstances, FlexibleContexts #-}
module Language.ANTLR4.Example.Optionals where
import Language.ANTLR4

opt a b c d = (1, 'b', 2.0, [1,2,3])

foo :: () -> Maybe (Int, Char, Double, [Int]) -> String
foo a1 (Just (a,b,c,d)) = "accept"
foo a1 Nothing = "reject"

[g4|
  grammar Optional;
  r   : a s? -> foo;
  s   : a? b* c+ d -> opt;
  a   : 'a';
  b   : 'b';
  c   : 'c';
  d   : 'd';
  
  ID  : [a-zA-Z]+ -> String;
  WS  : [ \t\r\n]+ -> String;
|]

isWS T_WS = True
isWS _    = False