1
1
mirror of https://github.com/github/semantic.git synced 2024-12-22 06:11:49 +03:00

Merge pull request #1726 from github/charliesome/ruby-method-calls

Add special Ruby.Syntax.Send node type
This commit is contained in:
Josh Vera 2018-04-09 13:19:18 -04:00 committed by GitHub
commit e6854fd5ef
48 changed files with 211 additions and 269 deletions

View File

@ -74,6 +74,7 @@ type Syntax = '[
, Syntax.Identifier , Syntax.Identifier
, Syntax.Paren , Syntax.Paren
, Syntax.Program , Syntax.Program
, Ruby.Syntax.Send
, Ruby.Syntax.Class , Ruby.Syntax.Class
, Ruby.Syntax.Load , Ruby.Syntax.Load
, Ruby.Syntax.LowPrecedenceBoolean , Ruby.Syntax.LowPrecedenceBoolean
@ -83,7 +84,8 @@ type Syntax = '[
] ]
type Term = Term.Term (Union Syntax) (Record Location) type Term = Term.Term (Union Syntax) (Record Location)
type Assignment = HasCallStack => Assignment.Assignment [] Grammar Term type Assignment' a = HasCallStack => Assignment.Assignment [] Grammar a
type Assignment = Assignment' Term
-- | Assignment from AST in Rubys grammar onto a program in Rubys syntax. -- | Assignment from AST in Rubys grammar onto a program in Rubys syntax.
assignment :: Assignment assignment :: Assignment
@ -291,9 +293,12 @@ pair :: Assignment
pair = makeTerm <$> symbol Pair <*> children (Literal.KeyValue <$> expression <*> (expression <|> emptyTerm)) pair = makeTerm <$> symbol Pair <*> children (Literal.KeyValue <$> expression <*> (expression <|> emptyTerm))
methodCall :: Assignment methodCall :: Assignment
methodCall = makeTerm' <$> symbol MethodCall <*> children (require <|> load <|> regularCall) methodCall = makeTerm' <$> symbol MethodCall <*> children (require <|> load <|> funcCall <|> regularCall)
where where
regularCall = inj <$> (Expression.Call <$> pure [] <*> expression <*> args <*> (block <|> emptyTerm)) funcCall = inj <$> (Ruby.Syntax.Send Nothing <$> methodSelector <*> args <*> optional block)
regularCall = inj <$> (symbol Call *> children (Ruby.Syntax.Send <$> (Just <$> expression) <*> methodSelector) <*> args <*> optional block)
require = inj <$> (symbol Identifier *> do require = inj <$> (symbol Identifier *> do
s <- source s <- source
guard (s `elem` ["require", "require_relative"]) guard (s `elem` ["require", "require_relative"])
@ -302,14 +307,17 @@ methodCall = makeTerm' <$> symbol MethodCall <*> children (require <|> load <|>
s <- source s <- source
guard (s == "load") guard (s == "load")
Ruby.Syntax.Load <$> loadArgs) Ruby.Syntax.Load <$> loadArgs)
args = (symbol ArgumentList <|> symbol ArgumentListWithParens) *> children (many expression) <|> pure [] args = (symbol ArgumentList <|> symbol ArgumentListWithParens) *> children (many expression) <|> many expression
loadArgs = (symbol ArgumentList <|> symbol ArgumentListWithParens) *> children (some expression) loadArgs = (symbol ArgumentList <|> symbol ArgumentListWithParens) *> children (some expression)
nameExpression = (symbol ArgumentList <|> symbol ArgumentListWithParens) *> children expression nameExpression = (symbol ArgumentList <|> symbol ArgumentListWithParens) *> children expression
call :: Assignment methodSelector :: Assignment
call = makeTerm <$> symbol Call <*> children (Expression.MemberAccess <$> expression <*> (expressions <|> args)) methodSelector = mk Identifier <|> mk Identifier'
where where
args = (symbol ArgumentList <|> symbol ArgumentListWithParens) *> children expressions mk s = makeTerm <$> symbol s <*> (Syntax.Identifier <$> (name <$> source))
call :: Assignment
call = makeTerm <$> symbol Call <*> children (Ruby.Syntax.Send <$> (Just <$> expression) <*> methodSelector <*> pure [] <*> optional block)
rescue :: Assignment rescue :: Assignment
rescue = rescue' rescue = rescue'

