Skip to content

[DO NOT MERGE] V3.11 #11

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 84 commits into
base: v3.9_adapt
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
39710f7
Register X1 is destroyed by some built-in functions
xavierleroy May 13, 2021
9eccbd3
Support `# 0 ...` preprocessed line directive
xavierleroy Jun 1, 2021
a0ad5ff
x86 assembly: fix the comment delimiter for macos and make it per-OS
xavierleroy Jun 10, 2021
d97caa1
Revise the declaration of __compcert_* helper functions
xavierleroy Jun 11, 2021
fd68e9d
More lemmas about list append
xavierleroy Jun 6, 2021
88589fa
More lemmas about `align`
xavierleroy Jun 7, 2021
4fe221a
Add `floor` and some properties
xavierleroy Jul 26, 2021
e9f40aa
Int.sign_ext_shr_shl: weaker hypothesis
xavierleroy Jun 10, 2021
a94edc5
Add Ctypes.link_match_program_gen
xavierleroy Jun 10, 2021
47fae38
Native support for bit fields (#400)
xavierleroy May 17, 2021
d2595e3
Merge branch 'bitfields' (#400)
xavierleroy Aug 22, 2021
4daebb7
Protect against overflows in `leaq N(src), dst` (#407)
xavierleroy Aug 27, 2021
a320361
Protect against overflows in `leaq` (all forms)
bschommer Aug 27, 2021
7e8e3ef
Share code for memory access for PowerPC
bschommer Aug 11, 2021
4ba1b9e
Handle the new warnings of OCaml 4.13
xavierleroy Sep 13, 2021
8eaff6b
clightgen: handle empty names given to padding bit fields
xavierleroy Sep 15, 2021
c9fad7c
Avoid `Global Set Asymmetric Patterns` (#408)
xavierleroy Sep 15, 2021
2a69913
For numerical builtins, support return types that are small integer t…
xavierleroy Sep 6, 2021
9e30fa9
Fix the type and the semantics of BI_bsel
xavierleroy Sep 6, 2021
d329550
Refactor clightgen
xavierleroy Sep 16, 2021
dffc988
Add support to clightgen for generating Csyntax AST as .v files
xavierleroy Sep 16, 2021
b8ebdff
Update export/README.md
xavierleroy Sep 22, 2021
c8ccecc
For __builtin_memcpy_aligned, watch out for alignment of stack offsets
xavierleroy Sep 23, 2021
c34d25e
Fix wrong expansion of __builtin_memcpy_aligned
xavierleroy Sep 23, 2021
2dd133f
Update the vendored Flocq library to version 3.4.2
xavierleroy Sep 25, 2021
43b7e02
Vendored MenhirLib: replace Require Omega with Require ZArith
xavierleroy Sep 25, 2021
627ab2d
Merge pull request #413 from AbsInt/new-export
xavierleroy Sep 27, 2021
2892e2c
Ignore unnamed plain members of structs and unions
xavierleroy Sep 25, 2021
6ede270
Ignore unnamed bit fields for initialization of unions
bschommer Sep 21, 2021
11aaba6
Typo in expand_builtin_memcpy_small
xavierleroy Oct 1, 2021
a2a2529
Adapt to coq/coq#13837 ("apply with" does not rename arguments) (#417)
SkySkimmer Oct 3, 2021
990c96e
Synchronize vendored MenhirLib with upstream (#416)
jhjourdan Oct 3, 2021
d687649
Vendored Flocq library: address Coq 8.14 warning
xavierleroy Sep 26, 2021
2c46ae4
Qualify `Instance` and `Program Instance` as `Global`
xavierleroy Sep 26, 2021
cc3f083
Selectively turn some Coq 8.14 warnings off
xavierleroy Sep 26, 2021
af2b004
Add Coq 8.14.0 to the supported versions of Coq
xavierleroy Oct 1, 2021
d04d396
Merge pull request #415 from AbsInt/coq-8.14-compat
xavierleroy Oct 16, 2021
a420914
Explicitly remove __SIZEOF_INT128__ macro definition. (#419)
roconnor-blockstream Oct 16, 2021
d194e47
PPC64: revised generation of rldic* instructions
xavierleroy Oct 27, 2021
6431b48
Resurrect a warning for bit fields of enum types
xavierleroy Nov 10, 2021
168495d
Revised checks for multi-character constants 'xyz'
xavierleroy Nov 9, 2021
b9dfe18
An improved PTree data structure (#420)
xavierleroy Nov 16, 2021
a29b0c1
Maps.v: transparency of Node
xavierleroy Nov 16, 2021
9c49daf
First update for release 3.10
xavierleroy Nov 16, 2021
251df98
Remove documentation of bitfield language support option.
m-schmidt Nov 17, 2021
2198a28
mention AArch64 in man-page
m-schmidt Nov 17, 2021
fd2a2a8
Second update for release 3.10
xavierleroy Nov 19, 2021
a79f0f9
Support Coq 8.14.1
xavierleroy Nov 26, 2021
f4b66ff
Enforce evaluation order in IRC.add_interf and IRC.add_pref
xavierleroy Dec 7, 2021
d6b7e2d
Fix pattern for github-linguist.
bschommer Dec 14, 2021
85b1c40
Adapt w.r.t. coq/coq#15442 (#425)
ppedrot Jan 10, 2022
a882f78
Support Coq 8.15.0
xavierleroy Jan 31, 2022
87de396
Return second arg for float min/max on x86.
bschommer Jan 21, 2022
38b0425
Add op for float max and min for x86.
bschommer Feb 7, 2022
9d3521b
Check for arguments of struct/union type passed to a vararg function
xavierleroy Feb 11, 2022
967c04d
Introduce float_conversion_default_nan parameter for float-float conv…
bschommer Mar 22, 2022
fb1f454
Fix a typo in a comment in Clight.v (#427)
trackoor Apr 25, 2022
9aacc59
Upgrade to Flocq 4.0.
silene Sep 8, 2020
111fda0
Ignore .coq-native directories.
silene Dec 4, 2021
3cba5ac
Make Coq 8.12.0 the minimal version.
silene Dec 4, 2021
a4da014
Support Coq 8.15.1
xavierleroy Apr 25, 2022
e8c312e
Upgrade to Flocq 4.1.
silene Apr 26, 2022
4920f93
Merge pull request #368 from silene/flocq-3.4
xavierleroy Apr 29, 2022
8610d8f
Enum is only compatible with IInt.
xavierleroy May 6, 2022
a4c98b1
Completely avoid line breaks in types when printing error messages
xavierleroy May 7, 2022
1d572b3
Fix the parsing of unprototyped function types in casts (#431)
xavierleroy May 9, 2022
e44143a
Support _Generic from ISO C 2011
xavierleroy May 2, 2022
b4e339e
Some tests for _Generic
xavierleroy May 3, 2022
26a9afb
Revised warning for non-prototyped function declarations
xavierleroy May 12, 2022
713b45c
Fix computing of output filenames.
bschommer May 3, 2022
413bd76
Simplify handling of file suffixes.
bschommer May 6, 2022
318fc06
Improve control-flow analysis of "noreturn" function calls
xavierleroy May 19, 2022
d357b5c
AArch64: make register X29 callee-save
xavierleroy May 25, 2022
5c8f3c2
Harden the configure script against \r\n end of lines
xavierleroy Jun 20, 2022
44a668f
First Changelog update for next release 3.11
xavierleroy Jun 20, 2022
a34adc8
Expand "j_s symb" to "jump symb, x31" assembly pseudo-instruction
xavierleroy Jun 24, 2022
11938ee
Update comment re: compile_switch function
xavierleroy Jun 25, 2022
971c8ea
Support Coq 8.15.2
xavierleroy Jun 25, 2022
59c4003
Extend the boolean_equality tactic (#429)
jjhugues Jun 25, 2022
bcfa971
Updates for release 3.11
xavierleroy Jun 25, 2022
e4bba56
More updates for release 3.11
xavierleroy Jun 27, 2022
ed2fd72
Merge v3.11 without compile
kim-yoonseung Feb 19, 2023
0ef65fa
Compile OK
kim-yoonseung Feb 19, 2023
881e3b7
Minor fix
kim-yoonseung Feb 25, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# Files that should be ignored by Github linguist
test/* linguist-vendored
doc/* linguist-documentation
/test/** linguist-vendored
/doc/** linguist-documentation
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ graph.png
.*.aux
*.cmti
*.cmt
.coq-native
# Emacs saves
*~
# Executables and configuration
Expand Down Expand Up @@ -78,7 +79,8 @@ graph.png
# MacOS metadata
.DS_Store
# Test generated data
/test/clightgen/*.v
/test/export/clight/*.v
/test/export/csyntax/*.v
# Coq caches
.lia.cache
.nia.cache
Expand Down
104 changes: 104 additions & 0 deletions Changelog
Original file line number Diff line number Diff line change
@@ -1,3 +1,107 @@
Release 3.11, 2022-06-27
========================

New features:
- Support `_Generic` expressions from ISO C11.

ISO C conformance:
- Enumeration types are compatible only with `int` but not with
other integer types.
- Fixed confusion between unprototyped function pointer types `T (*)()` and
prototyped, zero-argument function pointer types `T (*)(void)`
in type casts (#431).

Usability:
- Improved control-flow analysis of calls to "noreturn" functions,
resulting in more accurate warnings.
- More detailed warning for unprototyped function definitions, now shows
the prototyped type that is given to the function.
- Extended the warning above to definitions of the form `T f() { ... }`,
i.e. unprototyped but with no parameters. (Before, the warning would
trigger only if parameters were declared.)
- Check (and warn if requested) for arguments of struct/union types passed
to a variable-argument function.

Bug fixes:
- RISC-V: fixed an error in the modeling of float32 <-> float64 conversions
when the argument is a NaN (#428).
- x86: changed the compilation of `__builtin_fmin` and `__builtin_fmax`
so that their NaN behavior is the one documented in the manual.
- Improved reproducibility of register allocation.
(Before, compiling CompCert with two different OCaml versions could
have resulted in correct but different allocations.)
- Hardened the configure script against Cygwin installations that produce
\r\n for end-of-lines (#434).
- RISC-V: tail calls to far-away functions were causing link-time errors
(#436, #437).

Coq development:
- Updated the Flocq library to version 4.1.
- Support for Coq 8.14.1, 8.15.0, 8.15.1, 8.15.2.
- Minimal Coq version supported is now 8.12.0.


Release 3.10, 2021-11-19
========================

Major improvement:
- Bit fields in structs and unions are now handled in the
formally-verified part of CompCert. (Before, they were being
implemented through an unverified source-to-source translation.)
The CompCert C and Clight languages provide abstract syntax for
bit-field declarations and formal semantics for bit-field accesses.
The translation of bit-field accesses to bit manipulations is
performed in the Cshmgen pass and proved correct.

Usability:
- The layout of bit-fields in memory now follows the ELF ABI
algorithm, improving ABI compatibility for the CompCert target
platforms that use ELF.
- Handle the `# 0` line directive generated by some C preprocessors (#398).
- Un-define the `__SIZEOF_INT128__` macro that is predefined by some C
preprocessors (#419).
- macOS assembler: use `##` instead of `#` to delimit comments (#399).

ISO C conformance:
- Stricter checking of multi-character constants `'abc'`.
Multi-wide-character constants `L'ab'` are now rejected,
like GCC and Clang do.
- Ignore (but still warn about) unnamed plain members of structs
and unions (#411).
- Ignore unnamed bit fields when initializing unions.

Bug fixing:
- x86 64 bits: overflow in offset of `leaq` instructions (#407).
- AArch64, ARM, PowerPC, RISC-V: wrong expansion of `__builtin_memcpy_aligned`
in cases involving arguments that are stack addresses (#410, #412)
- PowerPC 64 bits: wrong selection of 64-bit rotate-and-mask
instructions (`rldic`, `rldicl`, `rldicr`), resulting in assertion
failures later in the compiler.
- RISC-V: update the Asm semantics to reflect the fact that
register X1 is destroyed by some builtins.

Compiler internals:
- The "PTree" data structure (binary tries) was reimplemented, using
a canonical representation that guarantees extensionality and
improves performance.
- Add the ability to give formal semantics to numerical builtins
with small integer return types.
- PowerPC: share code for memory accesses between Asmgen and Asmexpand
- Declare `__compcert_i64*` helper runtime functions during the C2C
pass, so that they are not visible during source elaboration.

The clightgen tool:
- Add support for producing Csyntax abstract syntax instead of Clight
abstract syntax (option `-csyntax` to `clightgen`)
(contributed by Bart Jacobs; #404, #413).

Coq development:
- Added support for Coq 8.14 (#415).
- Added support for OCaml 4.13.
- Updated the Flocq library to version 3.4.2.
- Replaced `Global Set Asymmetric Patterns` by more local settings (#408).


Release 3.9, 2021-05-10
=======================

Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Foundation GNU Lesser General Public License, either version 2.1 or

all files in the cparser/ directory

all files in the exportclight/ directory
all files in the export/ directory

the Archi.v, Builtins1.v, CBuiltins.ml, and extractionMachdep.v files
in directories aarch64, arm, powerpc, riscV, x86, x86_32, x86_64
Expand Down
35 changes: 26 additions & 9 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ else
ARCHDIRS=$(ARCH)_$(BITSIZE) $(ARCH)
endif

DIRS := lib common $(ARCHDIRS) backend cfrontend driver exportclight cparser demo
DIRS := lib common $(ARCHDIRS) backend cfrontend driver export cparser demo

COQINCLUDES := $(foreach d, $(DIRS), -R $(d) compcertr.$(d))

Expand All @@ -53,11 +53,21 @@ endif
# deprecated-ident-entry:
# warning introduced in 8.13
# suggested change (use `name` instead of `ident`) supported since 8.13
# deprecated-hint-rewrite-without-locality:
# warning introduced in 8.14
# suggested change (add Global or Local or [#export] modifier)
# is not supported in 8.13 nor in 8.11, but was supported in 8.9 (go figure)
# deprecated-instance-without-locality:
# warning introduced in 8.14
# triggered by Menhir-generated files, to be solved upstream in Menhir

COQCOPTS ?= \
-w -undeclared-scope \
-w -unused-pattern-matching-variable \
-w -deprecated-ident-entry
-w -deprecated-ident-entry \
-w -deprecated-hint-rewrite-without-locality

cparser/Parser.vo: COQCOPTS += -w -deprecated-instance-without-locality

COQC="$(COQBIN)coqc" -q $(COQINCLUDES) $(COQCOPTS)
COQDEP="$(COQBIN)coqdep" $(COQINCLUDES)
Expand All @@ -74,13 +84,12 @@ GPATH=$(DIRS)

ifeq ($(LIBRARY_FLOCQ),local)
FLOCQ=\
SpecFloatCompat.v \
Raux.v Zaux.v Defs.v Digits.v Float_prop.v FIX.v FLT.v FLX.v FTZ.v \
Generic_fmt.v Round_pred.v Round_NE.v Ulp.v Core.v \
Bracket.v Div.v Operations.v Round.v Sqrt.v \
Bracket.v Div.v Operations.v Plus.v Round.v Sqrt.v \
Div_sqrt_error.v Mult_error.v Plus_error.v \
Relative.v Sterbenz.v Round_odd.v Double_rounding.v \
Binary.v Bits.v
BinarySingleNaN.v Binary.v Bits.v
else
FLOCQ=
endif
Expand Down Expand Up @@ -159,10 +168,18 @@ endif

DRIVER=Compopts.v Compiler.v Complements.v

# Library for .v files generated by clightgen

ifeq ($(CLIGHTGEN),true)
EXPORTLIB=Ctypesdefs.v Clightdefs.v Csyntaxdefs.v
else
EXPORTLIB=
endif

# All source files

FILES=$(VLIB) $(COMMON) $(BACKEND) $(CFRONTEND) $(DRIVER) $(FLOCQ) \
$(MENHIRLIB) $(PARSER) exportclight/Clightdefs.v
$(MENHIRLIB) $(PARSER) $(EXPORTLIB)

# Generated source files

Expand Down Expand Up @@ -214,9 +231,9 @@ ccomp: .depend.extr compcert.ini driver/Version.ml FORCE
ccomp.byte: .depend.extr compcert.ini driver/Version.ml FORCE
$(MAKE) -f Makefile.extr ccomp.byte

clightgen: .depend.extr compcert.ini exportclight/Clightdefs.vo driver/Version.ml FORCE
clightgen: .depend.extr compcert.ini driver/Version.ml FORCE
$(MAKE) -f Makefile.extr clightgen
clightgen.byte: .depend.extr compcert.ini exportclight/Clightdefs.vo driver/Version.ml FORCE
clightgen.byte: .depend.extr compcert.ini driver/Version.ml FORCE
$(MAKE) -f Makefile.extr clightgen.byte

runtime:
Expand Down Expand Up @@ -311,7 +328,7 @@ cparser/Parser.v: cparser/Parser.vy

depend: $(GENERATED) depend1

depend1: $(FILES) exportclight/Clightdefs.v
depend1: $(FILES) export/Clightdefs.v
@echo "Analyzing Coq dependencies"
@$(COQDEP) $^ > .depend

Expand Down
6 changes: 3 additions & 3 deletions Makefile.extr
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,13 @@ cparser/pre_parser_messages.ml:

DIRS=extraction \
lib common $(ARCH) backend cfrontend cparser driver \
exportclight debug
export debug

INCLUDES=$(patsubst %,-I %, $(DIRS))

# Control of warnings:

WARNINGS=-w +a-4-9-27
WARNINGS=-w +a-4-9-27-70
extraction/%.cmx: WARNINGS +=-w -20-27-32..34-39-41-44..45-60-67
extraction/%.cmo: WARNINGS +=-w -20-27-32..34-39-41-44..45-60-67
cparser/pre_parser.cmx: WARNINGS += -w -41
Expand Down Expand Up @@ -112,7 +112,7 @@ ccomp.byte: $(CCOMP_OBJS:.cmx=.cmo)
@echo "Linking $@"
@$(OCAMLC) -o $@ $(LIBS_BYTE) $+

CLIGHTGEN_OBJS:=$(shell $(MODORDER) exportclight/Clightgen.cmx)
CLIGHTGEN_OBJS:=$(shell $(MODORDER) export/ExportDriver.cmx)

ifeq ($(OCAML_NATIVE_COMP),true)
clightgen: $(CLIGHTGEN_OBJS)
Expand Down
16 changes: 8 additions & 8 deletions MenhirLib/Alphabet.v
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
(* *)
(****************************************************************************)

From Coq Require Import Omega List Relations RelationClasses.
From Coq Require Import ZArith List Relations RelationClasses.
Import ListNotations.

Local Obligation Tactic := intros.
Expand All @@ -37,7 +37,7 @@ Qed.
Definition comparableLt {A:Type} (C: Comparable A) : relation A :=
fun x y => compare x y = Lt.

Instance ComparableLtStrictOrder {A:Type} (C: Comparable A) :
Global Instance ComparableLtStrictOrder {A:Type} (C: Comparable A) :
StrictOrder (comparableLt C).
Proof.
apply Build_StrictOrder.
Expand All @@ -53,7 +53,7 @@ apply compare_trans.
Qed.

(** nat is comparable. **)
Program Instance natComparable : Comparable nat :=
Global Program Instance natComparable : Comparable nat :=
{ compare := Nat.compare }.
Next Obligation.
symmetry.
Expand All @@ -79,7 +79,7 @@ apply (gt_trans _ _ _ H H0).
Qed.

(** A pair of comparable is comparable. **)
Program Instance PairComparable {A:Type} (CA:Comparable A) {B:Type} (CB:Comparable B) :
Global Program Instance PairComparable {A:Type} (CA:Comparable A) {B:Type} (CB:Comparable B) :
Comparable (A*B) :=
{ compare := fun x y =>
let (xa, xb) := x in let (ya, yb) := y in
Expand Down Expand Up @@ -134,10 +134,10 @@ destruct H.
rewrite compare_refl; intuition.
Qed.

Instance NComparableLeibnizEq : ComparableLeibnizEq natComparable := Nat.compare_eq.
Global Instance NComparableLeibnizEq : ComparableLeibnizEq natComparable := Nat.compare_eq.

(** A pair of ComparableLeibnizEq is ComparableLeibnizEq **)
Instance PairComparableLeibnizEq
Global Instance PairComparableLeibnizEq
{A:Type} {CA:Comparable A} (UA:ComparableLeibnizEq CA)
{B:Type} {CB:Comparable B} (UB:ComparableLeibnizEq CB) :
ComparableLeibnizEq (PairComparable CA CB).
Expand Down Expand Up @@ -174,7 +174,7 @@ Class Numbered (A:Type) := {
inj_bound_spec : forall x, (inj x < Pos.succ inj_bound)%positive
}.

Program Instance NumberedAlphabet {A:Type} (N:Numbered A) : Alphabet A :=
Global Program Instance NumberedAlphabet {A:Type} (N:Numbered A) : Alphabet A :=
{ AlphabetComparable := {| compare := fun x y => Pos.compare (inj x) (inj y) |};
AlphabetFinite :=
{| all_list := fst (Pos.iter
Expand Down Expand Up @@ -224,7 +224,7 @@ Import OrderedType.

Module Type ComparableM.
Parameter t : Type.
Declare Instance tComparable : Comparable t.
Global Declare Instance tComparable : Comparable t.
End ComparableM.

Module OrderedTypeAlt_from_ComparableM (C:ComparableM) <: OrderedTypeAlt.
Expand Down
6 changes: 3 additions & 3 deletions MenhirLib/Automaton.v
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ Module Type AutInit.

(** The set of non initial state is considered as an alphabet. **)
Parameter noninitstate : Type.
Declare Instance NonInitStateAlph : Alphabet noninitstate.
Global Declare Instance NonInitStateAlph : Alphabet noninitstate.

Parameter initstate : Type.
Declare Instance InitStateAlph : Alphabet initstate.
Global Declare Instance InitStateAlph : Alphabet initstate.

(** When we are at this state, we know that this symbol is the top of the
stack. **)
Expand All @@ -41,7 +41,7 @@ Module Types(Import Init:AutInit).
| Init: initstate -> state
| Ninit: noninitstate -> state.

Program Instance StateAlph : Alphabet state :=
Global Program Instance StateAlph : Alphabet state :=
{ AlphabetComparable := {| compare := fun x y =>
match x, y return comparison with
| Init _, Ninit _ => Lt
Expand Down
8 changes: 4 additions & 4 deletions MenhirLib/Grammar.v
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ Require Import Alphabet.
(** The terminal non-terminal alphabets of the grammar. **)
Module Type Alphs.
Parameters terminal nonterminal : Type.
Declare Instance TerminalAlph: Alphabet terminal.
Declare Instance NonTerminalAlph: Alphabet nonterminal.
Global Declare Instance TerminalAlph: Alphabet terminal.
Global Declare Instance NonTerminalAlph: Alphabet nonterminal.
End Alphs.

(** Definition of the alphabet of symbols, given the alphabet of terminals
Expand All @@ -30,7 +30,7 @@ Module Symbol(Import A:Alphs).
| T: terminal -> symbol
| NT: nonterminal -> symbol.

Program Instance SymbolAlph : Alphabet symbol :=
Global Program Instance SymbolAlph : Alphabet symbol :=
{ AlphabetComparable := {| compare := fun x y =>
match x, y return comparison with
| T _, NT _ => Gt
Expand Down Expand Up @@ -74,7 +74,7 @@ Module Type T.

(** The type of productions identifiers **)
Parameter production : Type.
Declare Instance ProductionAlph : Alphabet production.
Global Declare Instance ProductionAlph : Alphabet production.

(** Accessors for productions: left hand side, right hand side,
and semantic action. The semantic actions are given in the form
Expand Down
Loading