summaryrefslogtreecommitdiff
path: root/scalaParser/src/main/scala/scalaParser/syntax/Identifiers.scala
diff options
context:
space:
mode:
Diffstat (limited to 'scalaParser/src/main/scala/scalaParser/syntax/Identifiers.scala')
-rw-r--r--scalaParser/src/main/scala/scalaParser/syntax/Identifiers.scala19
1 files changed, 13 insertions, 6 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
}
+
}
}