Earlier quoted context omitted.
You can build a parser around regexes though, where most of the code is regexes and then you have a little bit of code to deal with the irregularity. For instance consider arithmethic expressions consisting of constants, -, +, *, /, and parentheses. You could evaluate that using something like (expression to parse a numeral is left as exercise to reader). while expression is not a numeral replace all "\((NUMERAL)\)"…
What you are doing there is conflating the lexing phase and the parsing phase. Regexes are perfect for recognizing tokens, but for a language with nested parentheses, you must have a push-down automaton to process it. Otherwise, you will not be able to verify that your delimiters are matched.
Let's write a compiler, part 5: A code generator
21–30 of 32 posts
Re: Let's write a compiler, part 5: A code generator
#22This series of blogposts is amusing but it is kind of frustrating too: the end result is merely a compiler. It is a source to source translator from a source language which is very very similar to a subset of the target language. Well I guess you can call that a compiler, but it really doesn't teach the readers what an actual compiler looks like. Exaggerating a little, I would say that it feels like a few calls to se…
Lots of compiler tutorials are like this - there's very little out there to explain how compilers really work. This is my effort - trying to show genuine data structures and processes. https://github.com/chrisseaton/rhizome
Re: Let's write a compiler, part 5: A code generator
#23Hi all, I have a bit off topic question but seems related. I'm trying to write sort of a SQL compiler. The current goal is to analyze queries and find similarities, later maybe to translate between sql dialects. I found Uber's QueryParser[1] but it's in haskell, so I started wrapping the python sqlparse[2] library and implement a Visitor to traverse their weird AST. 1. How close is it to implementing a compiler? 2. I…
You can contribute to the project.
Re: Let's write a compiler, part 5: A code generator
#24Hi all, I have a bit off topic question but seems related. I'm trying to write sort of a SQL compiler. The current goal is to analyze queries and find similarities, later maybe to translate between sql dialects. I found Uber's QueryParser[1] but it's in haskell, so I started wrapping the python sqlparse[2] library and implement a Visitor to traverse their weird AST. 1. How close is it to implementing a compiler? 2. I…
Then you should focus on the optimization phase. Where indexes, table statistics, etc are involved. The parsing and even translating sql from one dialect to another wouldn't give much for you to analyze.
I'm assuming you want to learn about query performance and execution plans?
Frankly, if you want to analyze queries, just install the rdbms, set up a data warehouse and use the tools available to analyze query plans/etc. There are so much that affects queries beyond the actual sql since the hardware and data load affects the queries. You could run the same sql query and end up with wildly different query/execution plans depending on how the data/tables/indexes are changed on your system.
Re: Let's write a compiler, part 5: A code generator
#25Earlier quoted context omitted.
Lots of compiler tutorials are like this - there's very little out there to explain how compilers really work. This is my effort - trying to show genuine data structures and processes. https://github.com/chrisseaton/rhizome
Hey, I just skimmed through this, it seems to be brilliant!! Just one question, can one go through this tutorial without much knowledge about Ruby? Should one read it with 'Ruby Under a Microscope'? I have a decent enough knowledge about compilers, have gone through Thorsten Ball's, 'Writing an Interpreter in Go'.
But the project is unfinished I’m afraid - you will find dead-ends.
Re: Let's write a compiler, part 5: A code generator
#26Hi all, I have a bit off topic question but seems related. I'm trying to write sort of a SQL compiler. The current goal is to analyze queries and find similarities, later maybe to translate between sql dialects. I found Uber's QueryParser[1] but it's in haskell, so I started wrapping the python sqlparse[2] library and implement a Visitor to traverse their weird AST. 1. How close is it to implementing a compiler? 2. I…
Lookup Apache Calcite that does most of what you describe. You can contribute to the project.
Re: Let's write a compiler, part 5: A code generator
#27Hi all, I have a bit off topic question but seems related. I'm trying to write sort of a SQL compiler. The current goal is to analyze queries and find similarities, later maybe to translate between sql dialects. I found Uber's QueryParser[1] but it's in haskell, so I started wrapping the python sqlparse[2] library and implement a Visitor to traverse their weird AST. 1. How close is it to implementing a compiler? 2. I…
In JavaScript you've got: Alasql's [3] (this is a large file) and here's another SQLite parser [4].
In Java there's JSQLParser [5] and I think you can access Presto's parser too [6].
[0] https://github.com/dolthub/go-mysql-server
[1] https://github.com/blastrain/vitess-sqlparser
[2] https://github.com/eatonphil/gosql
[3] https://github.com/agershun/alasql/blob/develop/src/alasqlpa...
[4] https://github.com/codeschool/sqlite-parser
Re: Let's write a compiler, part 5: A code generator
#28Earlier quoted context omitted.
This wouldn't work as you could have a semicolon in a string, to handle that you would need to know when you're in a string, and due to the existence of backslash escapable quotes in strings, you can't do that with a regex* *A real Regular Expression. The extended versions with e.g backrefs can. But they're also Turing complete anyway
I know that. But admit that it is nitpicking and completely besides the point.
Re: Let's write a compiler, part 5: A code generator
#29Earlier quoted context omitted.
Hey, I just skimmed through this, it seems to be brilliant!! Just one question, can one go through this tutorial without much knowledge about Ruby? Should one read it with 'Ruby Under a Microscope'? I have a decent enough knowledge about compilers, have gone through Thorsten Ball's, 'Writing an Interpreter in Go'.
Only need to know basic Ruby programming - no libraries or deep knowledge. But the project is unfinished I’m afraid - you will find dead-ends.
Re: Let's write a compiler, part 5: A code generator
#30Earlier quoted context omitted.
I know that. But admit that it is nitpicking and completely besides the point.
No, it’s not beside the point at all. It disproves your statement for any real language.
Now, if your only concern is that everything that people feel and express have to be technically correct, well, have fun in your life.
However, if you actually want to learn about compilation it would be a better exercise to use way simpler languages but actually do the work, for example: write a simple stack VM which can only do NAND operation, and then parse and compile to it a boolean expression language which has 0, 1, not, and, or, xor. There you will need to build a simple AST and traverse it one time to translate the basic boolean operations to use only nand, and then a second time to compile the nand expression to your VM's assembly language.