Commit 686f4383 authored by POTTIER Francois's avatar POTTIER Francois
Browse files

Increase the maximum length of a production. Display polite message if exceeded.

Close issue #31.
parent 3666c879
Pipeline #115947 passed with stages
in 24 seconds
# Changes
## 2020/XX/XX
* Increase the maximum length of a production, which used to be 127,
up to 1023. Display a polite error message if this length is exceeded.
## 2020/01/21
* There used to be a distinction between two slightly different ways of
......
......@@ -168,8 +168,14 @@ module Make
type item =
int * int
let low_bits =
10
let low_limit =
1 lsl low_bits
let export t : item =
(t lsr 7, t mod 128)
(t lsr low_bits, t mod low_limit)
let items s =
(* Map [s] to its LR(0) core. *)
......
......@@ -20,25 +20,55 @@ open Grammar
production and the index of the bullet in the production's
right-hand side. *)
(* Both integers are packed into a single integer, using 7 bits for
the bullet position and the rest (usually 24 bits) for the
production index. These widths could be adjusted. *)
(* Both integers are packed into a single integer, using 10 bits for
the bullet position and the rest (21 bits on a 32-bit architecture,
53 bits on a 64-bit architecture) for the production index. This
means that the length of a production must be at most 1023. This
means that the number of productions must be at most:
- 2^21, that is about 2 million, on a 32-bit architecture;
- 2^53, that is practically unlimited, on a 64-bit architecture. *)
(* The function [export] is duplicated in [TableInterpreter]. Do not
modify it; or modify it here and there in a consistent manner. *)
(* These static limits could be adjusted if necessary. It would also be
possible to dynamically adjust the limits depending on the grammar
at hand. In practice, the need for this has not been felt. *)
(* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING *)
(* The constant [low_bits], [low_limits] and the function [export] are
duplicated in [lib/InspectionTableInterpreter.ml]. Do not modify them,
or modify them here and there in a consistent manner. *)
type t = int
let import (prod, pos) =
assert (pos < 128);
(Production.p2i prod) lsl 7 + pos
let low_bits =
10 (* have you read the above warning? *)
let low_limit =
1 lsl low_bits
let export t =
(Production.i2p (t lsr 7), t mod 128)
(Production.i2p (t lsr low_bits), t mod low_limit)
let import (prod, pos) =
assert (pos < low_limit);
(Production.p2i prod) lsl low_bits + pos
let marshal (item : t) : int =
item
(* In order to guarantee that the assertion in [import] cannot fail,
we check up front that every production is reasonably short. *)
let () =
Production.iter (fun index ->
let length = Production.length index in
if low_limit <= length then
Error.error
(Production.positions index)
"The length of this production is %d, which exceeds the limit of %d."
length (low_limit - 1)
)
(* Comparison. *)
let equal (item1 : t) (item2: t) =
......@@ -394,4 +424,3 @@ module Closure (L : Lookahead.S) = struct
(* End of closure computation *)
end
File "crazy_long_production.mly", line 179, characters 11-10258:
Error: The length of this production is 1281, which exceeds the limit of 1023.
/* This ocamlyacc file was machine-generated by the BNF converter */
/* This file was supplied by Andreas Abel, see Menhir issue #31. */
/* This copy is modified so as to have a production whose length
exceeds the limit. */
%{
open Abstest
open Lexing
%}
%token TOK_EOF
%token TOK_abstract TOK_and TOK_and_eq TOK_as TOK_asm TOK_asr TOK_assert TOK_auto TOK_begin TOK_bitand TOK_bitor TOK_bool TOK_boolean TOK_break TOK_byte TOK_case TOK_catch TOK_char TOK_class TOK_compl TOK_const TOK_const_cast TOK_constraint TOK_continue TOK_data TOK_default TOK_delete TOK_deriving TOK_do TOK_done TOK_double TOK_downto TOK_dynamic_cast TOK_else TOK_end TOK_enum TOK_exception TOK_explicit TOK_extends TOK_extern TOK_external TOK_false TOK_family TOK_final TOK_finally TOK_float TOK_for TOK_forall TOK_foreign TOK_friend TOK_fun TOK_function TOK_functor TOK_goto TOK_hiding TOK_if TOK_implements TOK_import TOK_in TOK_include TOK_infix TOK_infixl TOK_infixr TOK_inherit TOK_initializer TOK_inline TOK_instance TOK_instanceof TOK_int TOK_interface TOK_land TOK_lazy TOK_let TOK_list TOK_long TOK_lor TOK_lsl TOK_lsr TOK_lxor TOK_match TOK_mdo TOK_method TOK_mod TOK_module TOK_mutable TOK_namespace TOK_native TOK_new TOK_newtype TOK_nonrec TOK_not TOK_not_eq TOK_null TOK_object TOK_of TOK_open TOK_operator TOK_or TOK_or_eq TOK_package TOK_pattern TOK_private TOK_proc TOK_protected TOK_public TOK_qualified TOK_rec TOK_register TOK_reinterpret_cast TOK_return TOK_short TOK_sig TOK_signed TOK_sizeof TOK_static_cast TOK_strictfp TOK_string TOK_struct TOK_super TOK_switch TOK_synchronized TOK_template TOK_then TOK_this TOK_throw TOK_throws TOK_to TOK_transient TOK_true TOK_try TOK_type TOK_typedef TOK_typeid TOK_typename TOK_union TOK_unsigned TOK_using TOK_val TOK_virtual TOK_void TOK_volatile TOK_wchar_t TOK_when TOK_where TOK_while TOK_with TOK_xor TOK_xor_eq
%start pProgram pAbstract pAndT pAndEq pAnd_Eq pAsT pAsm pAsrT pAssertT pAuto pBeginT pBitand pBitor pBool pBoolean pBreak pByte pCase pCatch pChar_ pClassT pCompl pConst pConstCast pConst_Cast pConstraintT pContinue pData pDefault pDelete pDeriving pDoT pDoneT pDouble_ pDowntoT pDynamicCast pDynamic_Cast pElseT pEndT pEnum pExceptionT pExplicit pExtends pExtern pExternalT pFalseT pFamily pFinal pFinally pFloat pForT pForall pForeign pFriend pFunT pFunctionT pFunctorT pGoto pHiding pIfT pImplements pImport pInT pIncludeT pInfix pInfixl pInfixr pInheritT pInitializerT pInline pInstance pInstanceof pInt pInterface pLandT pLazyT pLetT pListT pLong pLorT pLslT pLsrT pLxorT pMatchT pMdo pMethodT pModT pModuleT pMutableT pNamespace pNative pNewT pNewtype pNonrecT pNot pNotEq pNot_Eq pNull pObjectT pOfT pOpenT pOperator pOrT pOrEq pOr_Eq pPackage pPattern pPrivateT pProc pProtected pPublic pQualified pRecT pRegister pReinterpretCast pReinterpret_Cast pReturn pShort pSigT pSigned pSizeof pStaticCast pStatic_Cast pStrictfp pString_ pStructT pSuper pSwitch pSynchronized pTemplate pThenT pThis pThrow pThrows pToT pTransient pTrueT pTryT pTypeT pTypedef pTypeid pTypename pUnion pUnsigned pUsing pValT pVirtualT pVoid pVolatile pWcharT pWchar_T pWhenT pWhere pWhileT pWithT pXor pXorEq pXor_Eq
%type <Abstest.program> pProgram
%type <Abstest.abstract> pAbstract
%type <Abstest.andT> pAndT
%type <Abstest.andEq> pAndEq
%type <Abstest.and_Eq> pAnd_Eq
%type <Abstest.asT> pAsT
%type <Abstest.asm> pAsm
%type <Abstest.asrT> pAsrT
%type <Abstest.assertT> pAssertT
%type <Abstest.auto> pAuto
%type <Abstest.beginT> pBeginT
%type <Abstest.bitand> pBitand
%type <Abstest.bitor> pBitor
%type <Abstest.bool> pBool
%type <Abstest.boolean> pBoolean
%type <Abstest.break> pBreak
%type <Abstest.byte> pByte
%type <Abstest.case> pCase
%type <Abstest.catch> pCatch
%type <Abstest.char_> pChar_
%type <Abstest.classT> pClassT
%type <Abstest.compl> pCompl
%type <Abstest.const> pConst
%type <Abstest.constCast> pConstCast
%type <Abstest.const_Cast> pConst_Cast
%type <Abstest.constraintT> pConstraintT
%type <Abstest.continue> pContinue
%type <Abstest.data> pData
%type <Abstest.default> pDefault
%type <Abstest.delete> pDelete
%type <Abstest.deriving> pDeriving
%type <Abstest.doT> pDoT
%type <Abstest.doneT> pDoneT
%type <Abstest.double_> pDouble_
%type <Abstest.downtoT> pDowntoT
%type <Abstest.dynamicCast> pDynamicCast
%type <Abstest.dynamic_Cast> pDynamic_Cast
%type <Abstest.elseT> pElseT
%type <Abstest.endT> pEndT
%type <Abstest.enum> pEnum
%type <Abstest.exceptionT> pExceptionT
%type <Abstest.explicit> pExplicit
%type <Abstest.extends> pExtends
%type <Abstest.extern> pExtern
%type <Abstest.externalT> pExternalT
%type <Abstest.falseT> pFalseT
%type <Abstest.family> pFamily
%type <Abstest.final> pFinal
%type <Abstest.finally> pFinally
%type <Abstest.float> pFloat
%type <Abstest.forT> pForT
%type <Abstest.forall> pForall
%type <Abstest.foreign> pForeign
%type <Abstest.friend> pFriend
%type <Abstest.funT> pFunT
%type <Abstest.functionT> pFunctionT
%type <Abstest.functorT> pFunctorT
%type <Abstest.goto> pGoto
%type <Abstest.hiding> pHiding
%type <Abstest.ifT> pIfT
%type <Abstest.implements> pImplements
%type <Abstest.import> pImport
%type <Abstest.inT> pInT
%type <Abstest.includeT> pIncludeT
%type <Abstest.infix> pInfix
%type <Abstest.infixl> pInfixl
%type <Abstest.infixr> pInfixr
%type <Abstest.inheritT> pInheritT
%type <Abstest.initializerT> pInitializerT
%type <Abstest.inline> pInline
%type <Abstest.instance> pInstance
%type <Abstest.instanceof> pInstanceof
%type <Abstest.int> pInt
%type <Abstest.interface> pInterface
%type <Abstest.landT> pLandT
%type <Abstest.lazyT> pLazyT
%type <Abstest.letT> pLetT
%type <Abstest.listT> pListT
%type <Abstest.long> pLong
%type <Abstest.lorT> pLorT
%type <Abstest.lslT> pLslT
%type <Abstest.lsrT> pLsrT
%type <Abstest.lxorT> pLxorT
%type <Abstest.matchT> pMatchT
%type <Abstest.mdo> pMdo
%type <Abstest.methodT> pMethodT
%type <Abstest.modT> pModT
%type <Abstest.moduleT> pModuleT
%type <Abstest.mutableT> pMutableT
%type <Abstest.namespace> pNamespace
%type <Abstest.native> pNative
%type <Abstest.newT> pNewT
%type <Abstest.newtype> pNewtype
%type <Abstest.nonrecT> pNonrecT
%type <Abstest.not> pNot
%type <Abstest.notEq> pNotEq
%type <Abstest.not_Eq> pNot_Eq
%type <Abstest.null> pNull
%type <Abstest.objectT> pObjectT
%type <Abstest.ofT> pOfT
%type <Abstest.openT> pOpenT
%type <Abstest.operator> pOperator
%type <Abstest.orT> pOrT
%type <Abstest.orEq> pOrEq
%type <Abstest.or_Eq> pOr_Eq
%type <Abstest.package> pPackage
%type <Abstest.pattern> pPattern
%type <Abstest.privateT> pPrivateT
%type <Abstest.proc> pProc
%type <Abstest.protected> pProtected
%type <Abstest.public> pPublic
%type <Abstest.qualified> pQualified
%type <Abstest.recT> pRecT
%type <Abstest.register> pRegister
%type <Abstest.reinterpretCast> pReinterpretCast
%type <Abstest.reinterpret_Cast> pReinterpret_Cast
%type <Abstest.return> pReturn
%type <Abstest.short> pShort
%type <Abstest.sigT> pSigT
%type <Abstest.signed> pSigned
%type <Abstest.sizeof> pSizeof
%type <Abstest.staticCast> pStaticCast
%type <Abstest.static_Cast> pStatic_Cast
%type <Abstest.strictfp> pStrictfp
%type <Abstest.string_> pString_
%type <Abstest.structT> pStructT
%type <Abstest.super> pSuper
%type <Abstest.switch> pSwitch
%type <Abstest.synchronized> pSynchronized
%type <Abstest.template> pTemplate
%type <Abstest.thenT> pThenT
%type <Abstest.this> pThis
%type <Abstest.throw> pThrow
%type <Abstest.throws> pThrows
%type <Abstest.toT> pToT
%type <Abstest.transient> pTransient
%type <Abstest.trueT> pTrueT
%type <Abstest.tryT> pTryT
%type <Abstest.typeT> pTypeT
%type <Abstest.typedef> pTypedef
%type <Abstest.typeid> pTypeid
%type <Abstest.typename> pTypename
%type <Abstest.union> pUnion
%type <Abstest.unsigned> pUnsigned
%type <Abstest.using> pUsing
%type <Abstest.valT> pValT
%type <Abstest.virtualT> pVirtualT
%type <Abstest.void> pVoid
%type <Abstest.volatile> pVolatile
%type <Abstest.wcharT> pWcharT
%type <Abstest.wchar_T> pWchar_T
%type <Abstest.whenT> pWhenT
%type <Abstest.where> pWhere
%type <Abstest.whileT> pWhileT
%type <Abstest.withT> pWithT
%type <Abstest.xor> pXor
%type <Abstest.xorEq> pXorEq
%type <Abstest.xor_Eq> pXor_Eq
%%
pProgram : program
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF TOK_EOF
{ $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pAbstract : abstract TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pAndT : andT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pAndEq : andEq TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pAnd_Eq : and_Eq TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pAsT : asT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pAsm : asm TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pAsrT : asrT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pAssertT : assertT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pAuto : auto TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pBeginT : beginT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pBitand : bitand TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pBitor : bitor TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pBool : bool TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pBoolean : boolean TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pBreak : break TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pByte : byte TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pCase : case TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pCatch : catch TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pChar_ : char_ TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pClassT : classT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pCompl : compl TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pConst : const TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pConstCast : constCast TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pConst_Cast : const_Cast TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pConstraintT : constraintT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pContinue : continue TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pData : data TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pDefault : default TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pDelete : delete TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pDeriving : deriving TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pDoT : doT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pDoneT : doneT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pDouble_ : double_ TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pDowntoT : downtoT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pDynamicCast : dynamicCast TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pDynamic_Cast : dynamic_Cast TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pElseT : elseT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pEndT : endT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pEnum : enum TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pExceptionT : exceptionT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pExplicit : explicit TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pExtends : extends TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pExtern : extern TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pExternalT : externalT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pFalseT : falseT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pFamily : family TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pFinal : final TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pFinally : finally TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pFloat : float TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pForT : forT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pForall : forall TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pForeign : foreign TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pFriend : friend TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pFunT : funT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pFunctionT : functionT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pFunctorT : functorT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pGoto : goto TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pHiding : hiding TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pIfT : ifT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pImplements : implements TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pImport : import TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pInT : inT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pIncludeT : includeT TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };
pInfix : infix TOK_EOF { $1 }
| error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };