%%% $Id: Literals.sdf 17765 2006-02-13 12:54:52Z jurgenv $
                                                  
module languages/sdf2/syntax/Literals

imports languages/sdf2/syntax/Kernel 
imports basic/StrCon
imports basic/IdentifierCon

exports
  sorts FunctionName SingleQuotedStrCon SingleQuotedStrChar
  lexical syntax

    "\\n"                      -> SingleQuotedStrChar {cons("newline")}
    "\\t"                      -> SingleQuotedStrChar {cons("tab")}
    "\\'"                      -> SingleQuotedStrChar {cons("quote")}
    "\\\\"                     -> SingleQuotedStrChar {cons("backslash")}
    "\\" a:[0-9]b:[0-9]c:[0-9] -> SingleQuotedStrChar {cons("decimal")}
    ~[\0-\31\n\t\'\\]          -> SingleQuotedStrChar {cons("normal")}

    [\'] chars:SingleQuotedStrChar* [\']   -> SingleQuotedStrCon  {cons("default")}

  context-free syntax
    IdCon  -> FunctionName {cons("unquoted-fun")}
    StrCon -> FunctionName {cons("quoted-fun")}

  context-free syntax
    string:StrCon                -> Symbol {cons("lit")}
    ci-string:SingleQuotedStrCon -> Symbol {cons("ci-lit")}

    fun:FunctionName "(" arguments:{Symbol ","}* ")" "->" result:Symbol Attributes 
	-> Production  {avoid, cons("prefix-fun")}