summaryrefslogtreecommitdiff
path: root/src/compiler/GF/Grammar/Canonical.hs
AgeCommit message (Collapse)Author
2021-07-07Replace tabs for whitespace in source codeJohn J. Camilleri
2021-06-30Make GF.Grammar.Canonical.Id a type synonym for GF.Infra.Ident.RawIdentJohn J. Camilleri
This avoids a lot of conversion back and forth between Strings and ByteStrings This commit was cherry-picked from d0c27cdaae78c670b098740bfb49b428d900e640 (lpgf branch)
2020-11-10Deleted redundant pattern matchLiyana
2019-03-20GF.Grammar.Canonical: pretty printer: omit some redundant bracketsThomas Hallgren
2019-03-13GF.Grammar.Canonical: some Functor/Foldable/Traversable instancesThomas Hallgren
2019-03-12GF.Grammar.Canonical: add TuplePattern and CommentedValueThomas Hallgren
2019-03-07Expose GF.Grammar.Canonical + some refactoringThomas Hallgren
to make it available in other tools by depending on the gf package and importing it
2019-01-23Export of concrete syntax to Haskell now goes via Canonical GFThomas Hallgren
TODO: better treatment of Predef functions and record subtyping coercions
2019-01-22More work on the canonica_gf exportThomas Hallgren
+ Abstract syntax now is converted directly from the Grammar and not via PGF, so you can use `gf -batch -no-pmcfg -f canonical_gf ...`, to export to canonical_gf while skipping PMCFG and PGF file generation completely. + Flags that are normally copied to PGF files are now included in the caninical_gf output as well (in particular the startcat flag).
2019-01-18Two fixes in GF.Grammar.CanonicalThomas Hallgren
+ Hide Prelude.<> to avoid ambiguity with ghc-8.6 + Vertical alternative in the pretty printer for table types A => B
2019-01-17Adding -output-format canonical_gfThomas Hallgren
This output format converts a GF grammar to a "canonical" GF grammar. A canonical GF grammar consists of - one self-contained module for the abstract syntax - one self-contained module per concrete syntax The concrete syntax modules contain param, lincat and lin definitions, everything else has been eliminated by the partial evaluator, including references to resource library modules and functors. Record types and tables are retained. The -output-format canonical_gf option writes canonical GF grammars to a subdirectory "canonical/". The canonical GF grammars are written as normal GF ".gf" source files, which can be compiled with GF in the normal way. The translation to canonical form goes via an AST for canonical GF grammars, defined in GF.Grammar.Canonical. This is a simple, self-contained format that doesn't cover everyting in GF (e.g. omitting dependent types and HOAS), but it is complete enough to translate the Foods and Phrasebook grammars found in gf-contrib. The AST is based on the GF grammar "GFCanonical" presented here: https://github.com/GrammaticalFramework/gf-core/issues/30#issuecomment-453556553 The translation of concrete syntax to canonical form is based on the previously existing translation of concrete syntax to Haskell, implemented in module GF.Compile.ConcreteToHaskell. This module could now be reimplemented and simplified significantly by going via the canonical format. Perhaps exports to other output formats could benefit by going via the canonical format too. There is also the possibility of completing the GFCanonical grammar mentioned above and using GF itself to convert canonical GF grammars to other formats...