# HG changeset patch # User unc0rr # Date 1320863332 -10800 # Node ID 1f7a7a330c598eef0e9634e5eea22de0363782b1 # Parent b4fc5b863f5f289076b60d4b50d7ebf4dbed831c Rearrange token types diff -r b4fc5b863f5f -r 1f7a7a330c59 tools/PascalParser.hs --- a/tools/PascalParser.hs Thu Nov 10 15:12:44 2011 -0500 +++ b/tools/PascalParser.hs Wed Nov 09 21:28:52 2011 +0300 @@ -55,7 +55,6 @@ | Assignment Reference Expression deriving Show data Expression = Expression String - | FunCall Reference [Expression] | PrefixOp String Expression | PostfixOp String Expression | BinOp String Expression Expression @@ -63,14 +62,15 @@ | CharCode String | NumberLiteral String | HexNumber String - | Address Reference | Reference Reference - | Dereference Expression - | RecordField Expression Expression | Null deriving Show data Reference = ArrayElement Identifier Expression + | FunCall Reference [Expression] | SimpleReference Identifier + | Dereference Reference + | RecordField Reference Reference + | Address Reference deriving Show pascalLanguageDef @@ -148,10 +148,14 @@ term = comments >> choice [ parens pas reference , try $ iD >>= \i -> (brackets pas) expression >>= return . ArrayElement i + , try $ funCall + , try $ reference >>= \r -> char '^' >> return (Dereference r) + , char '@' >> reference >>= return . Address , iD >>= return . SimpleReference ] "simple reference" table = [ + [Infix (try (char '.' >> notFollowedBy (char '.')) >> return RecordField) AssocLeft] ] varsDecl1 = varsParser sepEndBy1 @@ -370,9 +374,7 @@ , stringLiteral pas >>= return . StringLiteral , char '#' >> many digit >>= return . CharCode , char '$' >> many hexDigit >>= return . HexNumber - , char '@' >> reference >>= return . Address , try $ string "nil" >> return Null - , try $ funCall , reference >>= return . Reference ] "simple expression" @@ -401,8 +403,6 @@ , Infix (try $ string "shr" >> return (BinOp "or")) AssocNone ] , [Prefix (try (string "not") >> return (PrefixOp "not"))] - , [Postfix (char '^' >> return Dereference)] - , [Infix (try (char '.' >> notFollowedBy (char '.')) >> return RecordField) AssocLeft] ] phrasesBlock = do