Plato on Github
Report Home
lang/compiler/parser/identifier.js
Maintainability
114.39
Lines of code
42
Difficulty
18.09
Estimated Errors
0.40
Function weight
By Complexity
By SLOC
(function(sc) { "use strict"; require("./parser"); var Token = sc.lang.compiler.Token; var Node = sc.lang.compiler.Node; var Parser = sc.lang.compiler.Parser; Parser.addParseMethod("Identifier", function(opts) { opts = opts || {}; var marker = this.createMarker(); var node = this.lex(); var err; err = err || (node.type !== Token.Identifier); err = err || (node.value === "_" && !opts.allowUnderscore); err = err || (opts.variable && !isVariable(node.value)); if (err) { this.throwUnexpected(node); } return marker.update().apply( Node.createIdentifier(node.value) ); }); Parser.addParseMethod("PrimaryIdentifier", function() { var expr = this.parseIdentifier({ allowUnderscore: true }); if (expr.name === "_") { expr.name = "$_" + this.state.underscore.length.toString(); this.state.underscore.push(expr); } return expr; }); function isVariable(value) { var ch = value.charCodeAt(0); return 97 <= ch && ch <= 122; // startsWith(/[a-z]/) } })(sc);