summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2014-06-09 07:59:38 +0200
committerAndreas Rumpf <rumpf_a@web.de>2014-06-09 07:59:38 +0200
commit41e599abb917713a98a6bf8ae39fde46311c9db5 (patch)
tree66cca4b933a7499759b416c1dffd6effffd429f0
parentee1bb2d5629f02b67b62934371ef29655868a69d (diff)
parentbebc3f62a98fc97f9e45614d9479cfbbfd678a91 (diff)
downloadNim-41e599abb917713a98a6bf8ae39fde46311c9db5.tar.gz
Merge pull request #1257 from flaviut/fix1217
Fix bug in previous PR
-rw-r--r--compiler/parser.nim21
-rw-r--r--doc/grammar.txt2
2 files changed, 14 insertions, 9 deletions
diff --git a/compiler/parser.nim b/compiler/parser.nim
index 0f52750c9..18de1570a 100644
--- a/compiler/parser.nim
+++ b/compiler/parser.nim
@@ -287,7 +287,7 @@ proc colcom(p: var TParser, n: PNode) =
   skipComment(p, n)
 
 proc parseSymbol(p: var TParser, allowNil = false): PNode =
-  #| symbol = '`' (KEYW|IDENT|operator|'('|')'|'['|']'|'{'|'}'|'='|literal)+ '`'
+  #| symbol = '`' (KEYW|IDENT|literal|(operator|'('|')'|'['|']'|'{'|'}'|'=')+)+ '`'
   #|        | IDENT
   case p.tok.tokType
   of tkSymbol: 
@@ -296,19 +296,24 @@ proc parseSymbol(p: var TParser, allowNil = false): PNode =
   of tkAccent: 
     result = newNodeP(nkAccQuoted, p)
     getTok(p)
-    var accm = ""
     while true:
       case p.tok.tokType
       of tkAccent:
-        if accm == "": 
+        if result.len == 0: 
           parMessage(p, errIdentifierExpected, p.tok)
         break
-      of tkEof, tkInvalid, tkComment:
-          parMessage(p, errIdentifierExpected, p.tok)
-      else:
-        accm.add(tokToStr(p.tok))
+      of tkOpr, tkDot, tkDotDot, tkEquals, tkParLe..tkParDotRi:
+        var accm = ""
+        while p.tok.tokType in {tkOpr, tkDot, tkDotDot, tkEquals,
+                                tkParLe..tkParDotRi}:
+          accm.add(tokToStr(p.tok))
+          getTok(p)
+        result.add(newIdentNodeP(getIdent(accm), p))
+      of tokKeywordLow..tokKeywordHigh, tkSymbol, tkIntLit..tkCharLit:
+        result.add(newIdentNodeP(getIdent(tokToStr(p.tok)), p))
         getTok(p)
-    result.add(newIdentNodeP(getIdent(accm), p))
+      else:
+        parMessage(p, errIdentifierExpected, p.tok)
     eat(p, tkAccent)
   else:
     if allowNil and p.tok.tokType == tkNil:
diff --git a/doc/grammar.txt b/doc/grammar.txt
index fe5341840..47ae095f6 100644
--- a/doc/grammar.txt
+++ b/doc/grammar.txt
@@ -24,7 +24,7 @@ ampExpr = plusExpr (OP6 optInd plusExpr)*
 plusExpr = mulExpr (OP7 optInd mulExpr)*
 mulExpr = dollarExpr (OP8 optInd dollarExpr)*
 dollarExpr = primary (OP9 optInd primary)*
-symbol = '`' (KEYW|IDENT|operator|'('|')'|'['|']'|'{'|'}'|'='|literal)+ '`'
+symbol = '`' (KEYW|IDENT|literal|(operator|'('|')'|'['|']'|'{'|'}'|'=')+)+ '`'
        | IDENT
 indexExpr = expr
 indexExprList = indexExpr ^+ comma