Changeset 15602 for src/Pugs/Parser
- Timestamp:
- 03/11/07 23:04:37 (21 months ago)
- Files:
-
- 1 modified
-
src/Pugs/Parser/Literal.hs (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Parser/Literal.hs
r15297 r15602 597 597 substLiteral = do 598 598 (declarator, pseudo) <- choice 599 [ symbol "s" >> return ("subst", (pseudoAssignment <|>))599 [ symbol "s" >> return ("subst", (pseudoAssignment matchResult <|>)) 600 600 , do symbol "ss" 601 601 insertIntoPosition ":sigspace(1)" 602 return ("subst", (pseudoAssignment <|>))602 return ("subst", (pseudoAssignment matchResult <|>)) 603 603 , symbol "tr" >> return ("trans", id) 604 604 ] … … 625 625 flags{ qfProtectedChar = endch' } 626 626 return $ Syn declarator [expr, subst, adverbs] 627 628 pseudoAssignment :: RuleParser Exp 629 pseudoAssignment = verbatimRule "infix assignment" $ do 627 where 628 matchResult = Syn "${}" [_Var "$/"] 629 630 pseudoAssignment :: Exp -> RuleParser Exp 631 pseudoAssignment lhs = verbatimRule "infix assignment" $ do 630 632 ahead <- lookAhead (string ".=" <|> ruleInfixAssignment <|> string "=") 631 633 insertIntoPosition "$_ " … … 635 637 _ -> applyPseudo item 636 638 where 637 matchResult = Syn "${}" [_Var "$/"]638 639 applyPseudo (Ann ann exp) = Ann ann (applyPseudo exp) 639 640 applyPseudo (Syn "=" [Var var, exp]) … … 643 644 | last syn == '=' 644 645 , var == varTopic 645 = App (_Var ("&infix:" ++ init syn)) Nothing [ matchResult, exp]646 = App (_Var ("&infix:" ++ init syn)) Nothing [lhs, exp] 646 647 applyPseudo x = internalError $ "Unknown pseudo-assignment form:" ++ show x 647 648 fixPseudo (Ann ann exp) = Ann ann (fixPseudo exp) 648 649 fixPseudo (App meth (Just (Var var)) args) 649 650 | var == varTopic 650 = App meth (Just matchResult) args651 = App meth (Just lhs) args 651 652 fixPseudo x = x 652 653
