Skip to content

Commit dcf3d88

Browse files
committed
Using proxy literal classes
1 parent d5c1866 commit dcf3d88

File tree

7 files changed

+24
-13
lines changed

7 files changed

+24
-13
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
target
22
.bloop
3-
.metals
3+
.metals
4+
.vscode
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package plus.meow.MeowRust.grammar
22

33
abstract class Literal extends Node
4+
case class CharLiteral(val value: Char) extends Literal
45
case class IntLiteral(val value: BigInt, val container: Option[String]) extends Literal
56
case class FloatLiteral(val value: BigDecimal, val container: Option[String]) extends Literal
6-
case class StrLiteral(val value: String) extends Literal
7+
case class StrLiteral(val value: String) extends Literal
8+
case class BoolLiteral(val value: Boolean) extends Literal

src/main/scala/plus/meow/MeowRust/parser/literal.scala

+17-9
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,26 @@ object Literal extends RegexParsers {
2020
| "\\0" ^^ { _ => '\0' }
2121
)
2222
// TODO: support UNICODE_ESCAPE
23-
lazy val CHAR_LITERAL: Parser[Char] = (
23+
lazy val CHAR_LITERAL: Parser[CharLiteral] = (
2424
"'" ~> (
2525
"""[^'\\\n\r\t]""".r ^^ { _.head }
2626
| QUOTE_ESCAPE
2727
| ASCII_ESCAPE
2828
) <~ "'"
29-
)
29+
) ^^ { CharLiteral(_) }
3030

3131
// TODO: support STRING_CONTINUE
32-
lazy val STRING_LITERAL: Parser[String] = (
32+
lazy val STRING_LITERAL: Parser[StrLiteral] = (
3333
"\"" ~> ((
3434
"""[^\"\\\n]""".r ^^ { _.head }
3535
| QUOTE_ESCAPE
3636
| ASCII_ESCAPE
37-
)*) <~ "\"" ^^ { _.mkString }
38-
)
37+
)*) <~ "\""
38+
) ^^ { a => StrLiteral(a.mkString) }
3939

40-
lazy val RAW_STRING_LITERAL: Parser[String] = (
40+
lazy val RAW_STRING_LITERAL: Parser[StrLiteral] = (
4141
"r" ~> RAW_STRING_CONTENT
42-
)
42+
) ^^ { StrLiteral(_) }
4343

4444
lazy val RAW_STRING_CONTENT: Parser[String] = (
4545
"\"" ~> ("""\\\n|[^\n]""".r *) <~ "\"" ^^ { _.mkString }
@@ -130,8 +130,16 @@ object Literal extends RegexParsers {
130130

131131
lazy val FLOAT_SUFFIX: Parser[String] = ("f32" | "f64")
132132

133-
lazy val BOOLEAN_LITERAL: Parser[Boolean] = (
133+
lazy val BOOLEAN_LITERAL: Parser[BoolLiteral] = (
134134
"true" ^^ { (_) => true }
135135
| "false" ^^ { (_) => false }
136+
) ^^ { BoolLiteral }
137+
138+
lazy val LITERAL: Parser[Literal] = (
139+
CHAR_LITERAL
140+
| STRING_LITERAL
141+
| RAW_STRING_LITERAL
142+
| INTEGER_LITERAL
143+
| FLOAT_LITERAL
136144
)
137-
}
145+
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package plus.meow.MeowRust.parser
22

33
object Parser {
4-
def parse = Literal.FLOAT_LITERAL
5-
}
4+
def parse = Literal.LITERAL
5+
}
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)