Rain: added support for string and numerical literals
This commit is contained in:
parent
38b0272555
commit
2902d085a4
35
RainParse.hs
35
RainParse.hs
|
@ -115,6 +115,8 @@ sLeftC = try $ symbol "{"
|
||||||
sRightC = try $ symbol "}"
|
sRightC = try $ symbol "}"
|
||||||
sEquality = try $ symbol "=="
|
sEquality = try $ symbol "=="
|
||||||
sSemiColon = try $ symbol ";"
|
sSemiColon = try $ symbol ";"
|
||||||
|
sColon = try $ symbol ":"
|
||||||
|
sQuote = try $ symbol "\""
|
||||||
--}}}
|
--}}}
|
||||||
|
|
||||||
--{{{ Keywords
|
--{{{ Keywords
|
||||||
|
@ -164,6 +166,36 @@ variableId :: RainParser A.Variable
|
||||||
variableId = do {m <- md ; v <- name ; return $ A.Variable m v}
|
variableId = do {m <- md ; v <- name ; return $ A.Variable m v}
|
||||||
<?> "variable name"
|
<?> "variable name"
|
||||||
|
|
||||||
|
stringLiteral :: RainParser (A.LiteralRepr, A.Dimension)
|
||||||
|
stringLiteral
|
||||||
|
= do m <- md
|
||||||
|
char '"'
|
||||||
|
cs <- manyTill literalCharacter sQuote
|
||||||
|
let aes = [A.ArrayElemExpr $ A.Literal m A.Byte c | c <- cs]
|
||||||
|
return (A.ArrayLiteral m aes, A.Dimension $ length cs)
|
||||||
|
<?> "string literal"
|
||||||
|
|
||||||
|
literalCharacter :: RainParser A.LiteralRepr
|
||||||
|
literalCharacter
|
||||||
|
= do m <- md
|
||||||
|
c <- anyChar
|
||||||
|
return $ A.ByteLiteral m [c]
|
||||||
|
|
||||||
|
digits :: RainParser String
|
||||||
|
digits
|
||||||
|
= many1 digit
|
||||||
|
<?> "decimal digits"
|
||||||
|
|
||||||
|
integer :: RainParser A.LiteralRepr
|
||||||
|
integer
|
||||||
|
= do m <- md
|
||||||
|
d <- lexeme digits
|
||||||
|
return $ A.IntLiteral m d
|
||||||
|
|
||||||
|
literal :: RainParser A.Expression
|
||||||
|
literal = do {m <- md ; (lr, dim) <- stringLiteral ; return $ A.Literal m (A.Array [dim] A.Byte) lr }
|
||||||
|
<|> do {m <- md ; i <- integer ; return $ A.Literal m A.Int i}
|
||||||
|
<?> "literal"
|
||||||
|
|
||||||
expression :: RainParser A.Expression
|
expression :: RainParser A.Expression
|
||||||
expression
|
expression
|
||||||
|
@ -176,7 +208,8 @@ expression
|
||||||
subExpression :: RainParser A.Expression
|
subExpression :: RainParser A.Expression
|
||||||
subExpression
|
subExpression
|
||||||
= do {m <- md ; id <- variableId ; return $ A.ExprVariable m id}
|
= do {m <- md ; id <- variableId ; return $ A.ExprVariable m id}
|
||||||
<?> "[sub-]expression"
|
<|> literal
|
||||||
|
<?> "[sub-]expression"
|
||||||
|
|
||||||
block :: RainParser A.Structured
|
block :: RainParser A.Structured
|
||||||
block = do {m <- md ; sLeftC ; procs <- (many statement) ; sts <- sequence (map wrapProc procs) ; sRightC ; return $ A.Several m sts}
|
block = do {m <- md ; sLeftC ; procs <- (many statement) ; sts <- sequence (map wrapProc procs) ; sRightC ; return $ A.Several m sts}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user