On Tue, 19 Dec 1995 16:05:46 -0500, Cameron Elliott cam@indy.mvbms.com wrote:
Has anyone written a Mango grammer description for Self ?
I don't think so, but I started to do it a long time ago. I never finished or tested it, but here is what I wrote: ------------------------ start of s3.grm ---------------------- Name: 's3' Behavior: 's3.behavior.self'
Syntax: SLR(1)
<exprssion> ::= <keyMess>;
<keyMess> ::| <binkey> <rkey>; <binkey> ::= <binMess> <keyopt>; <rkey> ::= <resend> <kMess>; <keyopt> ::? <kMess>; <kMess> ::= {smallKey} <argList>; <argList> ::+ <keyMess> {capKey};
<binMess> ::| <unbin> <rbin>; <unbin> ::= <unaryMess> <bList>; <rbin> ::= <resend> <bMess> <bList>; <bList> ::* <bMess>; <bMess> ::= {operator} <expression>;
<unaryMess> ::| <primun> <run>; <primun> ::= <primary> <uopt>; <run> ::= <resend> <uMess>; <uMess> ::+ {identifier};
<resend> ::| <ropt> <directed>; <ropt> ::? 'resend.'; <directed> ::= {identifier} '.';
<primary> ::| 'self' {number} {string} <method> <block> <annotation>;
<method> ::= '(' <slotList> <code> ')';
<block> ::= '[' <slotList> <code> ']';
<anootation> ::= '{' {string} <primary> '}';
<code> ::? <codes> <codes> ::| <codeList> <codeBoth> <return>; <codeBoth> ::= <codeList> '.' <return>; <codeList> ::+ <expression> '.'; <return> ::= '^' <expression> <dotopt>; <dotopt> ::? '.';
<slotList> ::? <sList>; <sList> ::= '|' <sList2> '|'; <sList2> ::* <slotDefs>; <slotDefs> ::| <annotSlots> <slotDef>; <slotDef> ::+ <slot> '.'; <annotSlots> ::= '{' {string} <sList2> '}';
<slot> ::| <privDecl> <simpleDecl>; <privDecl> ::= <privacy> <simpleDecl>; <privacy> ::| '^' '_' '^_' '_^'; <simpleDecl> ::| <argSlot> <dataSlot> <bSlot> <kSlot>;
<argSlot> ::= ':' <slotName>;
<dataSlot> ::= <slotName> <initopt>; <initopt> ::? <datainit>; <datainit> ::| <varinit> <constinit>; <varinit> ::= '<-' <expression>; <constinit> ::= '=' <expression>;
<bSlot> ::= {operator} <bDef>; <bDef> ::| <bDef1> <bDef2>; <bDef1> ::= '=' <method>; <bDef2> ::= {identifier} '=' <method>;
<kSlot> ::= {smallKeyword} <kDef>; <kDef> ::| <kDef1> <kDef2>; <kDef1> ::= <ceList> '=' <method>; <kDef2> ::= <cList> '=' <method>; <ceList> ::* {identifier} {capKeyword}; <cList> ::* {capKeyword};
<slotName> ::= {identifier} <paropt>; <paropt> ::? '*';
Lex: SLR(1)
{digit} = [0-9]; {smallLetter}= [a-z]; {capLetter} = [A-Z]; {letter} = [a-zA-Z]; {opChar} = [!@#$%^&*-+=~/?<>,;|`\]; {smallstart} = {smallLetter} | '_'; {indentChars}= {digit} | {letter} | '_'; {delimChar} = [()[]{}.:]; {blank} = [ \t\n] | {comment} {comment} = '"' {commentStuff}* '"';
{whitespace} -> {blank}+;
{op} -> {opChar}+; {capKeyword} -> {capLetter}{identChars}+ ':'; {smallKeyword}-> {smallstart}{identChars}+ ':'; {identifier} -> {smallLetter}{identChars}+; ------------------------ end of s3.grm ------------------------
Notes: I doubt very much that the grammar is SRL(1) - I just put that done until I figure out what it should be. The lexical part is very incomplete (mostly missing comments, numbers and strings). The "-" is rather nasty and this mango file doesn't handle it correctly. The "." char isn't taken care of here either. One element that showed up in Self 4.0 is a new syntax for object annotation declaration - it isn't handled here.
I hope this isn't worse than nothing ;-)
-- Jecel
self-interest@lists.selflanguage.org