mrkkrp
0d39e44f40
Merge branch 'new-lexer'
2015-09-13 21:16:39 +06:00
mrkkrp
704f84f018
finished tests for ‘Text.Megaparsec.Lexer’
...
Covered the rest of public functions:
* ‘space’
* ‘symbol’
* ‘symbol'’
* ‘indentGuard’
* ‘skipLineComment’
* ‘skipBlockComment’
2015-09-13 21:00:39 +06:00
mrkkrp
ec3b5934f0
fix a typo (columns starts from 1)
2015-09-13 21:00:22 +06:00
mrkkrp
193d7ade07
fixed ‘skipLineComment’ and ‘skipBlockComment’
...
Multi-character staring/ending sequences should be wrapped with
‘try’. Also, ‘lookAhead’ should not be used in ‘skipBlockComment’.
2015-09-13 18:51:15 +06:00
mrkkrp
26f3039c8b
added more tests for ‘Text.Megaparsec.Lexer’
...
The following functions are covered:
* ‘float’
* ‘number’
* ‘signed’
2015-09-12 17:06:58 +06:00
mrkkrp
de16f4242f
started writing tests for ‘Text.Megaparsec.Lexer’
...
Currently the following combinators are tested:
* ‘charLiteral’
* ‘integer’
* ‘decimal’
* ‘hexadecimal’
* ‘octal’
2015-09-11 17:15:46 +06:00
mrkkrp
4e8a1c298a
fixed the failing old test
...
Multi-character operators should use ‘try’ in order to be reported
correctly (as “operator”). I've mentioned it in doc-string of
‘makeExprParser’.
It's tempting to include ‘try’ directly in expression parsing code, but
following general spirit of Parsec toward ‘try’, I think current
solution is the best.
2015-09-11 15:10:14 +06:00
mrkkrp
7133fb54b7
extend list of contributors
2015-09-11 14:21:23 +06:00
mrkkrp
f256532c69
refresh ‘.gitignore’
2015-09-11 14:20:01 +06:00
Mark Karpov
28d201ed1d
Merge pull request #30 from tulcod/master
...
Add a few synthetic benchmarks
2015-09-11 13:24:00 +05:00
Auke Booij
a7fbf2fe04
Add a few synthetic benchmarks
...
This code benchmarks the "string" primitive and various non-primitive combinators.
The code coverage of these benchmarks is not 100%: new benchmarks should be added
as relevant performance questions are discovered.
2015-09-10 18:11:46 +02:00
mrkkrp
3de3f6965d
make ‘hexadecimal’ and ‘octal’ more powerful
...
Various languages may vary in how hexadecimal and octal literals should
be prefixed. Following the spirit of the new lexer we leave this to
programmer to decide.
2015-09-09 14:15:39 +06:00
mrkkrp
c6f06b2ed1
fix a typo
2015-09-08 20:27:49 +06:00
mrkkrp
7298c01387
first version of the new lexer module
2015-09-08 17:34:02 +06:00
mrkkrp
bf863e03c3
fix a typo in ‘.travis.yml’ file
2015-09-06 19:18:39 +06:00
mrkkrp
f58d5bfe1c
further refinement
2015-09-06 15:23:12 +06:00
mrkkrp
b6a43c3335
started work on new lexer
...
Eliminated ‘Text.Megaparsec.Language’ module because at this point it is
clear that already existing definitions are of little use in
Megaparsec. I started writing “default” language definition in
‘Text.Megaparsec.Lexer’.
At this point it should be possible to parse languages where indentation
matters, although we will need to provide more helpers to make it
easier.
2015-09-06 15:23:12 +06:00
mrkkrp
d8d810e78e
add sections to ‘Text.Megaparsec.Char’ module
2015-09-06 15:22:37 +06:00
mrkkrp
7516ec4f23
added more case-insensitive character parsers
...
The following parsers are introduced:
* ‘char'’
* ‘oneOf'’
* ‘noneOf'’
2015-09-06 15:17:37 +06:00
mrkkrp
6ac08b0956
added new parser ‘string'’
...
This is like ‘string’, but is case-insensitive.
2015-09-04 18:12:59 +06:00
mrkkrp
183c996e6a
fix flaw in test for ‘eol’ character parser
2015-08-30 18:16:59 +06:00
mrkkrp
2ca6316f33
renamed ‘Text.Megaparsec.Token’ module
...
Now it's called ‘Text.Megaparsec.Lexer’. This commit contains other
cosmetic changes as well.
2015-08-30 16:00:07 +06:00
mrkkrp
b35ecbc31f
added tests for ‘Text.Megaparsec.Expr’
...
The single test covers 100 % of the module's code. However it doesn't
check quality of error messages, so we still have room for improvement.
Manual tests show that error messages are good.
2015-08-29 22:24:55 +06:00
mrkkrp
0b3efb649b
refactoring of ‘Text.Megaparsec.Expr’
2015-08-29 16:54:15 +06:00
mrkkrp
8b05353a32
new test to check that ‘hidden’ always works
2015-08-29 16:03:41 +06:00
mrkkrp
eb14e7d327
improve functioning of ‘hidden’ combinator
...
When ‘p’ in ‘hidden p’ fails we should discard all expected messages and
don't add any new messages.
2015-08-29 16:01:36 +06:00
mrkkrp
3850c64416
correct a typo and clean up description
2015-08-26 17:57:33 +06:00
mrkkrp
89f34688ab
don't create hints for errors without messages
2015-08-26 17:26:06 +06:00
mrkkrp
49e80775ef
added test to catch bugs similar to #25
2015-08-26 16:15:30 +06:00
mrkkrp
cb3078d07c
don't put older hints before newer ones, fixes #25
...
Obviously order does matter here, since ‘Monoid’ instance for ‘Hints’ is
derived from [], so (<>) is the same as (++) and we should be careful
to keep things in the right order.
2015-08-26 15:53:37 +06:00
mrkkrp
c31f0769fd
rewrite ‘choice’ as synonym of ‘asum’
2015-08-26 06:37:41 +06:00
mrkkrp
2390f9f753
swap ‘count’ and ‘count'’
2015-08-25 15:55:57 +06:00
mrkkrp
388d8b7a43
finished tests for ‘Text.Megaparsec.Combinator’
...
Added the following tests:
* ‘count’
* ‘count'’
* ‘endBy’
* ‘endBy1’
* ‘sepBy’
* ‘sepBy1’
2015-08-25 15:42:44 +06:00
mrkkrp
23b083cea6
deprecate some parsers, close #24
...
These parsers are considered deprecated:
* ‘chainl’
* ‘chainl1’
* ‘chainr’
* ‘chainr1’
* ‘sepEndBy’
* ‘sepEndBy1’
Apart from this, the commit includes various cosmetic changes in
module ‘Text.Megaparsec.Combinator’.
2015-08-25 02:04:10 +06:00
mrkkrp
40d92a19a0
rewritten ‘showMessages’ in clearer manner
2015-08-24 22:19:19 +06:00
mrkkrp
d431b396f4
improve indentation for readability
2015-08-24 16:38:00 +06:00
mrkkrp
a891ff6522
improved tests for ‘(<|>)’
...
Fixed a detail in existing test ‘prop_alternative_1’ and added new test
‘prop_alternative_2’ to directly catch bugs like #23 . Re-indexed some
tests.
2015-08-24 16:35:58 +06:00
mrkkrp
0e3040eaed
some tests for ‘Text.Megaparsec.Combinator’
...
The following combinators are currently tested:
* ‘between’
* ‘choice’
* ‘manyTill’
* ‘someTill’
* ‘option’
* ‘skipMany’
* ‘skipSome’
2015-08-24 15:05:41 +06:00
mrkkrp
ff8905287b
some tests for ‘Text.Megaparsec.Perm’
...
Although the collection of tests is fairly modest, ‘prop_perm_0’ is
quite dense and should be enough for a start.
2015-08-24 14:01:54 +06:00
mrkkrp
a8577275c7
treat carriage return like ordinary character
2015-08-24 14:00:56 +06:00
mrkkrp
45f449ddb2
prefer longest match in ‘mergeError’, fixes #23
...
Since ‘mergeError’ is only used to merge errors from alternative
branches of parsing, longest match should be preferred.
2015-08-24 01:45:12 +06:00
mrkkrp
b81962e44a
added combinator ‘someTill’
2015-08-23 23:12:45 +06:00
mrkkrp
d6947a901f
various cosmetic changes (including renaming)
...
The following functions and data types have been renamed:
* ‘permute’ → ‘makePermParser’
* ‘buildExpressionParser’ → ‘makeExprParser’
* ‘GenLanguageDef’ → ‘LanguageDef’
* ‘GenTokenParser’ → ‘Lexer’
* ‘makeTokenParser’ → ‘makeLexer’
2015-08-23 21:07:03 +06:00
mrkkrp
7dd2ad94ff
minor corrections
2015-08-22 15:02:34 +06:00
mrkkrp
6e5735167f
flip argument order for ‘label’, close #21
2015-08-22 14:57:16 +06:00
mrkkrp
aa4189f4bc
move test helpers to ‘Util’ module
...
So we can reuse them to test other modules.
2015-08-22 02:46:13 +06:00
mrkkrp
85be098854
more tests for ‘Text.Megaparsec.Prim’
...
Added test for the following primitive combinators:
* ‘lookAhead’
* ‘token’
* ‘tokens’
2015-08-22 01:13:20 +06:00
mrkkrp
20984c20f2
cosmetic changes in ‘Text.Megaparsec.Prim’
...
Also eliminated dead segment of code in ‘token'’.
2015-08-22 01:12:26 +06:00
mrkkrp
d0cdb85e89
don't use ‘try’ in ‘manyTill’ unconditionally
2015-08-21 20:29:06 +06:00
mrkkrp
24afab66c8
more tests for ‘Text.Megaparsec.Prim’
...
Combinator-specific tests added:
* ‘label’
* ‘hidden’
* ‘try’
* ‘lookAhead’
* ‘notFollowedBy’
2015-08-21 20:21:55 +06:00