View File

@ -36,6 +36,22 @@ maybeFailNotFound name = maybeFail notFound
cleanNameOrPath :: ByteString -> String cleanNameOrPath :: ByteString -> String
cleanNameOrPath = BC.unpack . dropRelativePrefix . stripQuotes cleanNameOrPath = BC.unpack . dropRelativePrefix . stripQuotes
data Send a = Send { sendReceiver :: Maybe a, sendSelector :: a, sendArgs :: [a], sendBlock :: Maybe a }
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable, FreeVariables1)
instance Eq1 Send where liftEq = genericLiftEq
instance Ord1 Send where liftCompare = genericLiftCompare
instance Show1 Send where liftShowsPrec = genericLiftShowsPrec
instance Evaluatable Send where
eval Send{..} = do
func <- case sendReceiver of
Just recv -> do
recvEnv <- subtermValue recv >>= scopedEnvironment
localEnv (mappend recvEnv) (subtermValue sendSelector)
Nothing -> subtermValue sendSelector -- TODO Does this require `localize` so we don't leak terms when resolving `sendSelector`?
call func (map subtermValue sendArgs) -- TODO pass through sendBlock
data Require a = Require { requireRelative :: Bool, requirePath :: !a } data Require a = Require { requireRelative :: Bool, requirePath :: !a }
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable, FreeVariables1) deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable, FreeVariables1)

View File

@ -5,7 +5,6 @@
( (
(Try (Try
{ ([]) { ([])
->(Call ->(Send
{+(Identifier)+} {+(Identifier)+}
{+(TextElement)+} {+(TextElement)+}) }))))
{+(Empty)+}) }))))

View File

@ -4,8 +4,7 @@
(Identifier) (Identifier)
( (
(Try (Try
{ (Call { (Send
{-(Identifier)-} {-(Identifier)-}
{-(TextElement)-} {-(TextElement)-})
{-(Empty)-})
->([]) })))) ->([]) }))))

View File

@ -4,7 +4,6 @@
(Identifier) (Identifier)
( (
(Try (Try
(Call (Send
(Identifier) (Identifier)
(TextElement) (TextElement))))))
(Empty))))))

View File

@ -1,12 +1,10 @@
(Program (Program
(Try (Try
( (
(Call (Send
(Identifier) (Identifier))
(Empty))
(Else (Else
(Empty) (Empty)
{ ([]) { ([])
->(Call ->(Send
{+(Identifier)+} {+(Identifier)+}) }))))
{+(Empty)+}) }))))

View File

@ -1,12 +1,10 @@
(Program (Program
(Try (Try
( (
(Call (Send
(Identifier) (Identifier))
(Empty))
(Else (Else
(Empty) (Empty)
{ (Call { (Send
{-(Identifier)-} {-(Identifier)-})
{-(Empty)-})
->([]) })))) ->([]) }))))

View File

@ -1,9 +1,8 @@
(Program (Program
(Try (Try
( (
(Call (Send
(Identifier) (Identifier))
(Empty))
(Else (Else
(Empty) (Empty)
([]))))) ([])))))

View File

@ -1,11 +1,9 @@
(Program (Program
(Try (Try
( (
(Call (Send
(Identifier) (Identifier))
(Empty))
(Else (Else
(Empty) (Empty)
(Call (Send
(Identifier) (Identifier))))))
(Empty))))))

View File

@ -2,13 +2,11 @@
(If (If
(Identifier) (Identifier)
( (
(Call (Send
(Identifier) (Identifier)))
(Empty)))
(If (If
(Identifier) (Identifier)
( (
{+(Call {+(Send
{+(Identifier)+} {+(Identifier)+})+})
{+(Empty)+})+})
(Empty)))) (Empty))))

