Comments (9)
The last two examples should work, yes. Could you send me your file? Maybe I pushed a non working version on github?
About the silent fail, yes, you're right, I get this pb also while working on a grammar.
I'm in the middle of rewriting the parser, but the final goal is to get better errors. From there, grammar
should test if Grammar.parse(input)
failed or not. Sorry for the discomfiture.
from pegged.
Ok, I think I get it: a char class does not accept '-' as a normal char. When you wrote [+-]
, it looked for another char after the - and failed. Hence the whole failure.
I used ('+' / '-')
when I tried to match numbers in that way (see pegged.examples.numbers), I never thought of using a class.
Hmm, what's the regex workaround for this?
from pegged.
Ah, yes, '-' is treated specially inside a class. I didn't think about using it literally there, but that does usually work with regexes. I just tried Java's regex, and it seems like if the '-' is the first or last char in the class, it treats it normally. Both [+-] and [-+] work with it.
Here's the reduced version: https://gist.github.com/2128672 and here's the Ruby grammar I started on: https://gist.github.com/2128764
I wrote my first grammar last week. Pegged is the first parser generator I've gotten working. Thanks for writing it. I played with ANTLR some a few years ago, but had troubles learning it.
Edit: I just tried Ruby's and Notepad2's regexes, and they seem to both work like Java's.
from pegged.
OK, but then how does one asl for ']' in a class? I would think that there must be an escape mechanism: -, ] and \ for -, ] and \ respectively. Along with - in first or last pos.
But that will make the char class grammar a mess...
from pegged.
I just tested with regexes, and they do have escapes like you mentioned. To use a \
, [
, or ]
in a regex char class, you have to escape them: \\
, \[
, and \]
. (I got errors when trying to use [
unescaped.) In regexes, you can also escape other special characters like +
and *
even though it is unneeded.
I don't care whether you implement this or not. It would be a little more convenient, but as you say, it adds complexity. One can always work around it by using ([a-z] / '[' / ']')*
instead of [a-z\[\]]*
.
from pegged.
OK, I just implemented escape sequences for -, [, ] and . Just use -, [ ...
Btw, ' and " also work in char classes (with correct D strings that is, I like to use ` as a string delimiter.
from pegged.
Oh and btw, [-+]
works also, because it's parsed as Char Char
and not Char '-' Char
from pegged.
Your examples now work, either with [-+]
or with [+\-]
.
Keep me informed on the Ruby grammar!
from pegged.
Hmm, I re-introduced space sensitivity in Pegged which will impact your Ruby grammar.
See the main wiki page, but the idea is that <-
is PEG-standard space-sensitive rule (no space consumed between sequence elements), whereas using just <
as an arrow (a 'space arrow') will create a space consuming rule, at least for its main constituents.
That means that for the gist you showed me, instead of :
Comment <- '#' > (!EOL > .)* > (EOL / EOI)
Expr <- FloatLiteral / IntegerLiteral
# OctLiteral comes before DecLiteral
IntegerLiteral <~ HexLiteral / BinLiteral / OctLiteral / DecLiteral
FloatLiteral <~ DecLiteral > '.' > DecLiteral > ([eE] > [+-]? > [0-9]+)?
do:
Comment <- '#' (!EOL > .)* (EOL / EOI)
Expr <- FloatLiteral / IntegerLiteral
# OctLiteral comes before DecLiteral
IntegerLiteral <~ HexLiteral / BinLiteral / OctLiteral / DecLiteral
FloatLiteral <~ DecLiteral '.' DecLiteral ([eE] [-+]? [0-9]+)?
Which hopefully results in a cleaner grammar.
from pegged.
Related Issues (20)
- Unwanted space consumption in rule parameter
- Syntax wrappers HOT 1
- How does one do Intellisense using a Pegged grammar? HOT 3
- Is there a way to break up a grammar into D classes, each with their own data to parse into & thus subgrammar? HOT 2
- I can't find the Wikipedia ParseTree handling code in the Pegged wiki any more... HOT 1
- Will there be a speed-up when using a Dlang switch-case and shorter pegged variable names? HOT 2
- Can we create a grammar induction algorithm based upon expected Pegged parsing failures? HOT 2
- How do you use dub + pegged + asModule? HOT 1
- Bump new version HOT 7
- Remove obsolete CI.
- How do you branch on complex names such as caseSensitiveLiteral!("let") (they get much more complicated) HOT 1
- Undocumented features of Pegged HOT 2
- Remove Leading and trailing automatic space capture HOT 6
- core.exception.ArraySliceError@pegged\pegged\peg.d(1930): slice [0 .. 18446744073709551612] extends past source array of length 0 HOT 7
- v0.4.9: Invalid grammar errors are not reported HOT 29
- GrammarTester enhancment proposal HOT 5
- Recreating D's identifier-delimited string literals HOT 4
- Status of dgrammar.d? HOT 1
- Keeping a node even it has zero matches HOT 1
- 🚧Building dgrammar.d takes how much memory? 🧠 > 16GB - my laptop's 💻 limit? "Memory allocation failed" HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pegged.