****************************************************************************
As of ANTLR 4.2.1, March 25 2014, we are no longer updating this file. Instead,
we are using the github release mechanism. For example, here is
4.2.1 release notes:

https://github.com/antlr/antlr4/releases/tag/4.2.1
****************************************************************************

ANTLR v4 Honey Badger

January 15, 2014

* Unit tests for lexer actions from yesterday.
* Refactored TreeView so we can refresh tree externally w/o creating new one.
  Needed for intellij plugin.

January 14, 2014

* Updated serialized ATN representation of lexer actions, allowing the lexer
  interpreter to execute the majority of lexer commands (#408)

January 12, 2014

* Support executing precedence predicates during the SLL phase of
  adaptivePredict (#401). The result is a massive performance boost for grammars
  containing direct left-recursion (improvements of 5% to 1000+% have been
  observed, depending on the grammar and input).

December 29, 2013

* Internal change: Tool.loadGrammar() -> parseGrammar(). Tool.load()->parse()

* Added Tool.loadGrammar(fileName) that completely parses, extracts implicit lexer,
  and processes into Grammar object. Does not geneate code.  Use
  Grammar.getImplicitLexer() to get the lexer created during processing of
  combined grammar.

* Added Grammar.load(fileName) that creates Tool object for you. loadGrammar()
  lets you create your own Tool for setting error handlers etc...

	final Grammar g = Grammar.load("/tmp/MyGrammar.g4");

December 19, 2013

* Sam:
	Improved documentation for tree patterns classes
    Refactored parts of the tree patterns API to simplify classes and improve encapsulation
    Move ATN serializer to runtime
    Use ATNDeserializer methods instead of ATNSimulator methods which are now deprecated

* parrt: fix null pointer bug with rule "a : a;"

November 24, 2013

* Ter adds tree pattern matching.  Preferred interface:

	ParseTree t = parser.expr();
	ParseTreePattern p = parser.compileParseTreePattern("<ID>+0", MyParser.RULE_expr);
	ParseTreeMatch m = p.match(t);
	String id = m.get("ID");

  or

	String xpath = "//blockStatement/*";
	String treePattern = "int <Identifier> = <expression>;";
	ParseTreePattern p =
		parser.compileParseTreePattern(treePattern,
									   JavaParser.RULE_localVariableDeclarationStatement);
	List<ParseTreeMatch> matches = p.findAll(tree, xpath);

November 20, 2013

* Sam added method stuff like expr() that calls expr(0). Makes it possible
  to call expr rule from TestRig (grun).

November 14, 2013

* Added Sam's ParserInterpreter implementation that uses ATN after
  deserialization.

	LexerGrammar lg = new LexerGrammar(
		"lexer grammar L;\n" +
  		"A : 'a' ;\n" +
  		"B : 'b' ;\n" +
  		"C : 'c' ;\n");
  	Grammar g = new Grammar(
  		"parser grammar T;\n" +
  		"s : (A{;}|B)* C ;\n",
  		lg);

	LexerInterpreter lexEngine = lg.createLexerInterpreter(new ANTLRInputStream(input));
	CommonTokenStream tokens = new CommonTokenStream(lexEngine);
	ParserInterpreter parser = g.createParserInterpreter(tokens);
	ParseTree t = parser.parse(g.rules.get(startRule).index);

November 13, 2013

* move getChildren() from Tree into Trees (to avoid breaking change)
* Notation:
	/prog/func,         -> all funcs under prog at root
	/prog/*,            -> all children of prog at root
	/*/func,            -> all func kids of any root node
	prog,               -> prog must be root node
	/prog,              -> prog must be root node
	/*,                 -> any root
	*,                  -> any root
	//ID,               -> any ID in tree
	//expr/primary/ID,  -> any ID child of a primary under any expr
	//body//ID,         -> any ID under a body
	//'return',         -> any 'return' literal in tree
	//primary/*,        -> all kids of any primary
	//func/*/stat,      -> all stat nodes grandkids of any func node
	/prog/func/'def',   -> all def literal kids of func kid of prog
	//stat/';',         -> all ';' under any stat node
	//expr/primary/!ID, -> anything but ID under primary under any expr node
	//expr/!primary,    -> anything but primary under any expr node
	//!*,               -> nothing anywhere
	/!*,                -> nothing at root

September 16, 2013

* Updated build.xml to support v4 grammars in v4 itself; compiles XPathLexer.g4
* Add to XPath:
	Collection<ParseTree> findAll(String xpath);

September 11, 2013

* Add ! operator to XPath
* Use ANTLR v4 XPathLexer.g4 not regex
* Copy lots of find node stuff from v3 GrammarAST to Trees class in runtime.

September 10, 2013

* Adding in XPath stuff.

August 31, 2013

* Lots of little fixes thanks to Coverity Scan

August 7, 2013

* [BREAKING CHANGE] Altered left-recursion elimination to be simpler. Now,
  we use the following patterns:

  * Binary expressions are expressions which contain a recursive invocation of
    the rule as the first and last element of the alternative.

  * Suffix expressions contain a recursive invocation of the rule as the first
    element of the alternative, but not as the last element.

  * Prefix expressions contain a recursive invocation of the rule as the last
    element of the alternative, but not as the first element.

There is no such thing as a "ternary" expression--they are just binary
expressions in disguise.

The right associativity specifiers no longer on the individual tokens because
it's done on alternative basis anyway. The option is now on the individual
alternative; e.g.,

  e : e '*' e
    | e '+' e
    |<assoc=right> e '?' e ':' e
    |<assoc=right> e '=' e
    | INT
    ;

If your language uses a right-associative ternary operator, you will need
to update your grammar to include <assoc=right> on the alternative operator.

This also fixes #245 and fixes #268:

https://github.com/antlr/antlr4/issues/245
https://github.com/antlr/antlr4/issues/268

To smooth the transition, <assoc=right> is still allowed on token references
but it is ignored.

June 30, 2013 -- 4.1 release

June 24, 2013

* Resize ANTLRInputStream.data after reading a file with fewer characters than
  bytes
* Fix ATN created for non-greedy optional block with multiple alternatives
* Support Unicode escape sequences with indirection in JavaUnicodeInputStream
  (fixes #287)
* Remove the ParserRuleContext.altNum field (fixes #288)
* PredictionContext no longer implements Iterable<SingletonPredictionContext>
* PredictionContext no longer implements Comparable<PredictionContext>
* Add the EPSILON_CLOSURE error and EPSILON_OPTIONAL warning
* Optimized usage of closureBusy set (fixes #282)

June 9, 2013

* Add regression test for #239 (already passes)

June 8, 2013

* Support list labels on a set of tokens (fixes #270)
* Fix associativity of XOR in Java LR grammar (fixes #280)

June 1, 2013

* DiagnosticErrorListener includes rule names for each decision in its reports
* Document ANTLRErrorListener and DiagnosticErrorListener (fixes #265)
* Support '\uFFFF' (fixes #267)
* Optimize serialized ATN

May 26, 2013

* Report errors that occur while lexing a grammar (fixes #262)
* Improved error message for unterminated string literals (fixes #243)

May 24, 2013

* Significantly improve performance of JavaUnicodeInputStream.LA(1)

May 20, 2013

* Generate Javadoc for generated visitor and listener interfaces and classes
* Fix unit tests

May 18, 2013

* Group terminals in Java grammars so ATN can collapse sets
* Improved Java 7 support in Java grammars (numeric literals)
* Updated error listener interfaces
* Support detailed statistics in TestPerformance

May 17, 2013

* Add JavaUnicodeInputStream to handle Unicode escapes in Java code
* Proper Unicode identifier handling in Java grammars
* Report file names with lexer errors in TestPerformance

May 14, 2013

* Use a called rule stack to prevent stack overflow in LL1Analyzer
* Use 0-based indexing for several arrays in the tool
* Code simplification, assertions, documentation

May 13, 2013

* Unit test updates to ensure exceptions are not hidden

May 12, 2013

* Updates to TestPerformance

May 5, 2013

* Updated several classes to use MurmurHash 3 hashing

May 1, 2013

* Added parse tree JTree to TreeViewer (Bart Kiers)

April 30, 2013

* Updated TestPerformance to support parallelization across passes

April 24, 2013

* Remove unused stub class ParserATNPathFinder
* Remove ParserInterpreter.predictATN
* Remove DFA.getATNStatesAlongPath
* Encapsulate implementation methods in LexerATNSimulator and ParserATNSimulator
* Updated documentation
* Simplify creation of new DFA edges
* Fix handling of previously cached error edges
* Fix DFA created during forced-SLL parsing (PredictionMode.SLL)
* Extract methods ParserATNSimulator.getExistingTargetState and
  ParserATNSimulator.computeTargetState.

April 22, 2013

* Lazy initialization of ParserATNSimulator.mergeCache
* Improved hash code for DFAState
* Improved hash code with caching for ATNConfigSet
* Add new configuration parameters to TestPerformance
* Update Java LR and Java Std to support Java 7 syntax

April 21, 2013

* Add new configuration parameters to TestPerformance

April 18, 2013

* Must check rule transition follow states before eliminating states in
  the ATN (fixes #224)
* Simplify ParserATNSimulator and improve performance by combining execDFA and
  execATN and using DFA edges even after edge computation is required

April 15, 2013

* Fix code in TestPerformance that clears the DFA

April 12, 2013

* Improved initialization and concurrency control in DFA updates
* Fix EOF handling in edge case (fixes #218)

April 4, 2013

* Improved testing of error reporting
* Fix NPE revealed by updated testing method
* Strict handling of redefined rules - prevents code generation (fixes #210)
* Updated documentation in Tool

March 27, 2013

* Avoid creating empty action methods in lexer (fixes #202)
* Split serialized ATN when it exceeds Java's 65535 byte limit (fixes #76)
* Fix incorrect reports of label type conflicts across separated labeled outer
  alternatives (fixes #195)
* Update Maven plugin site documentation

March 26, 2013

* Fix bugs with the closureBusy set in ParserATNSimulator.closure
* Fix handling of empty options{} block (fixes #194)
* Add error 149 INVALID_LEXER_COMMAND (fixes #190)
* Add error 150 MISSING_LEXER_COMMAND_ARGUMENT
* Add error 151 UNWANTED_LEXER_COMMAND_ARGUMENT
* Updated documentation in the Parser and RecognitionException classes
* Refactored and extensively documented the ANTLRErrorStrategy interface and
  DefaultErrorStrategy default implementation
* Track the number of syntax errors in Parser.notifyErrorListeners instead of in
  the error strategy
* Move primary implementation of getExpectedTokens to ATN, fixes #191
* Updated ATN documentation
* Use UUID instead of incremented integer for serialized ATN versioning

March 7, 2013

* Added export to PNG feature to the parse tree viewer

March 6, 2013

* Allow direct calls to left-recursive rules (fixes #161)
* Change error type 146 (EPSILON_TOKEN) to a warning (fixes #180)
* Specify locale for all format operations (fixes #158)
* Fix generation of invalid Unicode escape sequences in Java code (fixes #164)
* Do not require escape for $ in action when not followed by an ID start char
  (fixes #176)

February 23, 2013

* Refactoring Target-related classes to improve support for additional language
  targets

February 22, 2013

* Do not allow raw newline characters in literals
* Pair and Triple are immutable; Triple is not a Pair

February 5, 2013

* Fix IntervalSet.add when multiple merges are required (fixes #153)

January 29, 2013

* don't call process() if args aren't specified (Dave Parfitt)

January 21, 2013 -- Release 4.0

* Updated PredictionContext Javadocs
* Updated Maven site documentation
* Minor tweaks in Java.stg

January 15, 2013

* Tweak error messages
* (Tool) Make TokenVocabParser fields `protected final`
* Fix generated escape sequences for literals containing backslashes

January 14, 2013

* Relax parser in favor of errors during semantic analysis
* Add error 145: lexer mode must contain at least one non-fragment rule
* Add error 146: non-fragment lexer rule can match the empty string

January 11, 2013

* Updated error 72, 76; added 73-74 and 136-143: detailed errors about name
  conflicts
* Report exact location for parameter/retval/local name conflicts
* Add error 144: multi-character literals are not allowed in lexer sets
* Error 134 now only applies to rule references in lexer sets
* Updated error messages (cleanup)
* Reduce size of _serializedATN by adding 2 to each element: new representation
  avoids embedded values 0 and 0xFFFF which are common and have multi-byte
  representations in Java's modified UTF-8

January 10, 2013

* Add error 135: cannot assign a value to list label: $label
  (fixes antlr/antlr4#128)

January 2, 2013

* Fix EOF handling (antlr/antlr4#110)
* Remove TREE_PARSER reference
* Additional validation checks in ATN deserialization
* Fix potential NPE in parser predicate evaluation
* Fix termination condition detection in full-context parsing

January 1, 2013

* Updated documentation
* Minor code cleanup
* Added the `-XdbgSTWait` command line option for the Tool
* Removed method override since bug was fixed in V3 runtime

December 31, 2012

* I altered Target.getTargetStringLiteralFromANTLRStringLiteral() so that
  it converts \uXXXX in an ANTLR string to \\uXXXX, thus, avoiding Java's
  conversion to a single character before compilation.

December 16, 2012

* Encapsulate some fields in ANTLRMessage
* Remove ErrorType.INVALID
* Update error/warning messages, show all v3 compatibility messages

December 12, 2012

* Use arrays instead of HashSet to save memory in SemanticContext.AND/OR
* Use arrays instead of HashSet to save memory in cached DFA
* Reduce single-operand SemanticContext.and/or operations

December 11, 2012

* Add -long-messages option; only show exceptions with errors when set
* "warning treated as error" is a one-off error
* Listen for issues reported by StringTemplate, report them as warnings
* Fix template issues
* GrammarASTWithOptions.getOptions never returns null
* Use EnumSet instead of HashSet
* Use new STGroup.GROUP_FILE_EXTENSION value

December 2, 2012

* Remove -Xverbose-dfa option
* Create the ParseTreeVisitor interface for all visitors, rename previous base
  visitor class to AbstractParseTreeVisitor

December 1, 2012

* escape [\n\r\t] in lexical error messages; e.g,:
  line 2:3 token recognition error at: '\t'
  line 2:4 token recognition error at: '\n'

* added error for bad sets in lexer; e.g.:
  lexer set element A is invalid (either rule ref or literal with > 1 char)
  some tests in TestSets appeared to allow ~('a'|B) but it was randomly working.
  ('a'|B) works, though doesn't collapse to a set.

* label+='foo' wasn't generating good code. It was generating token type as
  variable name. Now, I gen "s<ttype>" for implicit labels on string literals.

* tokens now have token and char source to draw from.

* remove -Xsave-lexer option; log file as implicit lexer AST.

November 30, 2012

* Maven updates (cleanup, unification, and specify Java 6 bootstrap classpath)

November 28, 2012

* Maven updates (uber-jar, manifest details)

November 27, 2012

* Maven updates (prepare for deploying to Sonatype OSS)
* Use efficient bitset tests instead of long chains of operator ==

November 26, 2012

* Maven updates (include sources and javadocs, fix warnings)
* Don't generate action methods for lexer rules not containing an action
* Generated action and sempred methods are private
* Remove unused / problematic methods:
** (unused) TerminalNodeImpl.isErrorNode
** (unused) RuleContext.conflictsWith, RuleContext.suffix.
** (problematic) RuleContext.hashCode, RuleContext.equals.

November 23, 2012

* Updated Maven build (added master POM, cleaned up module POMs)

November 22, 2012

* make sure left-recur rule translation uses token stream from correct imported file.
* actions like @after in imported rules caused inf loop.
* This misidentified scope lexer/parser: @lexer::members { } @parser::members { }

November 18, 2012

* fixed: undefined rule refs caused exception
* cleanup, rm dead etypes, add check for ids that cause code gen issues
* added notion of one-off error
* added check for v3 backward incompatibilities:
** tree grammars
** labels in lexer rules
** tokens {A;B;} syntax
** tokens {A='C';} syntax
** {...}?=> gate semantic predicates
** (...)=> syntactic predicates
* Detect EOF in lexer rule

November 17, 2012

* .tokens files goes in output dir like parser file.
* added check: action in lexer rules must be last element of outermost alt
* properly check for grammar/filename difference
* if labels, don't allow set collapse for
  a : A # X | B ;
* wasn't checking soon enough for rule redef; now it sets a dead flag in
  AST so no more walking dup.
  error(51): T.g:7:0: rule s redefinition (ignoring); previous at line 3

November 11, 2012

* Change version to 4.0b4 (btw, forgot to push 4.0b3 in build.properties when
  I made git tag 4.0b3...ooops).

November 4, 2012

* Kill box in tree dialog box makes dialog dispose of itself

October 29, 2012

* Sam fixes nongreedy more.
* -Werror added.
* Sam made speed improvement re preds in lexer.

October 20, 2012

* Merged Sam's fix for nongreedy lexer/parser. lots of unit tests. A fix in
  prediction ctx merge. https://github.com/parrt/antlr4/pull/99

October 14, 2012

* Rebuild how ANTLR detects SLL conflict and failover to full LL.  LL is
  a bit slower but correct now.  Added ability to ask for exact ambiguity
  detection.

October 8, 2012

* Fixed a bug where labeling the alternatives of the start rule caused
  a null pointer exception.

October 1, 2012 -- 4.0b2 release

September 30, 2012

* Fixed the unbuffered streams, which actually buffered everything
  up by mistake. tweaked a few comments.

* Added a getter to IntStream for the token factory

* Added -depend cmd-line option.

September 29, 2012

* no nongreedy or wildcard in parser.

September 28, 2012

* empty "tokens {}" is ok now.

September 22, 2012

* Rule exception handlers weren't passed to the generated code
* $ruleattribute.foo weren't handled properly
* Added -package option

September 18, 2012 -- 4.0b1 release
