diff options
author | buraq <buraq@epfl.ch> | 2003-10-09 16:24:01 +0000 |
---|---|---|
committer | buraq <buraq@epfl.ch> | 2003-10-09 16:24:01 +0000 |
commit | d91729e50cffaba90846995c677c107dac9f62d7 (patch) | |
tree | dca0a43dbe2fc5c5fba010fb82856f6fdbcd0b66 /sources/scalac/ast/parser | |
parent | dfc5cdeeb776762373603ee3a204b74570811ae6 (diff) | |
download | scala-d91729e50cffaba90846995c677c107dac9f62d7.tar.gz scala-d91729e50cffaba90846995c677c107dac9f62d7.tar.bz2 scala-d91729e50cffaba90846995c677c107dac9f62d7.zip |
changed pattern grammar, () is now empty sequen...
changed pattern grammar, () is now empty sequence in patterns
Diffstat (limited to 'sources/scalac/ast/parser')
-rw-r--r-- | sources/scalac/ast/parser/Parser.java | 56 |
1 files changed, 29 insertions, 27 deletions
diff --git a/sources/scalac/ast/parser/Parser.java b/sources/scalac/ast/parser/Parser.java index eea0637f47..03231b150f 100644 --- a/sources/scalac/ast/parser/Parser.java +++ b/sources/scalac/ast/parser/Parser.java @@ -1216,10 +1216,24 @@ public class Parser implements Tokens { return p; } - /* Pattern2 ::= SimplePattern [ '*' | '?' | '+' ] - * | SimplePattern {Id SimplePattern} // op2 must not be empty + /* Pattern2 ::= varid [ @ Pattern3 ] + * | Pattern3 */ Tree pattern2() { + Tree p = pattern3(); + if (s.token == AT && TreeInfo.isVarPattern(p)) { + if( !TreeInfo.isWildcardPattern(p) ) + return make.Bind(s.skipToken(), ((Ident)p).name, pattern3()); + else + return pattern3(); + } + return p; + } + + /* Pattern3 ::= SimplePattern [ '*' | '?' | '+' ] + * | SimplePattern {Id SimplePattern} // op2 must not be empty + */ + Tree pattern3() { int base = sp; Tree top = simplePattern(); if (s.token == IDENTIFIER) { @@ -1273,11 +1287,11 @@ public class Parser implements Tokens { return reduceStack(false, base, top, 0, true); } - /** SimplePattern ::= varid [ '@' SimplePattern ] + /** SimplePattern ::= varid * | `_' * | literal - * | StableId [ArgumentPatterns] - * | `(' Patterns `)' + * | StableId [ `(' [Patterns] `)' ] + * | `(' [Patterns] `)' * | (empty word - nothing) */ Tree simplePattern() { @@ -1292,16 +1306,13 @@ public class Parser implements Tokens { // else fall through to case THIS case THIS: Tree t = stableId(); - switch (t) { - case Ident(Name name): - if ((name.isVariable()) && (s.token == AT)) { - int pos = s.pos; - s.nextToken(); - return make.Bind(pos, name, simplePattern()); - } - } while (s.token == LPAREN) { - t = make.Apply(s.pos, convertToTypeId(t), argumentPatterns()); + Tree[] ts = Tree.EMPTY_ARRAY; + accept(LPAREN); + if (s.token != RPAREN) + ts = patterns(); + accept(RPAREN); + t = make.Apply(s.pos, convertToTypeId(t), ts); } return t; case USCORE: @@ -1320,8 +1331,10 @@ public class Parser implements Tokens { case LPAREN: int p = s.pos; s.nextToken(); - Tree[] ts = patterns(); - Tree t; + Tree[] ts = Tree.EMPTY_ARRAY; + if( s.token!= RPAREN ) + ts = patterns(); + Tree t; if (ts.length == 1) t = ts[0]; else { @@ -1335,17 +1348,6 @@ public class Parser implements Tokens { } } - /** ArgumentPatterns ::= `(' [Patterns] `)' - */ - Tree[] argumentPatterns() { - Tree[] ts = Tree.EMPTY_ARRAY; - accept(LPAREN); - if (s.token != RPAREN) - ts = patterns(); - accept(RPAREN); - return ts; - } - ////////// MODIFIERS //////////////////////////////////////////////////////////// /** Modifiers ::= {Modifier} |