summaryrefslogtreecommitdiff
path: root/scalaParser/src/main/scala/scalaParser/syntax
diff options
context:
space:
mode:
Diffstat (limited to 'scalaParser/src/main/scala/scalaParser/syntax')
-rw-r--r--scalaParser/src/main/scala/scalaParser/syntax/Identifiers.scala19
-rw-r--r--scalaParser/src/main/scala/scalaParser/syntax/Literals.scala2
2 files changed, 14 insertions, 7 deletions
diff --git a/scalaParser/src/main/scala/scalaParser/syntax/Identifiers.scala b/scalaParser/src/main/scala/scalaParser/syntax/Identifiers.scala
index 5456d16..a95afac 100644
--- a/scalaParser/src/main/scala/scalaParser/syntax/Identifiers.scala
+++ b/scalaParser/src/main/scala/scalaParser/syntax/Identifiers.scala
@@ -8,15 +8,21 @@ trait Identifiers { self: Parser with Basic =>
import Basic._
def Operator = rule{!Keywords ~ oneOrMore(OperatorChar)}
- def VarId = rule { !Keywords ~ Lower ~ IdRest }
- def PlainId = rule { !Keywords ~ Upper ~ IdRest | VarId | Operator }
+ def VarId = VarId0(true)
+ def VarId0(dollar: Boolean) = rule { !Keywords ~ Lower ~ IdRest(dollar) }
+ def PlainId = rule { !Keywords ~ Upper ~ IdRest(true) | VarId | Operator }
+ def PlainIdNoDollar = rule { !Keywords ~ Upper ~ IdRest(false) | VarId0(false) | Operator }
def Id = rule { !Keywords ~ PlainId | ("`" ~ oneOrMore(noneOf("`")) ~ "`") }
- def IdRest = rule {
- zeroOrMore(zeroOrMore("_") ~ oneOrMore(!"_" ~ Letter | Digit)) ~
- optional(oneOrMore("_") ~ zeroOrMore(OperatorChar))
+ def IdRest(dollar: Boolean) = {
+ if (!dollar) rule {
+ zeroOrMore(zeroOrMore("_") ~ oneOrMore(!anyOf("_$") ~ Letter | Digit)) ~
+ optional(oneOrMore("_") ~ zeroOrMore(OperatorChar))
+ } else rule{
+ zeroOrMore(zeroOrMore("_") ~ oneOrMore(!"_" ~ Letter | Digit)) ~
+ optional(oneOrMore("_") ~ zeroOrMore(OperatorChar))
+ }
}
-
def AlphabetKeywords = rule {
(
"abstract" | "case" | "catch" | "class" | "def" | "do" | "else" | "extends" | "false" | "finally" | "final" | "finally" | "forSome" | "for" | "if" |
@@ -33,5 +39,6 @@ trait Identifiers { self: Parser with Basic =>
AlphabetKeywords | SymbolicKeywords
}
+
}
}
diff --git a/scalaParser/src/main/scala/scalaParser/syntax/Literals.scala b/scalaParser/src/main/scala/scalaParser/syntax/Literals.scala
index 703c793..e6dd54d 100644
--- a/scalaParser/src/main/scala/scalaParser/syntax/Literals.scala
+++ b/scalaParser/src/main/scala/scalaParser/syntax/Literals.scala
@@ -51,7 +51,7 @@ trait Literals { self: Parser with Basic with Identifiers =>
}
def pr(s: String) = rule { run(println(s"LOGGING $cursor: $s")) }
def Interpolation = rule{
- "$" ~ Identifiers.Id | "${" ~ Block ~ WL ~ "}" | "$$"
+ "$" ~ Identifiers.PlainIdNoDollar | "${" ~ Block ~ WL ~ "}" | "$$"
}
def StringLiteral = rule {
(Identifiers.Id ~ "\"\"\"" ~ MultiLineChars ~ ("\"\"\"" ~ zeroOrMore('"'))) |