View File

@ -2,13 +2,11 @@
(If (If
(Identifier) (Identifier)
( (
(Call (Send
(Identifier) (Identifier)))
(Empty)))
(If (If
(Identifier) (Identifier)
([] ([]
{-(Call {-(Send
{-(Identifier)-} {-(Identifier)-})-})
{-(Empty)-})-})
(Empty)))) (Empty))))

View File

@ -2,9 +2,8 @@
(If (If
(Identifier) (Identifier)
( (
(Call (Send
(Identifier) (Identifier)))
(Empty)))
(If (If
(Identifier) (Identifier)
([]) ([])

View File

@ -2,13 +2,11 @@
(If (If
(Identifier) (Identifier)
( (
(Call (Send
(Identifier) (Identifier)))
(Empty)))
(If (If
(Identifier) (Identifier)
( (
(Call (Send
(Identifier) (Identifier)))
(Empty)))
(Empty)))) (Empty))))

View File

@ -6,10 +6,9 @@
{+(Integer)+} {+(Integer)+}
{+(Integer)+} {+(Integer)+}
{+(Integer)+})+} {+(Integer)+})+}
{+(Call {+(Send
{+(Identifier)+} {+(Identifier)+}
{+(Identifier)+} {+(Identifier)+})+})+}
{+(Empty)+})+})+}
{-(ForEach {-(ForEach
{-( {-(
{-(Identifier)-})-} {-(Identifier)-})-}

View File

@ -22,10 +22,9 @@
{+(Integer)+} {+(Integer)+}
{+(Integer)+} {+(Integer)+}
{+(Empty)+}) } {+(Empty)+}) }
{ (Call { (Send
{-(Identifier)-} {-(Identifier)-}
{-(Identifier)-} {-(Identifier)-})
{-(Empty)-})
->(Boolean) }) ->(Boolean) })
{+(ForEach {+(ForEach
{+( {+(

View File

@ -6,7 +6,6 @@
(Integer) (Integer)
(Integer) (Integer)
(Integer)) (Integer))
(Call (Send
(Identifier) (Identifier)
(Identifier) (Identifier))))
(Empty))))

View File

@ -1,12 +1,9 @@
(Program (Program
{+(Call {+(Send
{+(MemberAccess {+(Send
{+(Call
{+(Identifier)+} {+(Identifier)+}
{+(TextElement)+} {+(TextElement)+}
{+(TextElement)+} {+(TextElement)+})+}
{+(Empty)+})+}
{+(Identifier)+})+} {+(Identifier)+})+}
{+(Empty)+})+}
{-(TextElement)-} {-(TextElement)-}
{-(TextElement)-}) {-(TextElement)-})

View File

@ -1,12 +1,9 @@
(Program (Program
{+(TextElement)+} {+(TextElement)+}
{+(TextElement)+} {+(TextElement)+}
{-(Call {-(Send
{-(MemberAccess {-(Send
{-(Call
{-(Identifier)-} {-(Identifier)-}
{-(TextElement)-} {-(TextElement)-}
{-(TextElement)-} {-(TextElement)-})-}
{-(Empty)-})-} {-(Identifier)-})-})
{-(Identifier)-})-}
{-(Empty)-})-})

View File

@ -1,10 +1,7 @@
(Program (Program
(Call (Send
(MemberAccess (Send
(Call
(Identifier) (Identifier)
(TextElement) (TextElement)
(TextElement) (TextElement))
(Empty)) (Identifier)))
(Identifier))
(Empty)))

View File

@ -1,9 +1,8 @@
(Program (Program
{-(Call {-(Send
{-(Identifier)-} {-(Identifier)-}
{-(Hash)-} {-(Hash)-})-}
{-(Empty)-})-} (Send
(Call
(Identifier) (Identifier)
(Function (Function
(Empty) (Empty)
@ -12,7 +11,7 @@
->(Plus ->(Plus
{+(Identifier)+} {+(Identifier)+}
{+(Integer)+}) })) {+(Integer)+}) }))
{-(Call {-(Send
{-(Identifier)-} {-(Identifier)-}
{-(Function {-(Function
{-(Empty)-} {-(Empty)-}

View File

@ -1,9 +1,8 @@
(Program (Program
{+(Call {+(Send
{+(Identifier)+} {+(Identifier)+}
{+(Hash)+} {+(Hash)+})+}
{+(Empty)+})+} (Send
(Call
(Identifier) (Identifier)
(Function (Function
(Empty) (Empty)
@ -12,7 +11,7 @@
{-(Identifier)-} {-(Identifier)-}
{-(Integer)-}) {-(Integer)-})
->(Identifier) })) ->(Identifier) }))
{+(Call {+(Send
{+(Identifier)+} {+(Identifier)+}
{+(Function {+(Function
{+(Empty)+} {+(Empty)+}

View File

@ -1,14 +1,13 @@
(Program (Program
(Call (Send
(Identifier) (Identifier)
(Hash) (Hash))
(Empty)) (Send
(Call
(Identifier) (Identifier)
(Function (Function
(Empty) (Empty)
(Identifier))) (Identifier)))
(Call (Send
(Identifier) (Identifier)
(Function (Function
(Empty) (Empty)

View File

@ -1,5 +1,5 @@
(Program (Program
(Call (Send
(Identifier) (Identifier)
(Function (Function
(Empty) (Empty)

View File

@ -1,10 +1,9 @@
(Program (Program
(Call (Send
(Identifier) (Identifier)
(KeyValue (KeyValue
(Symbol) (Symbol)
(Boolean)) (Boolean))
{+(KeyValue {+(KeyValue
{+(Symbol)+} {+(Symbol)+}
{+(Integer)+})+} {+(Integer)+})+}))
(Empty)))

View File

@ -1,10 +1,9 @@
(Program (Program
(Call (Send
(Identifier) (Identifier)
(KeyValue (KeyValue
(Symbol) (Symbol)
(Boolean)) (Boolean))
{-(KeyValue {-(KeyValue
{-(Symbol)-} {-(Symbol)-}
{-(Integer)-})-} {-(Integer)-})-}))
(Empty)))

View File

@ -1,7 +1,6 @@
(Program (Program
(Call (Send
(Identifier) (Identifier)
(KeyValue (KeyValue
(Symbol) (Symbol)
(Boolean)) (Boolean))))
(Empty)))

View File

@ -1,10 +1,9 @@
(Program (Program
(Call (Send
(Identifier) (Identifier)
(KeyValue (KeyValue
(Symbol) (Symbol)
(Boolean)) (Boolean))
(KeyValue (KeyValue
(Symbol) (Symbol)
(Integer)) (Integer))))
(Empty)))

View File

@ -1,10 +1,9 @@
(Program (Program
(Call (Send
(Identifier) (Identifier)
(KeyValue (KeyValue
(Identifier) (Identifier)
(Boolean)) (Boolean))
{+(KeyValue {+(KeyValue
{+(Identifier)+} {+(Identifier)+}
{+(Integer)+})+} {+(Integer)+})+}))
(Empty)))

View File

@ -1,10 +1,9 @@
(Program (Program
(Call (Send
(Identifier) (Identifier)
(KeyValue (KeyValue
(Identifier) (Identifier)
(Boolean)) (Boolean))
{-(KeyValue {-(KeyValue
{-(Identifier)-} {-(Identifier)-}
{-(Integer)-})-} {-(Integer)-})-}))
(Empty)))

View File

@ -1,7 +1,6 @@
(Program (Program
(Call (Send
(Identifier) (Identifier)
(KeyValue (KeyValue
(Identifier) (Identifier)
(Boolean)) (Boolean))))
(Empty)))

View File

@ -1,10 +1,9 @@
(Program (Program
(Call (Send
(Identifier) (Identifier)
(KeyValue (KeyValue
(Identifier) (Identifier)
(Boolean)) (Boolean))
(KeyValue (KeyValue
(Identifier) (Identifier)
(Integer)) (Integer))))
(Empty)))

View File

@ -1,11 +1,9 @@
(Program (Program
(Call (Send
{ (MemberAccess
{-(Identifier)-} {-(Identifier)-}
{-(Identifier)-}) { (Identifier)
->(Identifier) } ->(Identifier) })
(Empty)) {-(Send
{-(Call
{-(Identifier)-} {-(Identifier)-}
{-(Identifier)-} {-(Identifier)-}
{-(Identifier)-} {-(Identifier)-}
@ -14,16 +12,13 @@
{-(Integer)-})-} {-(Integer)-})-}
{-(KeyValue {-(KeyValue
{-(Identifier)-} {-(Identifier)-}
{-(Integer)-})-} {-(Integer)-})-})-}
{-(Empty)-})-} {-(Send
{-(Call
{-(Identifier)-} {-(Identifier)-}
{-(Call {-(Send
{-(Identifier)-} {-(Identifier)-}
{-(Identifier)-} {-(Identifier)-})-})-}
{-(Empty)-})-} {-(Send
{-(Empty)-})-}
{-(Call
{-(Identifier)-} {-(Identifier)-}
{-(KeyValue {-(KeyValue
{-(Array)-} {-(Array)-}
@ -35,5 +30,4 @@
{-(Identifier)-} {-(Identifier)-}
{-(Function {-(Function
{-(Empty)-} {-(Empty)-}
{-(Integer)-})-})-} {-(Integer)-})-})-})-})
{-(Empty)-})-})

View File

@ -1,11 +1,9 @@
(Program (Program
(Call (Send
{ (Identifier)
->(MemberAccess
{+(Identifier)+} {+(Identifier)+}
{+(Identifier)+}) } { (Identifier)
(Empty)) ->(Identifier) })
{+(Call {+(Send
{+(Identifier)+} {+(Identifier)+}
{+(Identifier)+} {+(Identifier)+}
{+(Identifier)+} {+(Identifier)+}
@ -14,16 +12,13 @@
{+(Integer)+})+} {+(Integer)+})+}
{+(KeyValue {+(KeyValue
{+(Identifier)+} {+(Identifier)+}
{+(Integer)+})+} {+(Integer)+})+})+}
{+(Empty)+})+} {+(Send
{+(Call
{+(Identifier)+} {+(Identifier)+}
{+(Call {+(Send
{+(Identifier)+} {+(Identifier)+}
{+(Identifier)+} {+(Identifier)+})+})+}
{+(Empty)+})+} {+(Send
{+(Empty)+})+}
{+(Call
{+(Identifier)+} {+(Identifier)+}
{+(KeyValue {+(KeyValue
{+(Array)+} {+(Array)+}
@ -35,5 +30,4 @@
{+(Identifier)+} {+(Identifier)+}
{+(Function {+(Function
{+(Empty)+} {+(Empty)+}
{+(Integer)+})+})+} {+(Integer)+})+})+})+})
{+(Empty)+})+})

View File

@ -1,10 +1,8 @@
(Program (Program
(Call (Send
(MemberAccess
(Identifier) (Identifier)
(Identifier)) (Identifier))
(Empty)) (Send
(Call
(Identifier) (Identifier)
(Identifier) (Identifier)
(Identifier) (Identifier)
@ -13,16 +11,13 @@
(Integer)) (Integer))
(KeyValue (KeyValue
(Identifier) (Identifier)
(Integer)) (Integer)))
(Empty)) (Send
(Call
(Identifier) (Identifier)
(Call (Send
(Identifier) (Identifier)
(Identifier) (Identifier)))
(Empty)) (Send
(Empty))
(Call
(Identifier) (Identifier)
(KeyValue (KeyValue
(Array) (Array)
@ -34,5 +29,4 @@
(Identifier) (Identifier)
(Function (Function
(Empty) (Empty)
(Integer))) (Integer)))))
(Empty)))

View File

@ -1,4 +1,3 @@
(Program (Program
(Call (Send
(Identifier) (Identifier)))
(Empty)))

View File

@ -1,25 +1,17 @@
(Program (Program
{+(Call {+(Send
{+(Identifier)+} {+(Identifier)+}
{+(TextElement)+} {+(TextElement)+})+}
{+(Empty)+})+}
{+(Call
{+(MemberAccess
{+(Identifier)+}
{+(Identifier)+})+}
{+(Empty)+})+}
{+(Call
{+(Identifier)+}
{+(Integer)+}
{+(Integer)+}
{+(Empty)+})+}
{+(Call
{+(Identifier)+}
{+(Integer)+}
{+(Integer)+}
{+(Empty)+})+}
{-(Identifier)-} {-(Identifier)-}
{-(MemberAccess (Send
{-(Identifier)-} (Identifier)
{-(Identifier)-})-} (Identifier))
{+(Send
{+(Identifier)+}
{+(Integer)+}
{+(Integer)+})+}
{+(Send
{+(Identifier)+}
{+(Integer)+}
{+(Integer)+})+}
{-(Identifier)-}) {-(Identifier)-})

View File

@ -1,25 +1,17 @@
(Program (Program
{+(Identifier)+} {+(Identifier)+}
{+(MemberAccess {-(Send
{+(Identifier)+} {-(Identifier)-}
{+(Identifier)+})+} {-(TextElement)-})-}
(Send
(Identifier)
(Identifier))
{+(Identifier)+} {+(Identifier)+}
{-(Call {-(Send
{-(Identifier)-}
{-(TextElement)-}
{-(Empty)-})-}
{-(Call
{-(MemberAccess
{-(Identifier)-}
{-(Identifier)-})-}
{-(Empty)-})-}
{-(Call
{-(Identifier)-} {-(Identifier)-}
{-(Integer)-} {-(Integer)-}
{-(Integer)-} {-(Integer)-})-}
{-(Empty)-})-} {-(Send
{-(Call
{-(Identifier)-} {-(Identifier)-}
{-(Integer)-} {-(Integer)-}
{-(Integer)-} {-(Integer)-})-})
{-(Empty)-})-})

View File

@ -1,6 +1,6 @@
(Program (Program
(Identifier) (Identifier)
(MemberAccess (Send
(Identifier) (Identifier)
(Identifier)) (Identifier))
(Identifier)) (Identifier))

View File

@ -1,20 +1,15 @@
(Program (Program
(Call (Send
(Identifier) (Identifier)
(TextElement) (TextElement))
(Empty)) (Send
(Call
(MemberAccess
(Identifier) (Identifier)
(Identifier)) (Identifier))
(Empty)) (Send
(Call
(Identifier) (Identifier)
(Integer) (Integer)
(Integer) (Integer))
(Empty)) (Send
(Call
(Identifier) (Identifier)
(Integer) (Integer)
(Integer) (Integer)))
(Empty)))

View File

@ -37,17 +37,17 @@
{-(Identifier)-})-} {-(Identifier)-})-}
{-(Assignment {-(Assignment
{-( {-(
{-(MemberAccess {-(Send
{-(Identifier)-} {-(Identifier)-}
{-(Identifier)-})-} {-(Identifier)-})-}
{-(MemberAccess {-(Send
{-(Identifier)-} {-(Identifier)-}
{-(Identifier)-})-})-} {-(Identifier)-})-})-}
{-( {-(
{-(MemberAccess {-(Send
{-(Identifier)-} {-(Identifier)-}
{-(Identifier)-})-} {-(Identifier)-})-}
{-(MemberAccess {-(Send
{-(Identifier)-} {-(Identifier)-}
{-(Identifier)-})-})-})-} {-(Identifier)-})-})-})-}
{-(Assignment {-(Assignment

View File

@ -37,17 +37,17 @@
{+(Identifier)+})+} {+(Identifier)+})+}
{+(Assignment {+(Assignment
{+( {+(
{+(MemberAccess {+(Send
{+(Identifier)+} {+(Identifier)+}
{+(Identifier)+})+} {+(Identifier)+})+}
{+(MemberAccess {+(Send
{+(Identifier)+} {+(Identifier)+}
{+(Identifier)+})+})+} {+(Identifier)+})+})+}
{+( {+(
{+(MemberAccess {+(Send
{+(Identifier)+} {+(Identifier)+}
{+(Identifier)+})+} {+(Identifier)+})+}
{+(MemberAccess {+(Send
{+(Identifier)+} {+(Identifier)+}
{+(Identifier)+})+})+})+} {+(Identifier)+})+})+})+}
{+(Assignment {+(Assignment

View File

@ -36,17 +36,17 @@
(Identifier)) (Identifier))
(Assignment (Assignment
( (
(MemberAccess (Send
(Identifier) (Identifier)
(Identifier)) (Identifier))
(MemberAccess (Send
(Identifier) (Identifier)
(Identifier))) (Identifier)))
( (
(MemberAccess (Send
(Identifier) (Identifier)
(Identifier)) (Identifier))
(MemberAccess (Send
(Identifier) (Identifier)
(Identifier)))) (Identifier))))
(Assignment (Assignment

View File

@ -1,5 +1,5 @@
(Program (Program
{(Equal { (Equal
{-(Identifier)-} {-(Identifier)-}
{-(Identifier)-}) {-(Identifier)-})
->(Comparison ->(Comparison
@ -10,11 +10,12 @@
{+(Identifier)+})+} {+(Identifier)+})+}
{+(Assignment {+(Assignment
{+(Identifier)+} {+(Identifier)+}
{+(Not{+(Identifier)+})+})+} {+(Not
{+(Identifier)+})+})+}
{-(Not {-(Not
{-(Equal {-(Equal
{-(Identifier)-} {-(Identifier)-}
{-(Identifier)-})-})-} {-(Identifier)-})-})-}
{-(Equal {-(Equal
{-(Identifier)-} {-(Identifier)-}
{-(Identifier)-})- }) {-(Identifier)-})-})

View File

@ -1,5 +1,5 @@
(Program (Program
{(Comparison { (Comparison
{-(Identifier)-} {-(Identifier)-}
{-(Identifier)-}) {-(Identifier)-})
->(Equal ->(Equal
@ -17,4 +17,5 @@
{-(Identifier)-})-} {-(Identifier)-})-}
{-(Assignment {-(Assignment
{-(Identifier)-} {-(Identifier)-}
{-(Not{-(Identifier)-})-})- }) {-(Not
{-(Identifier)-})-})-})

View File

@ -2,10 +2,9 @@
(Require (Require
{ (TextElement) { (TextElement)
->(TextElement) }) ->(TextElement) })
(Call (Send
{ (Identifier) { (Identifier)
->(Identifier) } ->(Identifier) }
{+(Symbol)+} {+(Symbol)+}
{+(TextElement)+} {+(TextElement)+}
{-(Identifier)-} {-(Identifier)-}))
(Empty)))

View File

@ -2,10 +2,9 @@
(Require (Require
{ (TextElement) { (TextElement)
->(TextElement) }) ->(TextElement) })
(Call (Send
{ (Identifier) { (Identifier)
->(Identifier) } ->(Identifier) }
{+(Identifier)+} {+(Identifier)+}
{-(Symbol)-} {-(Symbol)-}
{-(TextElement)-} {-(TextElement)-}))
(Empty)))

View File

@ -1,7 +1,6 @@
(Program (Program
(Require (Require
(TextElement)) (TextElement))
(Call (Send
(Identifier) (Identifier)
(Identifier) (Identifier)))
(Empty)))

View File

@ -1,8 +1,7 @@
(Program (Program
(Require (Require
(TextElement)) (TextElement))
(Call (Send
(Identifier) (Identifier)
(Symbol) (Symbol)
(TextElement) (TextElement)))
(Empty)))