Comments (4)
HI Jerry, sorry for the late reply. I think the data source shouldn't have any 'parsing' logic like comment skipping, so that all rules can be seen in a PEG grammar file. I just wonder how difficult to specify your comment syntax in PEG grammar?
from cpp-peglib.
@g40, thanks for the feedback. I actually handled the single line comment in my experimental programming language.
Here is the rule snippet that handles the line comment:
End <- EndOfLine / EndOfFile
EndOfLine <- '\r\n' / '\n' / '\r'
EndOfFile <- !.
LineComment <- ('#' / '//') (!End .)* &End
This is a sample code that uses line comments.
https://github.com/yhirose/culebra/blob/master/samples/bug.cul
Does it work for you as well?
from cpp-peglib.
Hi Yuji
Thanks. Yes, I saw that in the grammar grammar. My problem is that one now has to embed whitespace rules in the grammar which can be problematic, esp. in more complex cases. What I had in mind was abstracting the parser data source
template <typename T=char>
class data_source
{
// set up data source
data_source(const T* ps,size_t count) { ... }
//
T next() { // return next character }
// how many chars were matched?
size_t size() const { ... }
// reset data source if match failed
void reset() {... }
// once matched, i.e. '#' or '//' skips until eol
comment_mode(const char* ps) {...}
// multi-line, match start, continue to end ...
comment_mode(const T* ps,const T* pe) {...}
};
This is pretty non-invasive, just one level of indirection:
std::string example("# hello world");
data_source<> ds(example.data(),example.size()));
ds.comment("#");
std::shared_ptr<peg::Ast> ast;
if (!parser.parse_n(ds.data(), ds.size(), ast))
throw "an error!";
Thoughts?
BR
Jerry.
from cpp-peglib.
Hi Yuji,
Sorry for the late reply here. On reflection, I think you are right. The lex
style comment parsing mechanism does not work well with PEG parsers ...
Best.
from cpp-peglib.
Related Issues (20)
- [Question] Multiline object with matched deliminators HOT 2
- Need help understanding what my parser is doing :) HOT 2
- QUESTION: How does one use "apd" (and predicate operator) HOT 1
- Tests fail to compile HOT 3
- Performance comparison with boost::spirit, PEGTL etc.? HOT 2
- Tag 1.8.5 needed HOT 1
- String token rule problem HOT 2
- Warnings due to -Woverloaded-virtual HOT 3
- Grammar performance, dictionary case insensitive not accepted HOT 3
- Inconsistent syntax error for the attached grammar HOT 1
- Use named capture in error message? HOT 1
- Last-resort failure HOT 7
- Expose a choice field for SemanticValues in dictionaries HOT 1
- Whitespace rule can spoil error messages HOT 7
- Parsing strings containing `#` HOT 1
- Severe performance regression in 1.8.6 HOT 8
- I wrote a page about cpp-peglib HOT 2
- Compatibility with CPM package manager HOT 3
- Nondeterministic parsing failure in grammar HOT 3
- C++11 Version? 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 cpp-peglib.