;;; wisent-javascript-jv.wy -- LALR grammar for Javascript ;; ;; Copyright (C) 2005 Joakim Verona, Eric Ludlam ;; JAVE Copyright (C) Alex Walker ;; ;; Author: Joakim Verona ;; Maintainer: ;; Keywords: syntax ;; X-RCS: $Id: wisent-javascript-jv.wy,v 1.2 2005/09/30 20:16:10 zappo Exp $ ;; ;; This file is not part of GNU Emacs. ;; ;; This program 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 2, or (at ;; your option) any later version. ;; ;; This software 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; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;; ;;; Commentary: ;; ;;JAVE converted from a bison javascript definition at: ;; http://www.soton.net/jssyntaxchecker/FinalReport.pdf ;;by Alex Walker ;;and from wisent-javascrypt.wy by Eric Ludlam ;; ;;...and then further modified by Joakim Verona ;;and its more of an experiment than anything useful %package wisent-javascript-jv-wy ;; JAVE I prefere ecmascript-mode %languagemode ecmascript-mode javascript-mode ;; The default goal %start Program ;; Other Goals %start FormalParameterList ;; with the terminals stuff, I used the javacript.y names, ;; but the 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 [