diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2014-06-09 07:59:38 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2014-06-09 07:59:38 +0200 |
commit | 41e599abb917713a98a6bf8ae39fde46311c9db5 (patch) | |
tree | 66cca4b933a7499759b416c1dffd6effffd429f0 | |
parent | ee1bb2d5629f02b67b62934371ef29655868a69d (diff) | |
parent | bebc3f62a98fc97f9e45614d9479cfbbfd678a91 (diff) | |
download | Nim-41e599abb917713a98a6bf8ae39fde46311c9db5.tar.gz |
Merge pull request #1257 from flaviut/fix1217
Fix bug in previous PR
-rw-r--r-- | compiler/parser.nim | 21 | ||||
-rw-r--r-- | doc/grammar.txt | 2 |
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 |