%%
%% Singlequoted literals are defined in the same way as Doublequoted literals.
%% See DoubleQuotedStringLiterals for more details. The difference is that
%% Singlequoted strings have only one escape, the '.
%% The Non-terminals have a similar name, but prefixed with 'S' to avoid nameclashes
%% with the Non-terminals for DoubleQuoted strings.
%%
%% @author Eric Bouwers
module languages/php/common/literals/SingleQuotedStringLiterals
exports
sorts SingleQuotedPart ConstantEncapsedString
syntax
%% A singlequoted string is a list of parts.
"'" SingleQuotedPart* "'" -> <ConstantEncapsedString-CF> {cons("SingleQuoted")}
%% Only literals and the escape are allowed
<SingleQuotedLit-LEX> -> SingleQuotedPart {cons("Literal")}
SEscape -> SingleQuotedPart
sorts SSlashCharLit SingleQuotedLit
lexical syntax
%% Slash seperatly defined to be able to define follow-restriction
(~[\'\\] | SSlashCharLit)+ -> SingleQuotedLit
"\\" -> SSlashCharLit
lexical restrictions
%% This makes sure that the longest literal is chosen, and that the
%% escapes are not parsed as literals
SSlashCharLit -/- [\'\\]
SingleQuotedLit -/- ~[\'\\]
SingleQuotedLit -/- [\\] . ~[\'\\]
sorts SEscape
syntax
%% There are two escapes, either the slash or the '
"\\" [\'\\] -> SEscape {cons("Escape")}