Skip to content

Commit

Permalink
Implement relaxed reserved word usage.
Browse files Browse the repository at this point in the history
  • Loading branch information
zaach committed Jul 20, 2010
1 parent 55a4afc commit a79b626
Show file tree
Hide file tree
Showing 8 changed files with 1,162 additions and 1,010 deletions.
51 changes: 42 additions & 9 deletions lib/harmony/grammar.jiy
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,39 @@

%%

IdentifierName
: IDENT
| NULLTOKEN
| TRUETOKEN
| FALSETOKEN
| BREAK
| CASE
| CATCH
| CONTINUE
| DEBUGGER
| DEFAULT
| DELETETOKEN
| DO
| ELSE
| FINALLY
| FOR
| FUNCTION
| IF
| INTOKEN
| INSTANCEOF
| NEW
| RETURN
| SWITCH
| THIS
| THROW
| TRY
| TYPEOF
| VAR
| VOIDTOKEN
| WHILE
| WITH
;

Literal
: NULLTOKEN
{{ $$ = yy.Node('LiteralExpr', {type: 'null', value: null}); }}
Expand Down Expand Up @@ -33,17 +66,17 @@ RegularExpressionLiteralBegin
;

Property
: IDENT ':' AssignmentExpr
: IdentifierName ':' AssignmentExpr
{{ $$ = yy.Node('DataProp', {name:String($1)}, $3); }}
| STRING ':' AssignmentExpr
{{ $$ = yy.Node('DataProp', {name:String($1)}, $3); }}
| NUMBER ':' AssignmentExpr
{{ $$ = yy.Node('DataProp', {name:Number($1)}, $3); }}
| IDENT IDENT '(' ')' OPENBRACE FunctionBody CLOSEBRACE
{{ if ($1 !== 'get' && $1 !== 'set') throw 'Parse error, invalid set/get.'; // TODO: use jison ABORT when supported
| IDENT IdentifierName '(' ')' OPENBRACE FunctionBody CLOSEBRACE
{{ if ($1 !== 'get' && $1 !== 'set') throw new Error('Parse error, invalid set/get.'); // TODO: use jison ABORT when supported
$$ = yy.Node('GetterSetterProp', {name:String($2), op:String($1)}, yy.Node('ParamDecl', {})).appendList($FunctionBody); }}
| IDENT IDENT '(' FormalParameterList ')' OPENBRACE FunctionBody CLOSEBRACE
{{ if ($1 !== 'get' && $1 !== 'set') throw 'Parse error, invalid set/get.'; // TODO: use jison ABORT when supported
| IDENT IdentifierName '(' FormalParameterList ')' OPENBRACE FunctionBody CLOSEBRACE
{{ if ($1 !== 'get' && $1 !== 'set') throw new Error('Parse error, invalid set/get.'); // TODO: use jison ABORT when supported
$$ = yy.Node('GetterSetterProp', {name:String($2), op:String($1)}, yy.Node('ParamDecl', {}).appendList($FormalParameterList)).appendList($FunctionBody); }}
;

Expand Down Expand Up @@ -113,7 +146,7 @@ MemberExpr
| FunctionExpr
| MemberExpr '[' Expr ']'
{{ $$ = yy.Node('MemberExpr',{brackets:true},$1,$3); }}
| MemberExpr '.' IDENT
| MemberExpr '.' IdentifierName
{{ $$ = yy.Node('MemberExpr',{brackets:false},$1,yy.Node('LiteralExpr', {type: 'string', value: String($3)})); }}
| NEW MemberExpr Arguments
{{ $$ = yy.Node('NewExpr',{},$MemberExpr).appendList($Arguments); }}
Expand All @@ -123,7 +156,7 @@ MemberExprNoBF
: PrimaryExprNoBrace
| MemberExprNoBF '[' Expr ']'
{{ $$ = yy.Node('MemberExpr',{brackets:true},$1,$3); }}
| MemberExprNoBF '.' IDENT
| MemberExprNoBF '.' IdentifierName
{{ $$ = yy.Node('MemberExpr',{brackets:false},$1,yy.Node('LiteralExpr', {type: 'string', value: String($3)})); }}
| NEW MemberExpr Arguments
{{ $$ = yy.Node('NewExpr',{},$MemberExpr).appendList($Arguments); }}
Expand Down Expand Up @@ -152,7 +185,7 @@ CallExpr
{{ $$ = yy.Node('CallExpr',{},$1).appendList($2); }}
| CallExpr '[' Expr ']'
{{ $$ = yy.Node('MemberExpr',{brackets:true},$1,$3); }}
| CallExpr '.' IDENT
| CallExpr '.' IdentifierName
{{ $$ = yy.Node('MemberExpr',{brackets:false},$1,yy.Node('LiteralExpr', {type: 'string', value: String($3)})); }}
;

Expand All @@ -167,7 +200,7 @@ CallExprNoBF
{{ $$ = yy.Node('CallExpr',{},$1).appendList($2); }}
| CallExprNoBF '[' Expr ']'
{{ $$ = yy.Node('MemberExpr',{brackets:true},$1,$3); }}
| CallExprNoBF '.' IDENT
| CallExprNoBF '.' IdentifierName
{{ $$ = yy.Node('MemberExpr',{brackets:false},$1,yy.Node('LiteralExpr', {type: 'string', value: String($3)})); }}
;

Expand Down
662 changes: 331 additions & 331 deletions lib/harmony/parser.js

Large diffs are not rendered by default.

51 changes: 42 additions & 9 deletions lib/js/grammar.jiy
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,39 @@

%%

IdentifierName
: IDENT
| NULLTOKEN
| TRUETOKEN
| FALSETOKEN
| BREAK
| CASE
| CATCH
| CONTINUE
| DEBUGGER
| DEFAULT
| DELETETOKEN
| DO
| ELSE
| FINALLY
| FOR
| FUNCTION
| IF
| INTOKEN
| INSTANCEOF
| NEW
| RETURN
| SWITCH
| THIS
| THROW
| TRY
| TYPEOF
| VAR
| VOIDTOKEN
| WHILE
| WITH
;

Literal
: NULLTOKEN
{{ $$ = yy.Node('LiteralExpr', {type: 'null', value: null}); }}
Expand Down Expand Up @@ -33,17 +66,17 @@ RegularExpressionLiteralBegin
;

Property
: IDENT ':' AssignmentExpr
: IdentifierName ':' AssignmentExpr
{{ $$ = yy.Node('DataProp', {name:String($1)}, $3); }}
| STRING ':' AssignmentExpr
{{ $$ = yy.Node('DataProp', {name:String($1)}, $3); }}
| NUMBER ':' AssignmentExpr
{{ $$ = yy.Node('DataProp', {name:Number($1)}, $3); }}
| IDENT IDENT '(' ')' OPENBRACE FunctionBody CLOSEBRACE
{{ if ($1 !== 'get' && $1 !== 'set') throw 'Parse error, invalid set/get.'; // TODO: use jison ABORT when supported
| IDENT IdentifierName '(' ')' OPENBRACE FunctionBody CLOSEBRACE
{{ if ($1 !== 'get' && $1 !== 'set') throw new Error('Parse error, invalid set/get.'); // TODO: use jison ABORT when supported
$$ = yy.Node('GetterSetterProp', {name:String($2), op:String($1)}, yy.Node('ParamDecl', {})).appendList($FunctionBody); }}
| IDENT IDENT '(' FormalParameterList ')' OPENBRACE FunctionBody CLOSEBRACE
{{ if ($1 !== 'get' && $1 !== 'set') throw 'Parse error, invalid set/get.'; // TODO: use jison ABORT when supported
| IDENT IdentifierName '(' FormalParameterList ')' OPENBRACE FunctionBody CLOSEBRACE
{{ if ($1 !== 'get' && $1 !== 'set') throw new Error('Parse error, invalid set/get.'); // TODO: use jison ABORT when supported
$$ = yy.Node('GetterSetterProp', {name:String($2), op:String($1)}, yy.Node('ParamDecl', {}).appendList($FormalParameterList)).appendList($FunctionBody); }}
;

Expand Down Expand Up @@ -113,7 +146,7 @@ MemberExpr
| FunctionExpr
| MemberExpr '[' Expr ']'
{{ $$ = yy.Node('MemberExpr',{brackets:true},$1,$3); }}
| MemberExpr '.' IDENT
| MemberExpr '.' IdentifierName
{{ $$ = yy.Node('MemberExpr',{brackets:false},$1,yy.Node('LiteralExpr', {type: 'string', value: String($3)})); }}
| NEW MemberExpr Arguments
{{ $$ = yy.Node('NewExpr',{},$MemberExpr).appendList($Arguments); }}
Expand All @@ -123,7 +156,7 @@ MemberExprNoBF
: PrimaryExprNoBrace
| MemberExprNoBF '[' Expr ']'
{{ $$ = yy.Node('MemberExpr',{brackets:true},$1,$3); }}
| MemberExprNoBF '.' IDENT
| MemberExprNoBF '.' IdentifierName
{{ $$ = yy.Node('MemberExpr',{brackets:false},$1,yy.Node('LiteralExpr', {type: 'string', value: String($3)})); }}
| NEW MemberExpr Arguments
{{ $$ = yy.Node('NewExpr',{},$MemberExpr).appendList($Arguments); }}
Expand Down Expand Up @@ -152,7 +185,7 @@ CallExpr
{{ $$ = yy.Node('CallExpr',{},$1).appendList($2); }}
| CallExpr '[' Expr ']'
{{ $$ = yy.Node('MemberExpr',{brackets:true},$1,$3); }}
| CallExpr '.' IDENT
| CallExpr '.' IdentifierName
{{ $$ = yy.Node('MemberExpr',{brackets:false},$1,yy.Node('LiteralExpr', {type: 'string', value: String($3)})); }}
;

Expand All @@ -167,7 +200,7 @@ CallExprNoBF
{{ $$ = yy.Node('CallExpr',{},$1).appendList($2); }}
| CallExprNoBF '[' Expr ']'
{{ $$ = yy.Node('MemberExpr',{brackets:true},$1,$3); }}
| CallExprNoBF '.' IDENT
| CallExprNoBF '.' IdentifierName
{{ $$ = yy.Node('MemberExpr',{brackets:false},$1,yy.Node('LiteralExpr', {type: 'string', value: String($3)})); }}
;

Expand Down
Loading

0 comments on commit a79b626

Please sign in to comment.