Skip to content

How to have a parser generated

TiffanyLawrence edited this page Mar 18, 2020 · 5 revisions

Intro

Basics

How to parse an int

struct example{
    me int: age
}
string example{
    >ws>int: age
}

How to parse a string

struct example{
    me string: name
}
string example{
    >ws>string: name
}

How to parse a sequence

struct example{
    me string: firstName
    me string: middleName
    me string: lastName
}
string example{
    >{>string: firstName > ws
      >string: middleName > ws
      >string: lastName > ws
    }
}

How to parse a list

struct example{
    me Employee[list]: employees
}
string example{
    >Employee[list]: employees
}

How to parse alternatives

struct example{
    me mode[Mr, Ms, Dr]:title
}
string example{
    >ws>[("Mr"<=> title=Mr;)
        |("Ms"<=> title=Ms;)
        |("Dr"<=> title=Dr;)
    ]>ws
}

How to parse optionals

struct example{
    me string: firstName
    me string: middleName
    me string: lastName
}
string example{
    >{>string: firstName > ws
      >string[opt]: middleName > ws
      >string: lastName > ws
    }
}

How to parse productions that aren't structs

struct Example{
    me string: name
    me int: streetNumber
    me mode[N, S, E, W]: streetPrefix
    me string: streetName
    me mode[St, Pl, Ct, Ave]: streetSuffix
    me string: city
    me int: zipCode
}
string Address{
    >int: streetNumber
    >ws>[("N"<=> streetPrefix=N;)
    |("S"<=> streetPrefix=S;)
    |("E"<=> streetPrefix=E;)
    |("W"<=> streetPrefix=W;)
        ][opt]
    >ws>string: streetName
    >ws>string: city
    >ws>int: zipCode
}
string Example{
    >ws>string: name
    >ws>me Address
}

Clone this wiki locally