<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: santosh kumar singh</title>
    <description>The latest articles on DEV Community by santosh kumar singh (@santoshmnrec).</description>
    <link>https://dev.to/santoshmnrec</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F307023%2F0ecbb1c6-17bb-4815-b905-6940323935a8.png</url>
      <title>DEV Community: santosh kumar singh</title>
      <link>https://dev.to/santoshmnrec</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/santoshmnrec"/>
    <language>en</language>
    <item>
      <title>Creating External DSLs using ANTLR and C#</title>
      <dc:creator>santosh kumar singh</dc:creator>
      <pubDate>Tue, 06 Oct 2020 05:32:43 +0000</pubDate>
      <link>https://dev.to/santoshmnrec/creating-external-dsls-using-antlr-and-c-51fj</link>
      <guid>https://dev.to/santoshmnrec/creating-external-dsls-using-antlr-and-c-51fj</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0v5r06bt2dzn5g6s2f38.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0v5r06bt2dzn5g6s2f38.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
  &lt;/p&gt;
&lt;p&gt;In this post I will show you how to write a simple DSL in C# using ANTLR.&lt;/p&gt;

&lt;h1 id="what-is-dsl"&gt;What is DSL?&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;A domain-specific language is a computer language specialized to a particular application domain. This is in contrast to a general-purpose language, which is broadly applicable across domains.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1 id="what-is-antlr"&gt;What is ANTLR?&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;In computer-based language recognition, ANTLR, or ANother Tool for Language Recognition, is a parser generator that uses LL for parsing. ANTLR is the successor to the Purdue Compiler Construction Tool Set, first developed in 1989, and is under active development&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1 id="what-are-we-going-to-build"&gt;What are we going to build&lt;/h1&gt;

&lt;p&gt;In this article, I will show you how to create a DSL that converts a sentence into C# &lt;code&gt;POCO&lt;/code&gt; classes that you can serialize and save into the database.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;book a hotel room &lt;span class="token keyword"&gt;for&lt;/span&gt; Santosh Singh and 3 guests on 23-SEP-2013 00:12
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We are going to parse the above statement into C# &lt;code&gt;POCO&lt;/code&gt; classes by using ANLTR, and the output will be as shown below.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;span class="token punctuation"&gt;{&lt;/span&gt;&lt;span class="token string"&gt;"Time"&lt;/span&gt;&lt;span class="token keyword"&gt;:&lt;/span&gt;&lt;span class="token string"&gt;"2013-09-23T00:12:00"&lt;/span&gt;,&lt;span class="token string"&gt;"Person"&lt;/span&gt;:&lt;span class="token punctuation"&gt;{&lt;/span&gt;&lt;span class="token string"&gt;"FirstName"&lt;/span&gt;&lt;span class="token keyword"&gt;:&lt;/span&gt;&lt;span class="token string"&gt;"Santosh"&lt;/span&gt;,&lt;span class="token string"&gt;"LastName"&lt;/span&gt;&lt;span class="token keyword"&gt;:&lt;/span&gt;&lt;span class="token string"&gt;"Singh"&lt;/span&gt;,&lt;span class="token string"&gt;"NumberOfGuests"&lt;/span&gt;:3&lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id="prerequisite"&gt;Prerequisite&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ANTLR&lt;/li&gt;
&lt;li&gt;Visual Studio Code with ANTLR extensions
Before writing, grammar let’s first create our &lt;code&gt;POCO&lt;/code&gt; classes that we want to populate from our DSL&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Booking.cs&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre&gt;&lt;code&gt;&lt;span class="token keyword"&gt;using&lt;/span&gt; System&lt;span class="token punctuation"&gt;;&lt;/span&gt;

