123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528 |
- (require 'semantic/lex)
- (defconst wisent-javascript-jv-wy--keyword-table
- (semantic-lex-make-keyword-table
- '(("if" . IF)
- ("break" . BREAK)
- ("continue" . CONTINUE)
- ("else" . ELSE)
- ("for" . FOR)
- ("function" . FUNCTION)
- ("this" . THIS)
- ("return" . RETURN)
- ("while" . WHILE)
- ("void" . VOID_SYMBOL)
- ("new" . NEW)
- ("delete" . DELETE)
- ("var" . VAR)
- ("with" . WITH)
- ("typeof" . TYPEOF)
- ("in" . IN))
- '(("in" summary "in something")
- ("typeof" summary "typeof ")
- ("with" summary "with ")
- ("var" summary "var <variablename> [= value];")
- ("delete" summary "delete(<objectreference>) - Deletes the object.")
- ("new" summary "new <objecttype> - Creates a new object.")
- ("void" summary "Method return type: void <name> ...")
- ("while" summary "while (<expr>) <stmt> | do <stmt> while (<expr>);")
- ("return" summary "return [<expr>] ;")
- ("this" summary "this")
- ("function" summary "function declaration blah blah")
- ("for" summary "for ([<init-expr>]; [<expr>]; [<update-expr>]) <stmt>")
- ("else" summary "if (<expr>) <stmt> else <stmt>")
- ("continue" summary "continue [<label>] ;")
- ("break" summary "break [<label>] ;")
- ("if" summary "if (<expr>) <stmt> [else <stmt>] (jv)")))
- "Table of language keywords.")
- (defconst wisent-javascript-jv-wy--token-table
- (semantic-lex-make-type-table
- '(("<no-type>"
- (NULL_TOKEN)
- (QUERY)
- (TRUE)
- (FALSE))
- ("number"
- (NUMBER))
- ("string"
- (STRING))
- ("symbol"
- (VARIABLE))
- ("close-paren"
- (CLOSE_SQ_BRACKETS . "]")
- (END_BLOCK . "}")
- (CLOSE_PARENTHESIS . ")"))
- ("open-paren"
- (OPEN_SQ_BRACKETS . "[")
- (START_BLOCK . "{")
- (OPEN_PARENTHESIS . "("))
- ("block"
- (BRACK_BLOCK . "(OPEN_SQ_BRACKETS CLOSE_SQ_BRACKETS)")
- (BRACE_BLOCK . "(START_BLOCK END_BLOCK)")
- (PAREN_BLOCK . "(OPEN_PARENTHESIS CLOSE_PARENTHESIS)"))
- ("punctuation"
- (ONES_COMPLIMENT . "~")
- (SEMICOLON . ";")
- (LINE_TERMINATOR . "\n")
- (LESS_THAN . "<")
- (DOT . ".")
- (COMMA . ",")
- (COLON . ":")
- (DIV . "/")
- (DECREMENT . "--")
- (INCREMENT . "++")
- (PLUS_EQUALS . "+=")
- (PLUS . "+")
- (MULTIPLY_EQUALS . "*=")
- (MULTIPLY . "*")
- (MOD_EQUALS . "%=")
- (MOD . "%")
- (MINUS_EQUALS . "-=")
- (MINUS . "-")
- (LS_EQUAL . "<=")
- (LOGICAL_NOT . "!!")
- (LOGICAL_OR . "||")
- (LOGICAL_AND . "&&")
- (GT_EQUAL . ">=")
- (GREATER_THAN . ">")
- (EQUALS . "==")
- (DIV_EQUALS . "/=")
- (NOT_EQUAL . "!=")
- (BITWISE_SHIFT_RIGHT_ZERO_FILL_EQUALS . ">>>=")
- (BITWISE_SHIFT_RIGHT_ZERO_FILL . ">>>")
- (BITWISE_SHIFT_RIGHT_EQUALS . ">>=")
- (BITWISE_SHIFT_RIGHT . ">>")
- (BITWISE_SHIFT_LEFT_EQUALS . "<<=")
- (BITWISE_SHIFT_LEFT . "<<")
- (BITWISE_OR_EQUALS . "|=")
- (BITWISE_OR . "|")
- (BITWISE_EXCLUSIVE_OR_EQUALS . "^=")
- (BITWISE_EXCLUSIVE_OR . "^")
- (BITWISE_AND_EQUALS . "&=")
- (BITWISE_AND . "&")
- (ASSIGN_SYMBOL . "=")))
- '(("number" :declared t)
- ("string" :declared t)
- ("symbol" :declared t)
- ("keyword" :declared t)
- ("block" :declared t)
- ("punctuation" :declared t)))
- "Table of lexical tokens.")
- (defconst wisent-javascript-jv-wy--parse-table
- (progn
- (eval-when-compile
- (require 'semantic/wisent/comp))
- (wisent-compile-grammar
- '((ASSIGN_SYMBOL BITWISE_AND BITWISE_AND_EQUALS BITWISE_EXCLUSIVE_OR BITWISE_EXCLUSIVE_OR_EQUALS BITWISE_OR BITWISE_OR_EQUALS BITWISE_SHIFT_LEFT BITWISE_SHIFT_LEFT_EQUALS BITWISE_SHIFT_RIGHT BITWISE_SHIFT_RIGHT_EQUALS BITWISE_SHIFT_RIGHT_ZERO_FILL BITWISE_SHIFT_RIGHT_ZERO_FILL_EQUALS NOT_EQUAL DIV_EQUALS EQUALS GREATER_THAN GT_EQUAL LOGICAL_AND LOGICAL_OR LOGICAL_NOT LS_EQUAL MINUS MINUS_EQUALS MOD MOD_EQUALS MULTIPLY MULTIPLY_EQUALS PLUS PLUS_EQUALS INCREMENT DECREMENT DIV COLON COMMA DOT LESS_THAN LINE_TERMINATOR SEMICOLON ONES_COMPLIMENT PAREN_BLOCK BRACE_BLOCK BRACK_BLOCK OPEN_PARENTHESIS CLOSE_PARENTHESIS START_BLOCK END_BLOCK OPEN_SQ_BRACKETS CLOSE_SQ_BRACKETS IF BREAK CONTINUE ELSE FOR FUNCTION THIS RETURN WHILE VOID_SYMBOL NEW DELETE VAR WITH TYPEOF IN VARIABLE STRING NUMBER FALSE TRUE QUERY NULL_TOKEN)
- ((left PLUS MINUS)
- (left MULTIPLY DIV MOD)
- (nonassoc FALSE)
- (nonassoc HIGHER_THAN_FALSE)
- (nonassoc ELSE)
- (nonassoc LOWER_THAN_CLOSE_PARENTHESIS)
- (nonassoc CLOSE_PARENTHESIS))
- (Program
- ((SourceElement)))
- (SourceElement
- ((Statement))
- ((FunctionDeclaration)))
- (Statement
- ((Block))
- ((VariableStatement))
- ((EmptyStatement))
- ((ExpressionStatement))
- ((IfStatement))
- ((IterationExpression))
- ((ContinueStatement))
- ((BreakStatement))
- ((ReturnStatement))
- ((WithStatement)))
- (FunctionDeclaration
- ((FUNCTION VARIABLE FormalParameterListBlock Block)
- (wisent-raw-tag
- (semantic-tag-new-function $2 nil $3))))
- (FormalParameterListBlock
- ((PAREN_BLOCK)
- (semantic-parse-region
- (car $region1)
- (cdr $region1)
- 'FormalParameterList 1)))
- (FormalParameterList
- ((OPEN_PARENTHESIS)
- nil)
- ((VARIABLE)
- (wisent-raw-tag
- (semantic-tag-new-variable $1 nil nil)))
- ((CLOSE_PARENTHESIS)
- nil)
- ((COMMA)
- nil))
- (StatementList
- ((Statement))
- ((StatementList Statement)))
- (Block
- ((BRACE_BLOCK)))
- (BlockExpand
- ((START_BLOCK StatementList END_BLOCK))
- ((START_BLOCK END_BLOCK)))
- (VariableStatement
- ((VAR VariableDeclarationList SEMICOLON)
- (wisent-raw-tag
- (semantic-tag-new-variable $2 nil nil))))
- (VariableDeclarationList
- ((VariableDeclaration)
- (list $1))
- ((VariableDeclarationList COMMA VariableDeclaration)
- (append $1
- (list $3))))
- (VariableDeclaration
- ((VARIABLE)
- (append
- (list $1 nil)
- $region))
- ((VARIABLE Initializer)
- (append
- (cons $1 $2)
- $region)))
- (Initializer
- ((ASSIGN_SYMBOL AssignmentExpression)
- (list $2)))
- (EmptyStatement
- ((SEMICOLON)))
- (ExpressionStatement
- ((Expression SEMICOLON)))
- (IfStatement
- ((IF OPEN_PARENTHESIS Expression CLOSE_PARENTHESIS Statement)
- [HIGHER_THAN_FALSE])
- ((IF OPEN_PARENTHESIS Expression CLOSE_PARENTHESIS Statement ELSE Statement))
- ((IF OPEN_PARENTHESIS FALSE CLOSE_PARENTHESIS Statement))
- ((IF OPEN_PARENTHESIS LeftHandSideExpression AssignmentOperator AssignmentExpression CLOSE_PARENTHESIS Statement)))
- (IterationExpression
- ((WHILE OPEN_PARENTHESIS Expression CLOSE_PARENTHESIS Statement)
- [HIGHER_THAN_FALSE])
- ((WHILE OPEN_PARENTHESIS FALSE CLOSE_PARENTHESIS Statement))
- ((WHILE OPEN_PARENTHESIS LeftHandSideExpression AssignmentOperator AssignmentExpression CLOSE_PARENTHESIS Statement))
- ((FOR OPEN_PARENTHESIS OptionalExpression SEMICOLON OptionalExpression SEMICOLON OptionalExpression CLOSE_PARENTHESIS Statement))
- ((FOR OPEN_PARENTHESIS VAR VariableDeclarationList SEMICOLON OptionalExpression SEMICOLON OptionalExpression CLOSE_PARENTHESIS Statement))
- ((FOR OPEN_PARENTHESIS LeftHandSideExpression IN Expression CLOSE_PARENTHESIS Statement))
- ((FOR OPEN_PARENTHESIS VAR VARIABLE OptionalInitializer IN Expression CLOSE_PARENTHESIS Statement)))
- (ContinueStatement
- ((CONTINUE SEMICOLON)))
- (BreakStatement
- ((BREAK SEMICOLON)))
- (ReturnStatement
- ((RETURN Expression SEMICOLON))
- ((RETURN SEMICOLON)))
- (WithStatement
- ((WITH OPEN_PARENTHESIS Expression CLOSE_PARENTHESIS Statement)))
- (OptionalInitializer
- ((Initializer))
- (nil))
- (PrimaryExpression
- ((THIS))
- ((VARIABLE))
- ((NUMBER))
- ((STRING))
- ((NULL_TOKEN))
- ((TRUE))
- ((FALSE))
- ((OPEN_PARENTHESIS Expression CLOSE_PARENTHESIS)))
- (MemberExpression
- ((PrimaryExpression))
- ((MemberExpression OPEN_SQ_BRACKETS Expression CLOSE_SQ_BRACKETS))
- ((MemberExpression DOT VARIABLE))
- ((NEW MemberExpression Arguments)))
- (NewExpression
- ((MemberExpression))
- ((NEW NewExpression)))
- (CallExpression
- ((MemberExpression Arguments))
- ((CallExpression Arguments))
- ((CallExpression OPEN_SQ_BRACKETS Expression CLOSE_SQ_BRACKETS))
- ((CallExpression DOT VARIABLE)))
- (Arguments
- ((OPEN_PARENTHESIS CLOSE_PARENTHESIS))
- ((OPEN_PARENTHESIS ArgumentList CLOSE_PARENTHESIS)))
- (ArgumentList
- ((AssignmentExpression))
- ((ArgumentList COMMA AssignmentExpression)))
- (LeftHandSideExpression
- ((NewExpression))
- ((CallExpression)))
- (PostfixExpression
- ((LeftHandSideExpression))
- ((LeftHandSideExpression INCREMENT))
- ((LeftHandSideExpression DECREMENT)))
- (UnaryExpression
- ((PostfixExpression))
- ((DELETE UnaryExpression))
- ((VOID_SYMBOL UnaryExpression))
- ((TYPEOF UnaryExpression))
- ((INCREMENT UnaryExpression))
- ((DECREMENT UnaryExpression))
- ((PLUS UnaryExpression))
- ((MINUS UnaryExpression))
- ((ONES_COMPLIMENT UnaryExpression))
- ((LOGICAL_NOT UnaryExpression)))
- (MultiplicativeExpression
- ((UnaryExpression))
- ((MultiplicativeExpression MULTIPLY UnaryExpression))
- ((MultiplicativeExpression DIV UnaryExpression))
- ((MultiplicativeExpression MOD UnaryExpression)))
- (AdditiveExpression
- ((MultiplicativeExpression))
- ((AdditiveExpression PLUS MultiplicativeExpression))
- ((AdditiveExpression MINUS MultiplicativeExpression)))
- (ShiftExpression
- ((AdditiveExpression))
- ((ShiftExpression BITWISE_SHIFT_LEFT AdditiveExpression))
- ((ShiftExpression BITWISE_SHIFT_RIGHT AdditiveExpression))
- ((ShiftExpression BITWISE_SHIFT_RIGHT_ZERO_FILL AdditiveExpression)))
- (RelationalExpression
- ((ShiftExpression))
- ((RelationalExpression LESS_THAN ShiftExpression))
- ((RelationalExpression GREATER_THAN ShiftExpression))
- ((RelationalExpression LS_EQUAL ShiftExpression))
- ((RelationalExpression GT_EQUAL ShiftExpression)))
- (EqualityExpression
- ((RelationalExpression))
- ((EqualityExpression EQUALS RelationalExpression))
- ((EqualityExpression NOT_EQUAL RelationalExpression)))
- (BitwiseANDExpression
- ((EqualityExpression))
- ((BitwiseANDExpression BITWISE_AND EqualityExpression)))
- (BitwiseXORExpression
- ((BitwiseANDExpression))
- ((BitwiseXORExpression BITWISE_EXCLUSIVE_OR BitwiseANDExpression)))
- (BitwiseORExpression
- ((BitwiseXORExpression))
- ((BitwiseORExpression BITWISE_OR BitwiseXORExpression)))
- (LogicalANDExpression
- ((BitwiseORExpression))
- ((LogicalANDExpression LOGICAL_AND BitwiseORExpression)))
- (LogicalORExpression
- ((LogicalANDExpression))
- ((LogicalORExpression LOGICAL_OR LogicalANDExpression)))
- (ConditionalExpression
- ((LogicalORExpression))
- ((LogicalORExpression QUERY AssignmentExpression COLON AssignmentExpression)))
- (AssignmentExpression
- ((ConditionalExpression))
- ((LeftHandSideExpression AssignmentOperator AssignmentExpression)
- [LOWER_THAN_CLOSE_PARENTHESIS]))
- (AssignmentOperator
- ((ASSIGN_SYMBOL))
- ((MULTIPLY_EQUALS))
- ((DIV_EQUALS))
- ((MOD_EQUALS))
- ((PLUS_EQUALS))
- ((MINUS_EQUALS))
- ((BITWISE_SHIFT_LEFT_EQUALS))
- ((BITWISE_SHIFT_RIGHT_EQUALS))
- ((BITWISE_SHIFT_RIGHT_ZERO_FILL_EQUALS))
- ((BITWISE_AND_EQUALS))
- ((BITWISE_EXCLUSIVE_OR_EQUALS))
- ((BITWISE_OR_EQUALS)))
- (Expression
- ((AssignmentExpression))
- ((Expression COMMA AssignmentExpression)))
- (OptionalExpression
- ((Expression))
- (nil)))
- '(Program FormalParameterList)))
- "Parser table.")
- (defun wisent-javascript-jv-wy--install-parser ()
- "Setup the Semantic Parser."
- (semantic-install-function-overrides
- '((parse-stream . wisent-parse-stream)))
- (setq semantic-parser-name "LALR"
- semantic--parse-table wisent-javascript-jv-wy--parse-table
- semantic-debug-parser-source "js.wy"
- semantic-flex-keywords-obarray wisent-javascript-jv-wy--keyword-table
- semantic-lex-types-obarray wisent-javascript-jv-wy--token-table)
-
- (semantic-make-local-hook 'wisent-discarding-token-functions)
- (add-hook 'wisent-discarding-token-functions
- 'wisent-collect-unmatched-syntax nil t))
- (define-lex-string-type-analyzer wisent-javascript-jv-wy--<punctuation>-string-analyzer
- "string analyzer for <punctuation> tokens."
- "\\(\\s.\\|\\s$\\|\\s'\\)+"
- '((ONES_COMPLIMENT . "~")
- (SEMICOLON . ";")
- (LINE_TERMINATOR . "\n")
- (LESS_THAN . "<")
- (DOT . ".")
- (COMMA . ",")
- (COLON . ":")
- (DIV . "/")
- (DECREMENT . "--")
- (INCREMENT . "++")
- (PLUS_EQUALS . "+=")
- (PLUS . "+")
- (MULTIPLY_EQUALS . "*=")
- (MULTIPLY . "*")
- (MOD_EQUALS . "%=")
- (MOD . "%")
- (MINUS_EQUALS . "-=")
- (MINUS . "-")
- (LS_EQUAL . "<=")
- (LOGICAL_NOT . "!!")
- (LOGICAL_OR . "||")
- (LOGICAL_AND . "&&")
- (GT_EQUAL . ">=")
- (GREATER_THAN . ">")
- (EQUALS . "==")
- (DIV_EQUALS . "/=")
- (NOT_EQUAL . "!=")
- (BITWISE_SHIFT_RIGHT_ZERO_FILL_EQUALS . ">>>=")
- (BITWISE_SHIFT_RIGHT_ZERO_FILL . ">>>")
- (BITWISE_SHIFT_RIGHT_EQUALS . ">>=")
- (BITWISE_SHIFT_RIGHT . ">>")
- (BITWISE_SHIFT_LEFT_EQUALS . "<<=")
- (BITWISE_SHIFT_LEFT . "<<")
- (BITWISE_OR_EQUALS . "|=")
- (BITWISE_OR . "|")
- (BITWISE_EXCLUSIVE_OR_EQUALS . "^=")
- (BITWISE_EXCLUSIVE_OR . "^")
- (BITWISE_AND_EQUALS . "&=")
- (BITWISE_AND . "&")
- (ASSIGN_SYMBOL . "="))
- 'punctuation)
- (define-lex-block-type-analyzer wisent-javascript-jv-wy--<block>-block-analyzer
- "block analyzer for <block> tokens."
- "\\s(\\|\\s)"
- '((("(" OPEN_PARENTHESIS PAREN_BLOCK)
- ("{" START_BLOCK BRACE_BLOCK)
- ("[" OPEN_SQ_BRACKETS BRACK_BLOCK))
- (")" CLOSE_PARENTHESIS)
- ("}" END_BLOCK)
- ("]" CLOSE_SQ_BRACKETS))
- )
- (define-lex-regex-type-analyzer wisent-javascript-jv-wy--<symbol>-regexp-analyzer
- "regexp analyzer for <symbol> tokens."
- "\\(\\sw\\|\\s_\\)+"
- nil
- 'VARIABLE)
- (define-lex-regex-type-analyzer wisent-javascript-jv-wy--<number>-regexp-analyzer
- "regexp analyzer for <number> tokens."
- semantic-lex-number-expression
- nil
- 'NUMBER)
- (define-lex-sexp-type-analyzer wisent-javascript-jv-wy--<string>-sexp-analyzer
- "sexp analyzer for <string> tokens."
- "\\s\""
- 'STRING)
- (define-lex-keyword-type-analyzer wisent-javascript-jv-wy--<keyword>-keyword-analyzer
- "keyword analyzer for <keyword> tokens."
- "\\(\\sw\\|\\s_\\)+")
- (define-lex javascript-lexer-jv
- "javascript thingy"
- semantic-lex-ignore-whitespace
- semantic-lex-ignore-newline
- semantic-lex-ignore-comments
-
- wisent-javascript-jv-wy--<number>-regexp-analyzer
- wisent-javascript-jv-wy--<string>-sexp-analyzer
- wisent-javascript-jv-wy--<keyword>-keyword-analyzer
- wisent-javascript-jv-wy--<symbol>-regexp-analyzer
- wisent-javascript-jv-wy--<punctuation>-string-analyzer
- wisent-javascript-jv-wy--<block>-block-analyzer
-
- semantic-lex-default-action
- )
- (provide 'semantic/wisent/js-wy)
|