From c9dcb3b66bbd62b67e951e322c15931bab4bab98 Mon Sep 17 00:00:00 2001 From: darkf Date: Fri, 1 Nov 2013 20:16:41 -0700 Subject: [PATCH] parser2: add string literals --- parser2.hs | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/parser2.hs b/parser2.hs index 984d5f2..45746a4 100644 --- a/parser2.hs +++ b/parser2.hs @@ -10,11 +10,9 @@ lineComment :: () = '--' (!'\n' .)* '\n' { () } space :: () = [ \r\n\t] { () } / lineComment -statements :: [AST] - = statement+ +statements :: [AST] = statement+ -statement :: AST - = expr "." +statement :: AST = expr "." args :: AST = expr ("," expr)+ { TupleConst ($1 : $2) } @@ -23,6 +21,7 @@ args :: AST Nothing -> UnitConst } pattern :: Pattern = integer { IntP $1 } + / stringlit { StrP $1 } funpattern :: Pattern = pattern ("," pattern)+ { TupleP ($1 : $2) } @@ -44,9 +43,26 @@ fact :: AST term :: AST = "(" expr ")" + / stringlit { StrConst $1 } / integer { IntConst $1 } / identifier { Var $1 } +stringlit ::: String = '\"' charlit* '\"' + +charlit :: Char + = '\\' escChar + / [^\"\\] + +escChar :: Char + = '\"' { '\"' } + / '\\' { '\\' } + / '/' { '/' } + / 'b' { '\b' } + / 'f' { '\f' } + / 'n' { '\n' } + / 'r' { '\r' } + / 't' { '\t' } + identifier ::: String = [a-zA-Z_] [a-zA-Z0-9_'?!]* { $1 : $2 }