&lt;span class="token keyword"&gt;public&lt;/span&gt; &lt;span class="token keyword"&gt;partial&lt;/span&gt; &lt;span class="token keyword"&gt;class&lt;/span&gt; &lt;span class="token class-name"&gt;Booking&lt;/span&gt;
&lt;span class="token punctuation"&gt;{&lt;/span&gt;
    &lt;span class="token keyword"&gt;public&lt;/span&gt; DateTime Time &lt;span class="token punctuation"&gt;{&lt;/span&gt; &lt;span class="token keyword"&gt;get&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt; &lt;span class="token keyword"&gt;set&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;
    &lt;span class="token keyword"&gt;public&lt;/span&gt; Person Person &lt;span class="token punctuation"&gt;{&lt;/span&gt; &lt;span class="token keyword"&gt;get&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt; &lt;span class="token keyword"&gt;set&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;
&lt;span class="token punctuation"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;Person.cs&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre&gt;&lt;code&gt;&lt;span class="token keyword"&gt;public&lt;/span&gt; &lt;span class="token keyword"&gt;class&lt;/span&gt; &lt;span class="token class-name"&gt;Person&lt;/span&gt;&lt;span class="token punctuation"&gt;{&lt;/span&gt;

&lt;span class="token keyword"&gt;public&lt;/span&gt; &lt;span class="token keyword"&gt;string&lt;/span&gt; FirstName &lt;span class="token punctuation"&gt;{&lt;/span&gt; &lt;span class="token keyword"&gt;get&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt; &lt;span class="token keyword"&gt;set&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;
&lt;span class="token keyword"&gt;public&lt;/span&gt; &lt;span class="token keyword"&gt;string&lt;/span&gt; LastName &lt;span class="token punctuation"&gt;{&lt;/span&gt; &lt;span class="token keyword"&gt;get&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt; &lt;span class="token keyword"&gt;set&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;
&lt;span class="token keyword"&gt;public&lt;/span&gt; &lt;span class="token keyword"&gt;int&lt;/span&gt; NumberOfGuests &lt;span class="token punctuation"&gt;{&lt;/span&gt; &lt;span class="token keyword"&gt;get&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt; &lt;span class="token keyword"&gt;set&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;
    &lt;span class="token keyword"&gt;public&lt;/span&gt; &lt;span class="token keyword"&gt;override&lt;/span&gt; &lt;span class="token keyword"&gt;string&lt;/span&gt; &lt;span class="token function"&gt;ToString&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;
    &lt;span class="token punctuation"&gt;{&lt;/span&gt;
        &lt;span class="token keyword"&gt;return&lt;/span&gt; $&lt;span class="token string"&gt;"{FirstName}-{LastName}-{NumberOfGuests}"&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
    &lt;span class="token punctuation"&gt;}&lt;/span&gt;
&lt;span class="token punctuation"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id="antlr-grammar"&gt;ANTLR Grammar&lt;/h2&gt;

&lt;p&gt;The first thing we will do that write the grammar file for the above statement. Below is the grammar for our DSL. ANTLR grammar consists of two parts&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parser&lt;/li&gt;
&lt;li&gt;Lexer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In our grammar parser are&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;booking&lt;/li&gt;
&lt;li&gt;time&lt;/li&gt;
&lt;li&gt;person&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Booking is the start of the parsing.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here I am using Actions and Attribute instead of Visitor. Actions are blocks of text written in the target language and enclosed in curly braces. The recognizer triggers them according to their locations within the grammar. For example, the following rule emits a &lt;code&gt;Booking&lt;/code&gt; model after the parser has seen a valid declaration:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre&gt;&lt;code&gt;booking
    returns[Booking b]:
    'book' 'a' 'hotel' 'room' 'for' person 'guests' 'on' time {
      $b=new Booking();
      $b.Time=$time.t;
      $b.Person=$person.p;

    };
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;Grammar&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre&gt;&lt;code&gt;grammar Booking&lt;span class="token punctuation"&gt;;&lt;/span&gt;

@lexer::header &lt;span class="token punctuation"&gt;{&lt;/span&gt;
    using System&lt;span class="token punctuation"&gt;;&lt;/span&gt;
&lt;span class="token punctuation"&gt;}&lt;/span&gt;

booking
    returns&lt;span class="token punctuation"&gt;[&lt;/span&gt;Booking b&lt;span class="token punctuation"&gt;]&lt;/span&gt;:
    &lt;span class="token string"&gt;'book'&lt;/span&gt; &lt;span class="token string"&gt;'a'&lt;/span&gt; &lt;span class="token string"&gt;'hotel'&lt;/span&gt; &lt;span class="token string"&gt;'room'&lt;/span&gt; &lt;span class="token string"&gt;'for'&lt;/span&gt; person &lt;span class="token string"&gt;'guests'&lt;/span&gt; &lt;span class="token string"&gt;'on'&lt;/span&gt; &lt;span class="token function"&gt;time&lt;/span&gt; &lt;span class="token punctuation"&gt;{&lt;/span&gt;
      &lt;span class="token variable"&gt;$b&lt;/span&gt;&lt;span class="token operator"&gt;=&lt;/span&gt;new Booking&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
      &lt;span class="token variable"&gt;$b&lt;/span&gt;.Time&lt;span class="token operator"&gt;=&lt;/span&gt;&lt;span class="token variable"&gt;$time&lt;/span&gt;.t&lt;span class="token punctuation"&gt;;&lt;/span&gt;
      &lt;span class="token variable"&gt;$b&lt;/span&gt;.Person&lt;span class="token operator"&gt;=&lt;/span&gt;&lt;span class="token variable"&gt;$person&lt;/span&gt;.p&lt;span class="token punctuation"&gt;;&lt;/span&gt;

    &lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
&lt;span class="token function"&gt;time&lt;/span&gt;
    returns&lt;span class="token punctuation"&gt;[&lt;/span&gt;DateTime t&lt;span class="token punctuation"&gt;]&lt;/span&gt;:
    d &lt;span class="token operator"&gt;=&lt;/span&gt; datetime &lt;span class="token punctuation"&gt;{&lt;/span&gt;
    Console.WriteLine&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token variable"&gt;$d&lt;/span&gt;.text&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
    &lt;span class="token variable"&gt;$t&lt;/span&gt;&lt;span class="token operator"&gt;=&lt;/span&gt;DateTime.Parse&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token variable"&gt;$d&lt;/span&gt;.text&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;

&lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
person
    returns&lt;span class="token punctuation"&gt;[&lt;/span&gt;Person p&lt;span class="token punctuation"&gt;]&lt;/span&gt;:
    f &lt;span class="token operator"&gt;=&lt;/span&gt; firstName l &lt;span class="token operator"&gt;=&lt;/span&gt; lastName &lt;span class="token string"&gt;'and'&lt;/span&gt; n &lt;span class="token operator"&gt;=&lt;/span&gt; numberOfGuests &lt;span class="token punctuation"&gt;{&lt;/span&gt;

       &lt;span class="token variable"&gt;$p&lt;/span&gt;&lt;span class="token operator"&gt;=&lt;/span&gt;new Person&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
       &lt;span class="token variable"&gt;$p&lt;/span&gt;.FirstName&lt;span class="token operator"&gt;=&lt;/span&gt;&lt;span class="token variable"&gt;$f&lt;/span&gt;.text&lt;span class="token punctuation"&gt;;&lt;/span&gt;
       &lt;span class="token variable"&gt;$p&lt;/span&gt;.LastName&lt;span class="token operator"&gt;=&lt;/span&gt;&lt;span class="token variable"&gt;$l&lt;/span&gt;.text&lt;span class="token punctuation"&gt;;&lt;/span&gt;
       &lt;span class="token variable"&gt;$p&lt;/span&gt;.NumberOfGuests&lt;span class="token operator"&gt;=&lt;/span&gt;int.Parse&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token variable"&gt;$n&lt;/span&gt;.text&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;

   &lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;

firstName: STRING&lt;span class="token punctuation"&gt;;&lt;/span&gt;
lastName: STRING&lt;span class="token punctuation"&gt;;&lt;/span&gt;
numberOfGuests: NUMBER&lt;span class="token punctuation"&gt;;&lt;/span&gt;
datetime:
    NUMBER NUMBER SEPARATOR MONTH SEPARATOR YEAR NUMBER NUMBER COLON NUMBER NUMBER&lt;span class="token punctuation"&gt;;&lt;/span&gt;
YEAR: NUMBER NUMBER NUMBER NUMBER&lt;span class="token punctuation"&gt;;&lt;/span&gt;

NUMBER: &lt;span class="token punctuation"&gt;[&lt;/span&gt;0-9&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
MONTH:
    JAN
    &lt;span class="token operator"&gt;|&lt;/span&gt; FEB
    &lt;span class="token operator"&gt;|&lt;/span&gt; MAR
    &lt;span class="token operator"&gt;|&lt;/span&gt; APR
    &lt;span class="token operator"&gt;|&lt;/span&gt; MAY
    &lt;span class="token operator"&gt;|&lt;/span&gt; JUN
    &lt;span class="token operator"&gt;|&lt;/span&gt; JUL
    &lt;span class="token operator"&gt;|&lt;/span&gt; AUG
    &lt;span class="token operator"&gt;|&lt;/span&gt; SEP
    &lt;span class="token operator"&gt;|&lt;/span&gt; OCT
    &lt;span class="token operator"&gt;|&lt;/span&gt; NOV
    &lt;span class="token operator"&gt;|&lt;/span&gt; DEC&lt;span class="token punctuation"&gt;;&lt;/span&gt;

STRING: &lt;span class="token punctuation"&gt;[&lt;/span&gt;a-zA-Z&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;a-zA-Z&lt;span class="token punctuation"&gt;]&lt;/span&gt;+&lt;span class="token punctuation"&gt;;&lt;/span&gt;
JAN: &lt;span class="token punctuation"&gt;[&lt;/span&gt;Jj&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Aa&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Nn&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
FEB: &lt;span class="token punctuation"&gt;[&lt;/span&gt;Ff&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Ee&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Bb&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
MAR: &lt;span class="token punctuation"&gt;[&lt;/span&gt;Mm&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Aa&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Rr&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
APR: &lt;span class="token punctuation"&gt;[&lt;/span&gt;Aa&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Pp&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Rr&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
MAY: &lt;span class="token punctuation"&gt;[&lt;/span&gt;Mm&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Aa&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Yy&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
JUN: &lt;span class="token punctuation"&gt;[&lt;/span&gt;Jj&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Uu&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Nn&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
JUL: &lt;span class="token punctuation"&gt;[&lt;/span&gt;Jj&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Uu&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Ll&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
AUG: &lt;span class="token punctuation"&gt;[&lt;/span&gt;Aa&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Uu&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Gg&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
SEP: &lt;span class="token punctuation"&gt;[&lt;/span&gt;Ss&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Ee&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Pp&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
OCT: &lt;span class="token punctuation"&gt;[&lt;/span&gt;Oo&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Cc&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Tt&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
NOV: &lt;span class="token punctuation"&gt;[&lt;/span&gt;Nn&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Oo&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Vv&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
DEC: &lt;span class="token punctuation"&gt;[&lt;/span&gt;Dd&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Ee&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;Cc&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
SEPARATOR: &lt;span class="token string"&gt;'-'&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
COLON: &lt;span class="token string"&gt;':'&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;

WS: &lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token string"&gt;' '&lt;/span&gt; &lt;span class="token operator"&gt;|&lt;/span&gt; &lt;span class="token string"&gt;'\r'&lt;/span&gt; &lt;span class="token operator"&gt;|&lt;/span&gt; &lt;span class="token string"&gt;'\n'&lt;/span&gt; &lt;span class="token operator"&gt;|&lt;/span&gt; &lt;span class="token string"&gt;'\t'&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt; -&lt;span class="token operator"&gt;&amp;gt;&lt;/span&gt; channel&lt;span class="token punctuation"&gt;(&lt;/span&gt;HIDDEN&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;Parse Tree&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F1.bp.blogspot.com%2F-LG6qdRDm3HI%2FX14J5hSFfnI%2FAAAAAAAAM2A%2FabxwkU7NkZ0o3BveOk0WWW7eR6Dc_aqyQCLcBGAsYHQ%2Fs320%2FparseTree.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F1.bp.blogspot.com%2F-LG6qdRDm3HI%2FX14J5hSFfnI%2FAAAAAAAAM2A%2FabxwkU7NkZ0o3BveOk0WWW7eR6Dc_aqyQCLcBGAsYHQ%2Fs320%2FparseTree.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now inside the main method, write the following code.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Assuming you have generated the parser and lexer code using ANTLR.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;Program.cs&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre&gt;&lt;code&gt;&lt;span class="token keyword"&gt;using&lt;/span&gt; System&lt;span class="token punctuation"&gt;;&lt;/span&gt;
&lt;span class="token keyword"&gt;using&lt;/span&gt; Antlr4&lt;span class="token punctuation"&gt;.&lt;/span&gt;Runtime&lt;span class="token punctuation"&gt;;&lt;/span&gt;
&lt;span class="token keyword"&gt;using&lt;/span&gt; Newtonsoft&lt;span class="token punctuation"&gt;.&lt;/span&gt;Json&lt;span class="token punctuation"&gt;;&lt;/span&gt;

&lt;span class="token keyword"&gt;namespace&lt;/span&gt; antlraction
&lt;span class="token punctuation"&gt;{&lt;/span&gt;
    &lt;span class="token keyword"&gt;class&lt;/span&gt; &lt;span class="token class-name"&gt;Program&lt;/span&gt;
    &lt;span class="token punctuation"&gt;{&lt;/span&gt;
        &lt;span class="token keyword"&gt;static&lt;/span&gt; &lt;span class="token keyword"&gt;void&lt;/span&gt; &lt;span class="token function"&gt;Main&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token keyword"&gt;string&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;&lt;span class="token punctuation"&gt;]&lt;/span&gt; args&lt;span class="token punctuation"&gt;)&lt;/span&gt;
        &lt;span class="token punctuation"&gt;{&lt;/span&gt;
            &lt;span class="token keyword"&gt;var&lt;/span&gt; input &lt;span class="token operator"&gt;=&lt;/span&gt; &lt;span class="token string"&gt;"book a hotel room  for Santosh Singh and 3 guests on 23-SEP-2013 00:12"&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;

            &lt;span class="token keyword"&gt;var&lt;/span&gt; charStream &lt;span class="token operator"&gt;=&lt;/span&gt; &lt;span class="token keyword"&gt;new&lt;/span&gt; &lt;span class="token class-name"&gt;AntlrInputStream&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;input&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
            &lt;span class="token keyword"&gt;var&lt;/span&gt; lexer &lt;span class="token operator"&gt;=&lt;/span&gt; &lt;span class="token keyword"&gt;new&lt;/span&gt; &lt;span class="token class-name"&gt;BookingLexer&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;charStream&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
            &lt;span class="token keyword"&gt;var&lt;/span&gt; tokens &lt;span class="token operator"&gt;=&lt;/span&gt; &lt;span class="token keyword"&gt;new&lt;/span&gt; &lt;span class="token class-name"&gt;CommonTokenStream&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;lexer&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
            &lt;span class="token keyword"&gt;var&lt;/span&gt; parser &lt;span class="token operator"&gt;=&lt;/span&gt; &lt;span class="token keyword"&gt;new&lt;/span&gt; &lt;span class="token class-name"&gt;BookingParser&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;tokens&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;

            &lt;span class="token keyword"&gt;var&lt;/span&gt; t &lt;span class="token operator"&gt;=&lt;/span&gt; parser&lt;span class="token punctuation"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;booking&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;b&lt;span class="token punctuation"&gt;;&lt;/span&gt;
            System&lt;span class="token punctuation"&gt;.&lt;/span&gt;Console&lt;span class="token punctuation"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;WriteLine&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;JsonConvert&lt;span class="token punctuation"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;SerializeObject&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;t&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
        &lt;span class="token punctuation"&gt;}&lt;/span&gt;
    &lt;span class="token punctuation"&gt;}&lt;/span&gt;
&lt;span class="token punctuation"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F1.bp.blogspot.com%2F-cfJq1ifj9KU%2FX13-rrc9iGI%2FAAAAAAAAM10%2FWKR0ijonO-A-yehADOD7rQ20-91Aqkm_gCLcBGAsYHQ%2Fs400%2Fout.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F1.bp.blogspot.com%2F-cfJq1ifj9KU%2FX13-rrc9iGI%2FAAAAAAAAM10%2FWKR0ijonO-A-yehADOD7rQ20-91Aqkm_gCLcBGAsYHQ%2Fs400%2Fout.PNG" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;span class="token punctuation"&gt;{&lt;/span&gt;&lt;span class="token string"&gt;"Time"&lt;/span&gt;&lt;span class="token keyword"&gt;:&lt;/span&gt;&lt;span class="token string"&gt;"2013-09-23T00:12:00"&lt;/span&gt;,&lt;span class="token string"&gt;"Person"&lt;/span&gt;:&lt;span class="token punctuation"&gt;{&lt;/span&gt;&lt;span class="token string"&gt;"FirstName"&lt;/span&gt;&lt;span class="token keyword"&gt;:&lt;/span&gt;&lt;span class="token string"&gt;"Santosh"&lt;/span&gt;,&lt;span class="token string"&gt;"LastName"&lt;/span&gt;&lt;span class="token keyword"&gt;:&lt;/span&gt;&lt;span class="token string"&gt;"Singh"&lt;/span&gt;,&lt;span class="token string"&gt;"NumberOfGuests"&lt;/span&gt;:3&lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;br&gt;&lt;br&gt;
&lt;a href="https://codeguru.co.in" rel="noopener noreferrer"&gt;My Blog&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.codeguru.co.in/2020/09/how-to-parse-csv-using-antlr-in-c.html" rel="noopener noreferrer"&gt;ANTLR CSV&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.amazon.com/Create-Compiler-Using-ANTLR-Crash-Course-ebook/dp/B09BJ4CRTJ/?_encoding=UTF8&amp;amp;pd_rd_w=wpB9S&amp;amp;pf_rd_p=6e9da02f-f7a3-444f-aea6-9ef09ed8bb89&amp;amp;pf_rd_r=FET7J8TSK07KVT64TNK9&amp;amp;pd_rd_r=da488aa2-6156-4f6b-a7f3-7e573e8df0df&amp;amp;pd_rd_wg=YlRFM&amp;amp;ref_=pd_gw_ci_mcx_mr_hp_d" rel="noopener noreferrer"&gt;Create Compiler In C# Using ANTLR-Crash Course &lt;/a&gt;

</description>
      <category>antlr</category>
      <category>csharp</category>
      <category>dsl</category>
    </item>
  </channel>
</rss>
