grammar SweetTea

rule body
  (class / expression / space)* <BodyNode>
end

rule class
  ('class->' / 'c->') gap? specialName (expression)* ('<-class' / '<-c') <ClassNode>
end

rule function
  ('function->' / 'func->' / 'f->') gap? specialName (argument)* (expression)* ('<-function' / '<-func' / '<-f') <FunctionNode>
end

rule argument
      specialName / gap
end

rule expression
  variable / literal / function / space
end

rule variable
  ('variable->' / 'var->' / 'v->') gap? specialName gap? ('=' gap? literal)? <VariableNode>
end

rule literal
      string
end

rule string
      '"' ('\"' / !'"' .)* '"' <StringLiteral>
end

rule gap
  [ \t]+
end

rule space
  [\s]+
end

rule specialName
  [a-zA-Z0-9_]+
end

end