Changeset 15602 for src/Pugs/Parser

Show
Ignore:
Timestamp:
03/11/07 23:04:37 (21 months ago)
Author:
audreyt
Message:

* Pugs.Parser.Literal: Make pseudoAssignment parametric

instead of hardcoding $$/ as the lhs, so it can be
used elsewhere than "s[]=..." forms.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Parser/Literal.hs

    r15297 r15602  
    597597substLiteral = do 
    598598    (declarator, pseudo) <- choice 
    599         [ symbol "s"  >> return ("subst", (pseudoAssignment <|>)) 
     599        [ symbol "s"  >> return ("subst", (pseudoAssignment matchResult <|>)) 
    600600        , do symbol "ss" 
    601601             insertIntoPosition ":sigspace(1)" 
    602              return ("subst", (pseudoAssignment <|>)) 
     602             return ("subst", (pseudoAssignment matchResult <|>)) 
    603603        , symbol "tr" >> return ("trans", id) 
    604604        ] 
     
    625625            flags{ qfProtectedChar = endch' } 
    626626    return $ Syn declarator [expr, subst, adverbs] 
    627  
    628 pseudoAssignment :: RuleParser Exp 
    629 pseudoAssignment = verbatimRule "infix assignment" $ do 
     627    where 
     628    matchResult = Syn "${}" [_Var "$/"] 
     629 
     630pseudoAssignment :: Exp -> RuleParser Exp 
     631pseudoAssignment lhs = verbatimRule "infix assignment" $ do 
    630632    ahead <- lookAhead (string ".=" <|> ruleInfixAssignment <|> string "=") 
    631633    insertIntoPosition "$_ " 
     
    635637        _    -> applyPseudo item 
    636638    where 
    637     matchResult = Syn "${}" [_Var "$/"] 
    638639    applyPseudo (Ann ann exp)       = Ann ann (applyPseudo exp) 
    639640    applyPseudo (Syn "=" [Var var, exp]) 
     
    643644        | last syn == '=' 
    644645        , var == varTopic 
    645         = App (_Var ("&infix:" ++ init syn)) Nothing [matchResult, exp] 
     646        = App (_Var ("&infix:" ++ init syn)) Nothing [lhs, exp] 
    646647    applyPseudo x = internalError $ "Unknown pseudo-assignment form:" ++ show x 
    647648    fixPseudo (Ann ann exp) = Ann ann (fixPseudo exp) 
    648649    fixPseudo (App meth (Just (Var var)) args) 
    649650        | var == varTopic 
    650         = App meth (Just matchResult) args 
     651        = App meth (Just lhs) args 
    651652    fixPseudo x = x 
    652653