summaryrefslogtreecommitdiff
path: root/src/compiler
AgeCommit message (Collapse)Author
2013-12-06GF shell: fix help text for generate_treeshallgren
Trees are not generated with increasing depth.
2013-12-03removed the unlines-lines wrapper from Lexing.unlexer to prevent empty lines ↵aarne
when an unlexer (such as -bind or -unchars) is used as an option in linearization. Don't know really why the input had been broken into lines in the first place. You can see the effect by importing LangEng and running "gr -cat=Cl | l -table -bind" before and after recompiling GF.
2013-11-29Commment code and options relating to the old partial evaluatorhallgren
This means that the -old-comp and -new-comp flags are not recognized anymore. The only functional difference is that printnames were still normalized with the old partial evaluator. Now that is done with the new partial evaluator.
2013-11-29Move typePredefined from GF.Compile.Compute.AppPredefined to ↵hallgren
GF.Compile.TypeCheck.Primitives Also move the list of primitives
2013-11-29Move checkPredefError from GF.Compile.Compute.ConcreteLazy to GF.Grammar.Macroshallgren
Also simplified its type.
2013-11-28GFI: adapt to character encoding changeshallgren
GF.Compile.Coding is not used any more.
2013-11-28SimpleEditor.Convert: adapt to recent character encoding changeshallgren
Things got simpler!
2013-11-26Represent identifiers as UTF-8-encoded ByteStringshallgren
This was a fairly simple change thanks to previous work on making the Ident type abstract and the fact that PGF.CId already uses UTF-8-encoded ByteStrings. One potential pitfall is that Data.ByteString.UTF8 uses the same type for ByteStrings as Data.ByteString. I renamed ident2bs to ident2utf8 and bsCId to utf8CId, to make it clearer that they work with UTF-8-encoded ByteStrings. Since both the compiler input and identifiers are now UTF-8-encoded ByteStrings, the lexer now creates identifiers without copying any characters. **END OF DESCRIPTION*** Place the long patch description above the ***END OF DESCRIPTION*** marker. The first line of this file will be the patch name. This patch contains the following changes: M ./src/compiler/GF/Compile/CheckGrammar.hs -3 +3 M ./src/compiler/GF/Compile/GrammarToPGF.hs -2 +2 M ./src/compiler/GF/Grammar/Binary.hs -5 +1 M ./src/compiler/GF/Grammar/Lexer.x -11 +13 M ./src/compiler/GF/Infra/Ident.hs -19 +36 M ./src/runtime/haskell/PGF.hs -1 +1 M ./src/runtime/haskell/PGF/CId.hs -2 +3
2013-11-25Change how GF deals with character encodings in grammar fileshallgren
1. The default encoding is changed from Latin-1 to UTF-8. 2. Alternate encodings should be specified as "--# -coding=enc", the old "flags coding=enc" declarations have no effect but are still checked for consistency. 3. A transitional warning is generated for files that contain non-ASCII characters without specifying a character encoding: "Warning: default encoding has changed from Latin-1 to UTF-8" 4. Conversion to Unicode is now done *before* lexing. This makes it possible to allow arbitrary Unicode characters in identifiers. But identifiers are still stored as ByteStrings, so they are limited to Latin-1 characters for now. 5. Lexer.hs is no longer part of the repository. We now generate the lexer from Lexer.x with alex>=3. Some workarounds for bugs in alex-3.0 were needed. These bugs might already be fixed in newer versions of alex, but we should be compatible with what is shipped in the Haskell Platform.
2013-11-22fix the export for CFG grammars with BIND, SOFT_BIND and nonExistkr.angelov
2013-11-22the GF syntax for identifiers is exteded with quoted forms, i.e. you could ↵kr.angelov
write for instance 'ab.c' and then everything between the quites is identifier. This includes Unicode characters and non-ASCII symbols. This is useful for automatically generated GF grammars.
2013-11-21Some refactoring in GF.Compile and GF.Compile.GetGrammarhallgren
Move source transcoding function GF.Compile to GF.Compile.GetGrammar, in preparation for doing transcoding before lexing.
2013-11-21Some more monadic lifting changeshallgren
2013-11-20Removed some code duplication in GF.Compile.Updatehallgren
2013-11-20Reduced clutter in monadic codehallgren
+ Eliminated vairous ad-hoc coersion functions between specific monads (IO, Err, IOE, Check) in favor of more general lifting functions (liftIO, liftErr). + Generalized many basic monadic operations from specific monads to arbitrary monads in the appropriate class (MonadIO and/or ErrorMonad), thereby completely eliminating the need for lifting functions in lots of places. This can be considered a small step forward towards a cleaner compiler API and more malleable compiler code in general.
2013-11-19GF shell: improved system_pipe (aka "?") commandhallgren
1. No temporary files are created. 2. The output of a system command is read lazily, making it feasible to process large or even infinite output, e.g. the following works as expected: ? "yes" | ? "head -5" | ps -lextext
2013-11-12Fix Issue 60: Weird output when executing system commands from the gf shellhallgren
The system_pipe (aka "?") command creates a temporary file _tmpi containing the input of the system command. It *both* appends _tmpi as an extra argument to the system command line *and* adds an input redirection "< _tmpi". (It also uses and output redirection "> _tmpo" to captures the output of the command.) With this patch, the _tmpi argument is no longer appended to the command line. This allows system_pipe to work with pure filters, such as the "tr" commands, but it will no longer work with commands that require an input file name. (It is possible to use write_file instead...) TODO: it would also be fairly easy to eliminate the creation of the _tmpi and _tmpo files altogether.
2013-11-12Fix Issue 68: Cannot use an overloaded operator in table defined using ↵hallgren
square brackets Add proper type checking of course-of-values tables: + Make sure that all subterms have the same type. + Resolve overloaded operators. Note though that the GF book states in C.4.12 that the "course-of-values table [...] format is not recommended for GF source code, since the ordering of parameter values is not specified and therefore a compiler-internal decision."
2013-11-12GF.System.Chatch: remove redundant #includehallgren
2013-11-12added Predef.SOFT_BIND. This special token allows zero or more spaces ↵kr.angelov
between ordinary tokens. It is also used in the English RGL to attach the commas to the previous word.
2013-11-11Fix Issue 41: "," in context-free rules causes parsing failurehallgren
The CF parser in GF.Grammar.CF assigns function names to the rules, but they are not always unique, causing rules to be dropped in the follwing CF->GF conversion. So a pass has been added before the CF->GF conversion, to make sure that function names are unique. A comment says "rules have an amazingly easy parser", but the parser looks like quick hack. It is very sloppy and silently ignores many errors, e.g. - Explicitly given function names should end with '.', but if the do not, the last character in the function name is silently dropped. - Everything following a ';' is silently dropped.
2013-11-11Fix issue 61: GF shell cannot parse a system command ending with a spacehallgren
Trailing spaces caused the command line parse to be ambiguous, and ambiguous parses were rejected by function readCommandLine, causing the cryptic error message "command not parsed".
2013-11-06Make PGF.Tree internalhallgren
The only use of PGF.Tree outside the PGF library was in GF.Command.Commands, and it was eliminated by using PGF.Expr directly instead. PGF.Paraphrase still uses PGF.Tree.
2013-11-06Remove PGF.Signaturehallgren
This module should not be part of the public PGF library API, and it was only used in GF.CompileToAPI, so the code was moved there. The module defined constFuncs and syntaxFuncs, but only syntaxFuncs was used.
2013-11-06fix the deserialization of flags from the GFO fileskr.angelov
2013-11-06the content of ParseEngAbs3.probs is now merged with ParseEngAbs.probs. The ↵kr.angelov
later is now retrained. Once the grammar is compiled with the .probs file now it doesn't need anything more to do robust parsing. The robustness itself is controlled by the flags 'heuristic_search_factor', 'meta_prob' and 'meta_token_prob' in ParseEngAbs.gf
2013-11-05added a -treebank option to the lc commandaarne
2013-11-05linearization by chunks in the GF shell: a new command 'lc' needed because ↵aarne
'l' requires type checking and trees with metavariable function heads don't type check. This will hopefully be a temporary command.
2013-11-05Eliminate mutual dependencies between the GF compiler and the PGF libraryhallgren
+ References to modules under src/compiler have been eliminated from the PGF library (under src/runtime/haskell). Only two functions had to be moved (from GF.Data.Utilities to PGF.Utilities) to make this possible, other apparent dependencies turned out to be vacuous. + In gf.cabal, the GF executable no longer directly depends on the PGF library source directory, but only on the exposed library modules. This means that there is less duplication in gf.cabal and that the 30 modules in the PGF library will no longer be compiled twice while building GF. To make this possible, additional PGF library modules have been exposed, even though they should probably be considered for internal use only. They could be collected in a PGF.Internal module, or marked as "unstable", to make this explicit. + Also, by using the -fwarn-unused-imports flag, ~220 redundant imports were found and removed, reducing the total number of imports by ~15%.
2013-10-31Add a cabal flag to use the standard binary packagehallgren
The standard binary package has improved efficiency and error handling [1], so in the long run we should consider switching to it. At the moment, using it is possible but not recommended, since it results in incomatible PGF files. The modified modules from the binary package have been moved from src/runtime/haskell to src/binary. [1] http://lennartkolmodin.blogspot.se/2013/03/binary-07.html
2013-10-30linref is now used by the linearizer. The visible change is that the 'l' ↵kr.angelov
command in the shell now can linearize discontinuous phrases
2013-10-30added the linref construction in GF. The PGF version number is now bumpedkr.angelov
2013-10-30missing binary serialization for PImplArg in the .gfo fileskr.angelov
2013-10-24Functions merge trees into tries in the GF Shell and the PGF web servicehallgren
* In the shell, the new command tt (to_trie) merges a list of trees into a trie and prints it in a readable way, where unique subtrees are marked with a "*" and alternative subtrees are marked with numbers. * In the PGF web service, adding the parameter trie=yes to the parse and translate commands augments the JSON output with a trie. Example to try in the shell: Phrasebook> p -lang=Eng "your son waits for you" | tt
2013-10-24Commands.hs: fix a copy-paste error in the documentation of put_treehallgren
2013-10-02something in the typeinferencer of the latest GHC has changed. I need to add ↵kr.angelov
a type signature for GF.Compile.GrammarToPGF.genCncFuns in order to compile.
2013-09-23the compiler now sorts the list of sequences in the PGF fileskr.angelov
2013-09-27a major refactoring in the C and the Haskell runtimes. Note incompatible ↵kr.angelov
change in the PGF format!!! The following are the outcomes: - Predef.nonExist is fully supported by both the Haskell and the C runtimes - Predef.BIND is now an internal compiler defined token. For now it behaves just as usual for the Haskell runtime, i.e. it generates &+. However, the special treatment will let us to handle it properly in the C runtime. - This required a major change in the PGF format since both nonExist and BIND may appear inside 'pre' and this was not supported before.
2013-09-23GrammarToPGF now looks only at the top modules for the PGF flagskr.angelov
2013-09-23fix a warning in the compilerkr.angelov
2013-09-23GF.Grammar.Grammar.allExtends now returns a list of source modules instead ↵kr.angelov
of just the module names. This saves extra lookups later
2013-09-20Comment out identifier refreshing code only used by the removed refresh passhallgren
2013-09-19Introduce type RawIdent; only 9 imports of Data.ByteString.Char8 remainhallgren
The fact that identifiers are represented as ByteStrings is now an internal implentation detail in module GF.Infra.Ident. Conversion between ByteString and identifiers is only needed in the lexer and the Binary instances.
2013-09-19Make Ident abstract; imports of Data.ByteString.Char8 down from 29 to 16 moduleshallgren
Most of the explicit uses of ByteStrings were eliminated by using identS, identS = identC . BS.pack which was found in GF.Grammar.CF and moved to GF.Infra.Ident. The function prefixIdent :: String -> Ident -> Ident allowed one additional import of ByteString to be eliminated. The functions isArgIdent :: Ident -> Bool getArgIndex :: Ident -> Maybe Int were needed to eliminate explicit pattern matching on Ident from two modules.
2013-09-10Some code verbosity reductionhallgren
2013-09-10Workaround for a problem with lock fieldshallgren
This problem showed up after delaing eta expansion until just before partial evaluation
2013-05-30new-comp: delay eta expansion until just before partial evaluationhallgren
This seems to work for the most part, but a problem showed up in WordsCat.gf in the phrasebook.
2013-09-09Nonlinear patterns in concrete syntax are now detected and reported as errorshallgren
Before, they were silently converted to linear patterns. Nonlinear patterns in MorphoCat.gf, ParadigmsGre.gf and ParadigmsFin.gf have been make linear by renaming pattern variables.
2013-09-09partial evaluator: prettier complaint about nonlinears patternshallgren
2013-09-09partial evaluator: complain about nonlinear patternshallgren