<?xml version="1.0"?>
<language name="lispy_null">
  <lexer>
    <match term="leftParen">"("</match>
    <match term="rightParen">")"</match>
    <match term="null">"null"</match>
    <match term="identifier">[[:alpha:]][[:alnum:]]*</match>
    <match term="number">[[:digit:]]+</match>
    <match term="string">'[^']*'</match>
    <ignore>[^[:print:]]|[\n[:blank:]]</ignore>
    <error>.</error>
    </lexer>
  <parser>
    <list name="Program" epsilon="true">
      <production>
        <symbol>Apply</symbol>
        </production>
      </list>
    <nonterm name="Apply">
      <production>
        <symbol action="drop">leftParen</symbol>
        <symbol rename="function">identifier</symbol>
        <symbol action="content">ApplyList</symbol>
        <symbol action="drop">rightParen</symbol>
        </production>
      </nonterm>
    <list name="ApplyList" epsilon="true">
      <production>
        <symbol>Apply</symbol>
        </production>
      <production>
        <symbol>identifier</symbol>
        </production>
      <production>
        <symbol>number</symbol>
        </production>
      <production>
        <symbol>string</symbol>
        </production>
      <production>
        <symbol action="token">null</symbol>
        </production>
      </list>
    </parser>
  </language>
