Basic Parsing In Scala
In my quest to become a compiler developer I have been learning about parsing and lexical analysis. Recently I have discovered the power of Scala’s parser combinator library, which has been a joy to use. When you partner that with their case classes, it becomes incredibly easy to create a small parser. In this tutorial, we will create a basic arithmetic parser.
In Part 1 of the series we dove into the very basics of getting an application up and running in CIL. Part 2 covered methods in CIL and how to call and create our own methods. This part of the series is going to cover branching our CIL code. Branching is a very important concept in CIL because it is what allows us to have loops and control over our program flow
The other day I came across an interesting question on StackOverflow asking how to get column names using Excel Interop in .NET and I set out to find the answer. It is a unique question because many people don’t care what column (as in letter, so “A”,”B”, “ZZ”, etc) their data is in and may dedicate the first row to friendly column headers (as you can’t change the defaults in Excel). This is what I came up with:
I was inspired by Replacing strings using regex in .NET question on StackOverflow today and got to thinking if I would be able to do this without Regex. Then I was even more inspired by the comment by djdanlib:
Could I do this in one line?
In part 1 of the series we went over the “Hello World” in CIL. This post will cover creating and calling methods as well as introducing a few more instructions. We will be getting input from the user, an integer, and then adding 10 to it, in a method we create, and then display it on the screen. Let’s get started!
This begins part 1 of a many part series on the Common Intermediate Language (formely known as MSIL) which I will refer to as CIL from now on. CIL is the assembly language of the .NET platform and is what all .NET languages ultimately get boiled down to. My reason for doing these tutorials is simple, I want to learn more about CIL and the .NET internals and what better way to do that than blogging and teaching others. Why do I want to learn about .NET internals as well as CIL? I’m creating a programming language that I want to target the .NET framework and I don’t want to be constrained by C#.
The initial commit of my combinator extension methods is up at github, so please check it out at my github page
My last post was implementing the K combinator in C# as an extension method. Today, I am moving on to the B-Combinator. The B combinator has the form:
B f g x = f(g(x))