Comments (6)
@zbraniecki
Indeed very interesting :P
I already knew seanmonstar/l20n.rs project to be a useful resource but I didn't know that some other guy working on a fluent implementation.
My goal is to write a fully tested parser with nom.
I will take a closer look at your project.
Thanks
from fluent.
Thanks for the explanation, it's my first parser so I'm newbie.
I'm gonna dive into this.
from fluent.
Hi @ctjhoa ! I don't have a direct answer to your question, but you may find this interesting - https://github.com/zbraniecki/fluent-rs
I wrote the parser (albeit didn't update it to latest grammar yet!) and some basic foundation for the MessageContext
.
It's very early code and I believe the code could use some love from someone with better Rust skills than mine.
Maybe we could join forces? :)
from fluent.
That's awesome! I failed to get a nom parser, and would love to compare my hand written one with nom one to see if there's any value in keeping a handwritten one at all! Can't wait to see yours working! :)
Now, let's get back to the question you asked - @stasm ?
from fluent.
@stasm still no feedback on this?
from fluent.
Thanks for your question and your patience, @ctjhoa. Recursion like this is common in grammars. In this case it allows the call-expression
to take inline expressions as positional (not named) arguments:
key = { FUNC("foo") }
key = { FUNC(1) }
key = { FUNC($arg) }
key = { FUNC(iden) }
You'll note that the same recursion is present in the placeable
→ inline-expression
→ placeable
chain.
As far as I understand it, some top-down parsers have troubles parsing recursive grammars if they use left recursion. Parsing 1 + 2 + 3
with the following grammar would be bad:
sum ::= (sum '+' )? [0-9]
Left recursion makes the parser go infinitely in a loop because the first thing it's trying to parse for a given production is the same production. In the example above the parser starts with a sum
and encounters 1
, which matches the sum
production, so the parser decides to parse another sum
; the current production is still 1
, which matches the sum
etc.. But if we switch the productions around, the parser can handle it no problem:
sum ::= [0-9] ('+' sum)?
Let me know if you have more questions and feel free to close this issue if you agree.
from fluent.
Related Issues (20)
- Korean markers (조사. e.g. 은/는, 이/가, 을/를, 와/과, ...) support? HOT 2
- reusing terms to create more complex terms HOT 2
- Term's attributes can't be used as variable values HOT 2
- Term's attributes can't be used as placeable HOT 6
- `resolveVariableReference` enforces variables names to be own properties HOT 1
- Allow dots in message identifiers HOT 7
- Select expression breaks if you have dot character on the second line of any branch HOT 2
- Compiling fluent HOT 3
- Documentation on projectfluent.org is not updated HOT 1
- Let's reduce the gap between Fluent and MessageFormat 2
- EVAL builtin function
- Pass variables from app, to a fluent selector HOT 2
- Make `[]` legal in selector HOT 4
- Design a logo (square/circle) for *.ftl file associations HOT 3
- Qt (Linguist) support HOT 1
- Future of Fluent, MessageFormat 2, etc HOT 24
- Proper way to display ordinal numbers HOT 3
- Improve selector usages in the wiki HOT 1
- syntax guide seems to be down HOT 2
- Forward all variables to parameterized term
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 fluent.