IParse
wefx
IParse | wefx | |
---|---|---|
5 | 4 | |
11 | 28 | |
- | - | |
3.3 | 4.9 | |
5 months ago | 4 months ago | |
C++ | C | |
GNU General Public License v3.0 only | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
IParse
-
I Wrote a String Type
Nice library with many features. But I do not always understand the focus on memory usage. I guess that the reason behind this is that less memory allocations, have a positive effect on execution times. In a parser, where you often have to compare identifiers, it is a good idea to put all strings for identifiers into a unique pointer with the help of a hash table.
In my interpreting parser [1] I use a hexa hash tree [2] for storing identifiers. It is not very memory efficient, but very fast. It turns every string (from the input buffer) into a unique pointer for that string pointing to a copy of the string. In this way comparing string (identifiers) is equivalent to comparing pointers.
The idea of the hexa hash tree is that is a tree where each node has sixteen child nodes. Which node is selected is based on a step wise evaluated hash function that first takes the lower four bytes of the string, and after reaching the end of the string, the higher four bytes of the string. The nodes often taken up more memory space than the strings themselves.
[1] https://github.com/FransFaase/IParse/
[2] https://github.com/FransFaase/IParse/blob/master/software/Id...
- Noulith: A new programming language currently used by the Advent of Code leader
-
The Tools I Use to Write Books (2018)
I wrote a tool that can process a number of MarkDown files with fragments of C code and put all those fragments in the right order to produce a file that can be compiled. It is grammar based and works with manipulating Abstract Syntax Trees, so I guess, it could be adapted for different programming languages. See: https://github.com/FransFaase/IParse#markdownc
-
C++ Compile Time Parser Generator
Interesting. I have not looked into the code, but I wonder whether it is a compiler, or just an interpreter, e.g. it converts the grammar into some internal representation that is executed by an interpreter or virtual machine. I started worked on an interpreting parser in C many years ago. And later also made Java, C++ and JavaScript version of it. For the JavaScript implementation, see: https://fransfaase.github.io/ParserWorkshop/Online_inter_par... For the C++ version, see: https://github.com/FransFaase/IParse
-
Parser generators vs. handwritten parsers: surveying major languages in 2021
I implemented an unparse function in IParse, which is not a parser generator, but a parser that interprets a grammar. See for example https://github.com/FransFaase/IParse/blob/master/software/c_... where symbols starting with a back slash are a kind of white space terminals during the unparse. For example, \inc stands for incrementing the indentation where \dec decrements it. The \s is used to indicate that at given location a space should be included.
wefx
-
Cheerp 3.0: The most advanced C++ compiler for the Web now permissively licensed
I'm particularly curious on what parts cheerp adds to their clang+llvm base. Presumably it's something like the C standard target library for WASM/JS?
For reference, here's examples of what you could do with the baseline clang with wasm (but not JS?) [1] [2] [3], referenced from a similar thread on HN.
[1] https://github.com/ern0/howto-wasm-minimal
[2] https://github.com/robrohan/wefx
[3] https://github.com/PetterS/clang-wasm
-
The Tools I Use to Write Books (2018)
I've used a similar pipeline to create "books for code and infrastructure". A/k/a coding in a somewhat literate programming style. Similar to what is described here:
gemini://gemini.robrohan.com/2022-04-23-narrative-programming.md
With output that looks similar to this: https://github.com/robrohan/wefx/blob/main/docs/manual.pdf
Using a github action like this: https://github.com/robrohan/wefx/blob/main/.github/workflows...
(most of the code borrowed from those projects)
You can do it with just plain markdown files and use directories for chapters / organization if you're just going for prose.
I've thought about using the process to try to make open textbooks where you can mix and match chapters, but I don't have any experience in that field.
Anyway, can confirm, it's an incredibly useful process.
-
Show HN: How to compile C/C++ for WASM, pure Clang, no libs, no framework
Not trying to steal your thunder, but here is another nostdlib clang -> wasm example with malloc, a few math functions, rand, and writing to a canvas doing animation.
=> https://github.com/robrohan/wefx
-
Implementing Cosine in C from Scratch
I haven’t seen this version mentioned in the thread - if you don’t need a lot of precision, here is a simple 4 line version[1] and here’s how it works[2].
Not sure who initially came up with it.
[1] https://github.com/robrohan/wefx/blob/1a918cc2d5ad87402a3830...
[2] https://www.desmos.com/calculator/lo7cf60mjz
What are some alternatives?
aoc - My Advent of Code solutions.
pure-data - Pure Data - a free real-time computer music system
Crate - CrateDB is a distributed and scalable SQL database for storing and analyzing massive amounts of data in near real-time, even with complex queries. It is PostgreSQL-compatible, and based on Lucene.
chip8-book - An introduction to Chip-8 emulation using Rust
ruby - The Ruby Programming Language
cib - clang running in browser (wasm)
ctpg - Compile Time Parser Generator is a C++ single header library which takes a language description as a C++ code and turns it into a LR1 table parser with a deterministic finite automaton lexical analyzer, all in compile time.
clang-wasm - How to build webassembly files with nothing other than standard Clang/llvm.
pp - PP - Generic preprocessor (with pandoc in mind) - macros, literate programming, diagrams, scripts...
wasm-fizzbuzz - WebAssembly from Scratch: From FizzBuzz to DooM.
nearley - 📜🔜🌲 Simple, fast, powerful parser toolkit for JavaScript.
musl - unofficial musl mirror git://git.musl-libc.org/musl