+++ /dev/null
-/*--------------------------------------------------------------------------\r
- * Copyright 2007 Taro L. Saito\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- *--------------------------------------------------------------------------*/\r
-//--------------------------------------\r
-// XerialJ Project\r
-//\r
-// JSON.g\r
-// Since: Apr 26, 2007\r
-//\r
-//--------------------------------------\r
- \r
-grammar JSON;\r
-options\r
-{\r
- language=Java;\r
- output=AST;\r
-// charVocabulary='\u0000'..'\uFFFE';\r
-}\r
- \r
-tokens\r
-{\r
- OBJECT;\r
- ELEMENT;\r
- ARRAY;\r
- STRING;\r
- INTEGER;\r
- DOUBLE;\r
-}\r
-\r
-@lexer::header\r
-{\r
-//--------------------------------------\r
-// XerialJ Project\r
-//\r
-// JSONLexer.java\r
-// Since: Apr 26, 2007\r
-//\r
-//--------------------------------------\r
-package org.xerial.json.impl;\r
-}\r
-\r
-@header\r
-{\r
-//--------------------------------------\r
-// Xerial Project\r
-//\r
-// JSONParser.java\r
-// Since: Apr 26, 2007\r
-//\r
-//--------------------------------------\r
-package org.xerial.json.impl;\r
-}\r
-\r
-@rulecatch {\r
-\r
-}\r
-\r
-// lexer rules\r
-Colon: ':';\r
-Comma: ',';\r
-LBrace: '{';\r
-RBrace: '}';\r
-LBracket: '[';\r
-RBracket: ']';\r
-fragment Dot: '.';\r
-TRUE: 'true';\r
-FALSE: 'false';\r
-NULL: 'null';\r
-\r
-fragment Digit: '0' .. '9';\r
-fragment HexDigit: ('0' .. '9' | 'A' .. 'F' | 'a' .. 'f');\r
-fragment UnicodeChar: ~('"'| '\\');\r
-fragment StringChar : UnicodeChar | EscapeSequence;\r
-\r
-fragment EscapeSequence\r
- : '\\' ('\"' | '\\' | '/' | 'b' | 'f' | 'n' | 'r' | 't' | 'u' HexDigit HexDigit HexDigit HexDigit)\r
- ;\r
-\r
-fragment Int: '-'? ('0' | '1'..'9' Digit*);\r
-fragment Frac: Dot Digit+;\r
-fragment Exp: ('e' | 'E') ('+' | '-')? Digit+;\r
-\r
-WhiteSpace: (' ' | '\r' | '\t' | '\u000C' | '\n') { $channel=HIDDEN; };\r
-\r
-String: '"' StringChar* '"';\r
-Integer: Int;\r
-Double: Int (Frac Exp? | Exp);\r
-\r
-// parser rules\r
-jsonObject\r
- : object\r
- ;\r
- \r
-jsonArray\r
- : array\r
- ; \r
-\r
-\r
-object\r
- : LBrace (objectElement (Comma objectElement)*)? RBrace\r
- -> ^(OBJECT objectElement*)\r
- ;\r
- \r
-objectElement\r
- : String Colon value\r
- -> ^(ELEMENT String value)\r
- ; \r
- \r
-array\r
- : LBracket value (Comma value)* RBracket\r
- -> ^(ARRAY value+)\r
- ;\r
-\r
- \r
-value\r
- : String -> ^(STRING String)\r
- | Integer -> ^(INTEGER Integer)\r
- | Double -> ^(DOUBLE Double)\r
- | object \r
- | array \r
- | TRUE \r
- | FALSE\r
- | NULL\r
- ;\r
-\r