- fixed scanner and parser issues to be able to parse math lib
SVN=126501
diff --git a/usr/gri/src/parser.go b/usr/gri/src/parser.go
index d54937e..82aca39 100644
--- a/usr/gri/src/parser.go
+++ b/usr/gri/src/parser.go
@@ -262,12 +262,12 @@
P.Trace("ImportDecl");
P.Expect(Scanner.IMPORT);
if P.tok == Scanner.LPAREN {
- P.ParseImportSpec();
- for P.tok == Scanner.SEMICOLON {
- P.Next();
+ P.Next();
+ for P.tok != Scanner.RPAREN {
P.ParseImportSpec();
+ P.Optional(Scanner.SEMICOLON); // TODO this seems wrong
}
- P.Optional(Scanner.SEMICOLON);
+ P.Next();
} else {
P.ParseImportSpec();
}
@@ -738,12 +738,20 @@
func (P *Parser) ParseExportDecl() {
P.Trace("ExportDecl");
P.Expect(Scanner.EXPORT);
- P.ParseIdent();
- for P.tok == Scanner.COMMA {
+ if P.tok == Scanner.LPAREN {
P.Next();
+ for P.tok != Scanner.RPAREN {
+ P.ParseIdent();
+ P.Optional(Scanner.COMMA); // TODO this seems wrong
+ }
+ P.Next();
+ } else {
P.ParseIdent();
+ for P.tok == Scanner.COMMA {
+ P.Next();
+ P.ParseIdent();
+ }
}
- P.Optional(Scanner.COMMA);
P.Ecart();
}
@@ -787,14 +795,12 @@
switch P.tok {
case Scanner.IDENT:
P.ParseQualifiedIdent();
- case Scanner.STRING:
- fallthrough;
- case Scanner.NUMBER:
- P.Next();
case Scanner.LPAREN:
P.Next();
P.ParseExpression();
P.Expect(Scanner.RPAREN);
+ case Scanner.STRING: fallthrough;
+ case Scanner.NUMBER: fallthrough;
case Scanner.NIL: fallthrough;
case Scanner.IOTA: fallthrough;
case Scanner.TRUE: fallthrough;