mirror of
https://github.com/jashkenas/coffeescript.git
synced 2026-02-19 03:44:23 -05:00
waypoint -- parser.coffee can parse basic functions
This commit is contained in:
@@ -1,31 +1,30 @@
|
||||
exports.Node: -> @values: arguments
|
||||
exports.Node.wrap: (values) -> @values: values
|
||||
|
||||
exports.Expressions : exports.Node
|
||||
exports.LiteralNode : exports.Node
|
||||
exports.ReturnNode : exports.Node
|
||||
exports.CommentNode : exports.Node
|
||||
exports.CallNode : exports.Node
|
||||
exports.ExtendsNode : exports.Node
|
||||
exports.ValueNode : exports.Node
|
||||
exports.AccessorNode : exports.Node
|
||||
exports.IndexNode : exports.Node
|
||||
exports.RangeNode : exports.Node
|
||||
exports.SliceNode : exports.Node
|
||||
exports.AssignNode : exports.Node
|
||||
exports.OpNode : exports.Node
|
||||
exports.CodeNode : exports.Node
|
||||
exports.SplatNode : exports.Node
|
||||
exports.ObjectNode : exports.Node
|
||||
exports.ArrayNode : exports.Node
|
||||
exports.PushNode : exports.Node
|
||||
exports.ClosureNode : exports.Node
|
||||
exports.WhileNode : exports.Node
|
||||
exports.ForNode : exports.Node
|
||||
exports.TryNode : exports.Node
|
||||
exports.ThrowNode : exports.Node
|
||||
exports.ExistenceNode : exports.Node
|
||||
exports.ParentheticalNode : exports.Node
|
||||
exports.IfNode : exports.Node
|
||||
exports.Node: -> @values: arguments; @name: this.constructor.name
|
||||
|
||||
exports.Expressions : -> @name: this.constructor.name; @values: arguments
|
||||
exports.LiteralNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.ReturnNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.CommentNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.CallNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.ExtendsNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.ValueNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.AccessorNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.IndexNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.RangeNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.SliceNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.AssignNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.OpNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.CodeNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.SplatNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.ObjectNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.ArrayNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.PushNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.ClosureNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.WhileNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.ForNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.TryNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.ThrowNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.ExistenceNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.ParentheticalNode : -> @name: this.constructor.name; @values: arguments
|
||||
exports.IfNode : -> @name: this.constructor.name; @values: arguments
|
||||
|
||||
exports.Expressions.wrap : (values) -> @values: values
|
||||
|
||||
@@ -62,39 +62,39 @@ grammar: {
|
||||
# is the expression.
|
||||
Expression: [
|
||||
o "Value"
|
||||
# o "Call"
|
||||
# o "Code"
|
||||
# o "Operation"
|
||||
# o "Assign"
|
||||
# o "If"
|
||||
# o "Try"
|
||||
# o "Throw"
|
||||
# o "Return"
|
||||
# o "While"
|
||||
# o "For"
|
||||
# o "Switch"
|
||||
# o "Extends"
|
||||
# o "Splat"
|
||||
# o "Existence"
|
||||
# o "Comment"
|
||||
o "Call"
|
||||
o "Code"
|
||||
o "Operation"
|
||||
o "Assign"
|
||||
o "If"
|
||||
o "Try"
|
||||
o "Throw"
|
||||
o "Return"
|
||||
o "While"
|
||||
o "For"
|
||||
o "Switch"
|
||||
o "Extends"
|
||||
o "Splat"
|
||||
o "Existence"
|
||||
o "Comment"
|
||||
]
|
||||
|
||||
# # A block of expressions. Note that the Rewriter will convert some postfix
|
||||
# # forms into blocks for us, by altering the token stream.
|
||||
# Block: [
|
||||
# o "INDENT Expressions OUTDENT", -> $2
|
||||
# o "INDENT OUTDENT", -> new Expressions()
|
||||
# ]
|
||||
# A block of expressions. Note that the Rewriter will convert some postfix
|
||||
# forms into blocks for us, by altering the token stream.
|
||||
Block: [
|
||||
o "INDENT Expressions OUTDENT", -> $2
|
||||
o "INDENT OUTDENT", -> new Expressions()
|
||||
]
|
||||
|
||||
# All hard-coded values. These can be printed straight to JavaScript.
|
||||
Literal: [
|
||||
o "NUMBER", -> new LiteralNode(yytext)
|
||||
o "STRING", -> new LiteralNode($1)
|
||||
o "JS", -> new LiteralNode($1)
|
||||
o "REGEX", -> new LiteralNode($1)
|
||||
o "BREAK", -> new LiteralNode($1)
|
||||
o "CONTINUE", -> new LiteralNode($1)
|
||||
o "ARGUMENTS", -> new LiteralNode($1)
|
||||
o "STRING", -> new LiteralNode(yytext)
|
||||
o "JS", -> new LiteralNode(yytext)
|
||||
o "REGEX", -> new LiteralNode(yytext)
|
||||
o "BREAK", -> new LiteralNode(yytext)
|
||||
o "CONTINUE", -> new LiteralNode(yytext)
|
||||
o "ARGUMENTS", -> new LiteralNode(yytext)
|
||||
o "TRUE", -> new LiteralNode(true)
|
||||
o "FALSE", -> new LiteralNode(false)
|
||||
o "YES", -> new LiteralNode(true)
|
||||
@@ -103,28 +103,28 @@ grammar: {
|
||||
o "OFF", -> new LiteralNode(false)
|
||||
]
|
||||
|
||||
# # Assignment to a variable (or index).
|
||||
# Assign: [
|
||||
# o "Value ASSIGN Expression", -> new AssignNode($1, $3)
|
||||
# ]
|
||||
#
|
||||
# # Assignment within an object literal (can be quoted).
|
||||
# AssignObj: [
|
||||
# o "IDENTIFIER ASSIGN Expression", -> new AssignNode(new ValueNode($1), $3, 'object')
|
||||
# o "STRING ASSIGN Expression", -> new AssignNode(new ValueNode(new LiteralNode($1)), $3, 'object')
|
||||
# o "Comment"
|
||||
# ]
|
||||
#
|
||||
# # A return statement.
|
||||
# Return: [
|
||||
# o "RETURN Expression", -> new ReturnNode($2)
|
||||
# o "RETURN", -> new ReturnNode(new ValueNode(new LiteralNode('null')))
|
||||
# ]
|
||||
#
|
||||
# # A comment.
|
||||
# Comment: [
|
||||
# o "COMMENT", -> new CommentNode($1)
|
||||
# ]
|
||||
# Assignment to a variable (or index).
|
||||
Assign: [
|
||||
o "Value ASSIGN Expression", -> new AssignNode($1, $3)
|
||||
]
|
||||
|
||||
# Assignment within an object literal (can be quoted).
|
||||
AssignObj: [
|
||||
o "IDENTIFIER ASSIGN Expression", -> new AssignNode(new ValueNode(yytext), $3, 'object')
|
||||
o "STRING ASSIGN Expression", -> new AssignNode(new ValueNode(new LiteralNode(yytext)), $3, 'object')
|
||||
o "Comment"
|
||||
]
|
||||
|
||||
# A return statement.
|
||||
Return: [
|
||||
o "RETURN Expression", -> new ReturnNode($2)
|
||||
o "RETURN", -> new ReturnNode(new ValueNode(new LiteralNode('null')))
|
||||
]
|
||||
|
||||
# A comment.
|
||||
Comment: [
|
||||
o "COMMENT", -> new CommentNode(yytext)
|
||||
]
|
||||
#
|
||||
# # Arithmetic and logical operators
|
||||
# # For Ruby's Operator precedence, see: [
|
||||
@@ -186,91 +186,36 @@ grammar: {
|
||||
# o "Expression INSTANCEOF Expression", -> new OpNode($2, $1, $3)
|
||||
# o "Expression IN Expression", -> new OpNode($2, $1, $3)
|
||||
# ]
|
||||
#
|
||||
# # Try abbreviated expressions to make the grammar build faster:
|
||||
#
|
||||
# # UnaryOp: [
|
||||
# # o "!"
|
||||
# # o "!!"
|
||||
# # o "NOT"
|
||||
# # o "~"
|
||||
# # o "--"
|
||||
# # o "++"
|
||||
# # o "DELETE"
|
||||
# # o "TYPEOF"
|
||||
# # ]
|
||||
# #
|
||||
# # BinaryOp: [
|
||||
# # o "*"
|
||||
# # o "/"
|
||||
# # o "%"
|
||||
# # o "+"
|
||||
# # o "-"
|
||||
# # o "<<"
|
||||
# # o ">>"
|
||||
# # o ">>>"
|
||||
# # o "&"
|
||||
# # o "|"
|
||||
# # o "^"
|
||||
# # o "<="
|
||||
# # o "<"
|
||||
# # o ">"
|
||||
# # o ">="
|
||||
# # o "=="
|
||||
# # o "!="
|
||||
# # o "IS"
|
||||
# # o "ISNT"
|
||||
# # o "&&"
|
||||
# # o "||"
|
||||
# # o "AND"
|
||||
# # o "OR"
|
||||
# # o "?"
|
||||
# # o "-="
|
||||
# # o "+="
|
||||
# # o "/="
|
||||
# # o "*="
|
||||
# # o "%="
|
||||
# # o "||="
|
||||
# # o "&&="
|
||||
# # o "?="
|
||||
# # o "INSTANCEOF"
|
||||
# # o "IN"
|
||||
# # ]
|
||||
# #
|
||||
# # Operation: [
|
||||
# # o "Expression BinaryOp Expression", -> new OpNode($2, $1, $3)
|
||||
# # o "UnaryOp Expression", -> new OpNode($1, $2)
|
||||
# # ]
|
||||
#
|
||||
# # The existence operator.
|
||||
# Existence: [
|
||||
# o "Expression ?", -> new ExistenceNode($1)
|
||||
# ]
|
||||
#
|
||||
# # Function definition.
|
||||
# Code: [
|
||||
# o "PARAM_START ParamList PARAM_END FuncGlyph Block", -> new CodeNode($2, $5, $4)
|
||||
# o "FuncGlyph Block", -> new CodeNode([], $2, $1)
|
||||
# ]
|
||||
#
|
||||
# # The symbols to signify functions, and bound functions.
|
||||
# FuncGlyph: [
|
||||
# o "->", -> 'func'
|
||||
# o "=>", -> 'boundfunc'
|
||||
# ]
|
||||
#
|
||||
# # The parameters to a function definition.
|
||||
# ParamList: [
|
||||
# o "Param", -> [$1]
|
||||
# o "ParamList , Param", -> $1.push($3)
|
||||
# ]
|
||||
#
|
||||
# # A Parameter (or ParamSplat) in a function definition.
|
||||
# Param: [
|
||||
# o "PARAM"
|
||||
# o "PARAM . . .", -> new SplatNode($1)
|
||||
# ]
|
||||
#
|
||||
|
||||
# The existence operator.
|
||||
Existence: [
|
||||
o "Expression ?", -> new ExistenceNode($1)
|
||||
]
|
||||
|
||||
# Function definition.
|
||||
Code: [
|
||||
o "PARAM_START ParamList PARAM_END FuncGlyph Block", -> new CodeNode($2, $5, $4)
|
||||
o "FuncGlyph Block", -> new CodeNode([], $2, $1)
|
||||
]
|
||||
|
||||
# The symbols to signify functions, and bound functions.
|
||||
FuncGlyph: [
|
||||
o "->", -> 'func'
|
||||
o "=>", -> 'boundfunc'
|
||||
]
|
||||
|
||||
# The parameters to a function definition.
|
||||
ParamList: [
|
||||
o "Param", -> [$1]
|
||||
o "ParamList , Param", -> $1.push($3)
|
||||
]
|
||||
|
||||
# A Parameter (or ParamSplat) in a function definition.
|
||||
Param: [
|
||||
o "PARAM", -> yytext
|
||||
o "PARAM . . .", -> new SplatNode(yytext)
|
||||
]
|
||||
|
||||
# # A regular splat.
|
||||
# Splat: [
|
||||
# o "Expression . . .", -> new SplatNode($1)
|
||||
|
||||
Reference in New Issue
Block a user