;;; javascript-jv.wy -- LALR grammar for Javascript
;; Copyright (C) 2005-2019 Free Software Foundation, Inc.
;; Copyright (C) 1998-2011 Ecma International.
;; Author: Joakim Verona
;; This file is part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see .
;;; Commentary:
;; The grammar itself is transcribed from the ECMAScript Language
;; Specification published at
;;
;; https://www.ecma-international.org/publications/standards/Ecma-262.htm
;;
;; and redistributed under the following license:
;; Redistribution and use in source and binary forms, with or without
;; modification, are permitted provided that the following conditions
;; are met:
;; 1. Redistributions of source code must retain the above copyright
;; notice, this list of conditions and the following disclaimer.
;; 2. Redistributions in binary form must reproduce the above
;; copyright notice, this list of conditions and the following
;; disclaimer in the documentation and/or other materials provided
;; with the distribution.
;; 3. Neither the name of the authors nor Ecma International may be
;; used to endorse or promote products derived from this software
;; without specific prior written permission. THIS SOFTWARE IS
;; PROVIDED BY THE ECMA INTERNATIONAL "AS IS" AND ANY EXPRESS OR
;; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
;; ARE DISCLAIMED. IN NO EVENT SHALL ECMA INTERNATIONAL BE LIABLE FOR
;; ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
;; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
;; OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
;; BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
;; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
;; USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
;; DAMAGE.
%package wisent-javascript-jv-wy
%provide semantic/wisent/js-wy
%{
(declare-function semantic-parse-region "semantic"
(start end &optional nonterminal depth returnonerror))
}
;; JAVE I preferred ecmascript-mode.
%languagemode ecmascript-mode javascript-mode
;; The default goal
%start Program
;; Other Goals
%start FormalParameterList
;; with the terminals stuff, I used the javascript.y names,
;; but the semantic/wisent/java-tags.wy types
;; when possible
;; ------------------
;; Operator terminals
;; ------------------
;;define-lex-string-type-analyzer gets called with the "syntax" comment
%type ;;syntax "\\(\\s.\\|\\s$\\|\\s'\\)+" matchdatatype string
%token ASSIGN_SYMBOL "="
%token BITWISE_AND "&"
%token BITWISE_AND_EQUALS "&="
%token BITWISE_EXCLUSIVE_OR "^"
%token BITWISE_EXCLUSIVE_OR_EQUALS "^="
%token BITWISE_OR "|"
%token BITWISE_OR_EQUALS "|="
%token BITWISE_SHIFT_LEFT "<<"
%token BITWISE_SHIFT_LEFT_EQUALS "<<="
%token BITWISE_SHIFT_RIGHT ">>"
%token BITWISE_SHIFT_RIGHT_EQUALS ">>="
%token BITWISE_SHIFT_RIGHT_ZERO_FILL ">>>"
%token BITWISE_SHIFT_RIGHT_ZERO_FILL_EQUALS ">>>="
%token NOT_EQUAL "!="
%token DIV_EQUALS "/="
%token EQUALS "=="
%token GREATER_THAN ">"
%token GT_EQUAL ">="
%token LOGICAL_AND "&&"
%token LOGICAL_OR "||"
%token LOGICAL_NOT "!!"
%token LS_EQUAL "<="
%token MINUS "-"
%token MINUS_EQUALS "-="
%token MOD "%"
%token MOD_EQUALS "%="
%token MULTIPLY "*"
%token MULTIPLY_EQUALS "*="
%token PLUS "+"
%token PLUS_EQUALS "+="
%token INCREMENT "++"
%token DECREMENT "--"
%token DIV "/"
%token COLON ":"
%token COMMA ","
%token DOT "."
%token LESS_THAN "<"
%token LINE_TERMINATOR "\n"
%token SEMICOLON ";"
%token ONES_COMPLIMENT "~"
;; -----------------------------
;; Block & Parenthesis terminals
;; -----------------------------
%type ;;syntax "\\s(\\|\\s)" matchdatatype block
%token PAREN_BLOCK "(OPEN_PARENTHESIS CLOSE_PARENTHESIS)"
%token BRACE_BLOCK "(START_BLOCK END_BLOCK)"
%token BRACK_BLOCK "(OPEN_SQ_BRACKETS CLOSE_SQ_BRACKETS)"
%token OPEN_PARENTHESIS "("
%token CLOSE_PARENTHESIS ")"
%token START_BLOCK "{"
%token END_BLOCK "}"
%token OPEN_SQ_BRACKETS "["
%token CLOSE_SQ_BRACKETS "]"
;; -----------------
;; Keyword terminals
;; -----------------
;; Generate a keyword analyzer
%type ;;syntax "\\(\\sw\\|\\s_\\)+" matchdatatype keyword
%keyword IF "if"
%put IF summary
"if () [else ] (jv)"
%keyword BREAK "break"
%put BREAK summary
"break [