;;; 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 [