parser2: add string literals
This commit is contained in:
parent
24e52ec524
commit
c9dcb3b66b
1 changed files with 20 additions and 4 deletions
24
parser2.hs
24
parser2.hs
|
@ -10,11 +10,9 @@ lineComment :: () = '--' (!'\n' .)* '\n' { () }
|
||||||
|
|
||||||
space :: () = [ \r\n\t] { () } / lineComment
|
space :: () = [ \r\n\t] { () } / lineComment
|
||||||
|
|
||||||
statements :: [AST]
|
statements :: [AST] = statement+
|
||||||
= statement+
|
|
||||||
|
|
||||||
statement :: AST
|
statement :: AST = expr "."
|
||||||
= expr "."
|
|
||||||
|
|
||||||
args :: AST
|
args :: AST
|
||||||
= expr ("," expr)+ { TupleConst ($1 : $2) }
|
= expr ("," expr)+ { TupleConst ($1 : $2) }
|
||||||
|
@ -23,6 +21,7 @@ args :: AST
|
||||||
Nothing -> UnitConst }
|
Nothing -> UnitConst }
|
||||||
pattern :: Pattern
|
pattern :: Pattern
|
||||||
= integer { IntP $1 }
|
= integer { IntP $1 }
|
||||||
|
/ stringlit { StrP $1 }
|
||||||
|
|
||||||
funpattern :: Pattern
|
funpattern :: Pattern
|
||||||
= pattern ("," pattern)+ { TupleP ($1 : $2) }
|
= pattern ("," pattern)+ { TupleP ($1 : $2) }
|
||||||
|
@ -44,9 +43,26 @@ fact :: AST
|
||||||
|
|
||||||
term :: AST
|
term :: AST
|
||||||
= "(" expr ")"
|
= "(" expr ")"
|
||||||
|
/ stringlit { StrConst $1 }
|
||||||
/ integer { IntConst $1 }
|
/ integer { IntConst $1 }
|
||||||
/ identifier { Var $1 }
|
/ identifier { Var $1 }
|
||||||
|
|
||||||
|
stringlit ::: String = '\"' charlit* '\"'
|
||||||
|
|
||||||
|
charlit :: Char
|
||||||
|
= '\\' escChar
|
||||||
|
/ [^\"\\]
|
||||||
|
|
||||||
|
escChar :: Char
|
||||||
|
= '\"' { '\"' }
|
||||||
|
/ '\\' { '\\' }
|
||||||
|
/ '/' { '/' }
|
||||||
|
/ 'b' { '\b' }
|
||||||
|
/ 'f' { '\f' }
|
||||||
|
/ 'n' { '\n' }
|
||||||
|
/ 'r' { '\r' }
|
||||||
|
/ 't' { '\t' }
|
||||||
|
|
||||||
identifier ::: String
|
identifier ::: String
|
||||||
= [a-zA-Z_] [a-zA-Z0-9_'?!]* { $1 : $2 }
|
= [a-zA-Z_] [a-zA-Z0-9_'?!]* { $1 : $2 }
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue