<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-13495</id>
	<title>Nabble - java.net - javacc users</title>
	<updated>2009-11-18T05:56:38Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/java.net---javacc-users-f13495.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/java.net---javacc-users-f13495.html" />
	<subtitle type="html"></subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26408213</id>
	<title>Re: JavaCC questions :</title>
	<published>2009-11-18T05:56:38Z</published>
	<updated>2009-11-18T05:56:38Z</updated>
	<author>
		<name>Farrukh Najmi</name>
	</author>
	<content type="html">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;meta content=&quot;text/html;charset=ISO-8859-1&quot; http-equiv=&quot;Content-Type&quot;&gt;
&lt;/head&gt;
&lt;body bgcolor=&quot;#ffffff&quot; text=&quot;#000000&quot;&gt;
Andrew A wrote:
&lt;blockquote cite=&quot;mid:BLU143-W21A58FC6C76C798B77C32CC7A30@phx.gbl&quot; type=&quot;cite&quot;&gt;
  Hey
everyone, I am new to javaCC and have looked&amp;nbsp;into it and have some
questions if anyone would be so kind to help answer. I couldn't locate
the information in question myself.&lt;br&gt;
&amp;nbsp;&lt;br&gt;
1. Can the parser that javaCC creates be incorporated into a project as
a normal class. That way we can invoke the class without the main
method when necessary. I am abit confused as to why javaCC requires a
main, unless to demonstrate it working by itself.&lt;br&gt;
&lt;/blockquote&gt;
&lt;br&gt;
Yes it can. I use it without main method like a normal class routinely:&lt;br&gt;
&lt;br&gt;
See methods like the following in generated parser main class
MyParser.java (assuming parser is called MyParser):&lt;br&gt;
&lt;br&gt;
&amp;nbsp; /** Constructor with InputStream. */&lt;br&gt;
&amp;nbsp; public MyParser(java.io.InputStream stream) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this(stream, null);&lt;br&gt;
&amp;nbsp; }&lt;br&gt;
&amp;nbsp; /** Constructor with InputStream and supplied encoding */&lt;br&gt;
&amp;nbsp; public MyParser(java.io.InputStream stream, String encoding) {&lt;br&gt;
&amp;nbsp; ...&lt;br&gt;
&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
Create parser using above methods and then call the method
corresponding to your start production to do the parsing of the stream.&lt;br&gt;
&lt;br&gt;
My only issue is that needed a non-arg constructor and a set method to
set the stream. So I had to use some ugly kludges to do that.&lt;br&gt;
If any one know a decent way to address my need please share. Otherwise
I hope the dev team would consider this as as RFE.&lt;br&gt;
&lt;br&gt;
Thanks.&lt;br&gt;
&lt;blockquote cite=&quot;mid:BLU143-W21A58FC6C76C798B77C32CC7A30@phx.gbl&quot; type=&quot;cite&quot;&gt;&amp;nbsp;&lt;br&gt;
2. I would like to not only parse text, but either build an object or
add additional notes to the parsed text. JavaCC appears to be able to
do this, is there any good examples or tutorials that someone could
suggest related to this area.&lt;br&gt;
&lt;/blockquote&gt;
&lt;br&gt;
The jjtree program generates an Abstract SYntax Tree (AST) that can be
decorated with arbitrary info. I have not used it in a while but it was
not to hard to get that working based on available docs as I recall.
Perhaps someone more experienced can guide better on this.&lt;br&gt;
&lt;br&gt;
Best of luck.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;pre class=&quot;moz-signature&quot; cols=&quot;72&quot;&gt;-- 
Regards,
Farrukh

Web: &lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://www.wellfleetsoftware.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.wellfleetsoftware.com&lt;/a&gt;

&lt;/pre&gt;
&lt;/body&gt;
&lt;/html&gt;

---------------------------------------------------------------------
To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26408213&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26408213&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;

</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/JavaCC-questions-%3A-tp26407680p26408213.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26407680</id>
	<title>JavaCC questions :</title>
	<published>2009-11-18T01:55:02Z</published>
	<updated>2009-11-18T01:55:02Z</updated>
	<author>
		<name>Melanie_Green</name>
	</author>
	<content type="html">&lt;html&gt;
&lt;head&gt;

&lt;/head&gt;
&lt;body class='hmmessage'&gt;
Hey everyone, I am new to javaCC and have looked&amp;nbsp;into it and have some questions if anyone would be so kind to help answer. I couldn't locate the information in question myself.&lt;BR&gt;
&amp;nbsp;&lt;BR&gt;
1. Can the parser that javaCC creates be incorporated into a project as a normal class. That way we can invoke the class without the main method when necessary. I am abit confused as to why javaCC requires a main, unless to demonstrate it working by itself.&lt;BR&gt;
&amp;nbsp;&lt;BR&gt;
2. I would like to not only parse text, but either build an object or add additional notes to the parsed text. JavaCC appears to be able to do this, is there any good examples or tutorials that someone could suggest related to this area.&lt;BR&gt;
&amp;nbsp;&lt;BR&gt;
Thank You&lt;BR&gt; 		 	   		  &lt;br /&gt;&lt;hr /&gt;New Windows 7: Find the right PC for you. &lt;a href='http://windows.microsoft.com/shop' target='_new' rel=&quot;nofollow&quot;&gt;Learn more.&lt;/a&gt;&lt;/body&gt;
&lt;/html&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/JavaCC-questions-%3A-tp26407680p26407680.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26361104</id>
	<title>Re: We are trying to create an off-side rule parser, but have problems  with multiple UNINDENT.</title>
	<published>2009-11-15T09:13:15Z</published>
	<updated>2009-11-15T09:13:15Z</updated>
	<author>
		<name>Sreenivasa Viswanadha</name>
	</author>
	<content type="html">&lt;br&gt;I don't remember now why I did it, but I had to abandon this. So instead,
&lt;br&gt;we did it using semantic lookahead. Basically, just ignore all white space
&lt;br&gt;as you normally do, setTabSize(1) and then do something like the
&lt;br&gt;following.
&lt;br&gt;&lt;br&gt;Hope that helps,
&lt;br&gt;Sreeni.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;try
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; LOOKAHEAD({getToken(0).beginLine == getToken(1).beginLine})
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; stmt_list() /*&amp;lt;NEWLINE&amp;gt;*/ // multiple statements on the same line
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; |
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ indent = getToken(1).beginColumn; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LOOKAHEAD({ getToken(1).kind != EOF &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; indent == getToken(1).beginColumn })
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; statement()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;) +
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;finally
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; indent = oldIndent;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; We are trying to create an off-side rule parser that uses indentation
&lt;br&gt;&amp;gt; (whitespace) rather than braces to delimit blocks in the abstract syntax.
&lt;br&gt;&amp;gt; Ultimately, we'll simplify the concrete syntax to be more like
&lt;br&gt;&amp;gt; python/haskell, but right now we are using a concrete syntax similar to
&lt;br&gt;&amp;gt; that
&lt;br&gt;&amp;gt; of C, with the exception of INDENT and UNINDENT tokens to delimit blocks
&lt;br&gt;&amp;gt; rather than brace tokens.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; In the token manager declarations, we setup a stack to keep track of
&lt;br&gt;&amp;gt; indentation. &amp;nbsp;The stack stores the length of the whitespace comprising
&lt;br&gt;&amp;gt; indentation as ints, and corresponding peek, pop and push methods are
&lt;br&gt;&amp;gt; defined.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; We define a DEFAULT lexical state in which the lexar begins, and we also
&lt;br&gt;&amp;gt; switch back to the DEFAULT state from the IN_LINE state whenever we
&lt;br&gt;&amp;gt; encounter an end of line in the latter state. &amp;nbsp;In the DEFAULT state, we
&lt;br&gt;&amp;gt; skip
&lt;br&gt;&amp;gt; empty lines, and we use MORE to capture all the whitespace comprising the
&lt;br&gt;&amp;gt; indentation.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; After matching all the spaces or tabs in the current indentation, we have
&lt;br&gt;&amp;gt; an
&lt;br&gt;&amp;gt; action associated with an empty string match that determines if the
&lt;br&gt;&amp;gt; current
&lt;br&gt;&amp;gt; line is indented, unindented or the same indentation as the previous line.
&lt;br&gt;&amp;gt; We compare the length of the whitespace of the current line to the value
&lt;br&gt;&amp;gt; at
&lt;br&gt;&amp;gt; the top of the stack.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; If the length of the whitespace of the current line is greater than the
&lt;br&gt;&amp;gt; value on the top of the stack, then an indent occurred, and we push the
&lt;br&gt;&amp;gt; length on the stack, and we switch to the INDENTING lexar state. &amp;nbsp;In this
&lt;br&gt;&amp;gt; state, an empty string match causes the lexar to send an INDENT token to
&lt;br&gt;&amp;gt; the
&lt;br&gt;&amp;gt; parser, and this works in our tests.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; If the length of the whitespace of the current line is less than the value
&lt;br&gt;&amp;gt; on the top of the stack, then an unindent occurred, and we pop the stack
&lt;br&gt;&amp;gt; until the value on the top of the stack is the same as the length of the
&lt;br&gt;&amp;gt; current whitespace. &amp;nbsp;Each time we pop, our goal is to send an UNINDENT
&lt;br&gt;&amp;gt; token
&lt;br&gt;&amp;gt; to the parser, but we are presently unable to send more than one UNINDENT
&lt;br&gt;&amp;gt; token. &amp;nbsp;Strangely, an UNINDENT token is sent only after the last pop,
&lt;br&gt;&amp;gt; whereas it would seem that this would happen after the first pop.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The second problem is that the parser becomes stuck in an infinite loop of
&lt;br&gt;&amp;gt; empty string matches in this state. &amp;nbsp;This is also strange because the
&lt;br&gt;&amp;gt; UNINDENT token is only matched after the last pop, but also because after
&lt;br&gt;&amp;gt; the last pop, the length of the whitespace of the current line is equal to
&lt;br&gt;&amp;gt; the value on the top of the stack, so the lexar should break out of the
&lt;br&gt;&amp;gt; while loop in the action, and the last else clause in the action should
&lt;br&gt;&amp;gt; switch back to the IN_LINE lexar state.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -------------------------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Excerpt from Parser.jj:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; TOKEN_MGR_DECLS:
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; Integer[] init_array = new Integer[] {new Integer(0)};
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; java.util.ArrayList&amp;lt;Integer&amp;gt; stack =
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new
&lt;br&gt;&amp;gt; java.util.ArrayList&amp;lt;Integer&amp;gt;(java.util.Arrays.asList(init_array));
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; int peek() { return stack.get(stack.size() - 1); }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; int pop() { return stack.remove(stack.size() - 1); }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; void push(int i) { stack.add(i);}
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;DEFAULT&amp;gt;
&lt;br&gt;&amp;gt; SKIP:
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;quot;\r&amp;quot; // { System.out.print(&amp;quot;(DEFAULT STATE - SKIP: CR)&amp;quot;); }
&lt;br&gt;&amp;gt; &amp;nbsp; | &amp;quot;\n&amp;quot; // { System.out.print(&amp;quot;(DEFAULT STATE - SKIP: NL)&amp;quot;); }
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;DEFAULT&amp;gt;
&lt;br&gt;&amp;gt; MORE:
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;quot; &amp;quot; // { System.out.print(&amp;quot;(DEFAULT STATE - MORE: S)&amp;quot;); }
&lt;br&gt;&amp;gt; &amp;nbsp; | &amp;quot;\t&amp;quot; // { System.out.print(&amp;quot;(DEFAULT STATE - MORE: T)&amp;quot;); }
&lt;br&gt;&amp;gt; &amp;nbsp; | &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (image.length() &amp;gt; peek())
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; push(image.length());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.print(&amp;quot;(push &amp;quot; + stack + &amp;quot;)&amp;quot;);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SwitchTo(INDENTING);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else if (image.length() &amp;lt; peek())
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (image.length() &amp;lt; peek())
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pop();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.print(&amp;quot;(pop &amp;quot; + stack +&amp;quot;)&amp;quot;);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SwitchTo(UNINDENTING);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (image.length() != peek())
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //throw new TokenMgrError(&amp;quot;Improper unindent.&amp;quot;,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //TokenMgrError.LEXICAL_ERROR);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.print(&amp;quot;Error: Improper unindent.&amp;quot;);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SwitchTo(IN_LINE);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;INDENTING&amp;gt;
&lt;br&gt;&amp;gt; TOKEN:
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;lt;INDENT: &amp;quot;&amp;quot;&amp;gt; { System.out.print(&amp;quot;&amp;lt;INDENT&amp;gt;&amp;quot;); } : IN_LINE
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;UNINDENTING&amp;gt;
&lt;br&gt;&amp;gt; TOKEN:
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;lt;UNINDENT: &amp;quot;&amp;quot;&amp;gt; { System.out.print(&amp;quot;&amp;lt;UNINDENT&amp;gt;&amp;quot;); } : DEFAULT
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;IN_LINE&amp;gt;
&lt;br&gt;&amp;gt; SKIP:
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; | &amp;quot; &amp;quot;
&lt;br&gt;&amp;gt; &amp;nbsp; | &amp;quot;\t&amp;quot;
&lt;br&gt;&amp;gt; &amp;nbsp; | &amp;quot;\r&amp;quot;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;IN_LINE&amp;gt;
&lt;br&gt;&amp;gt; TOKEN:
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; /* ALL THE REGULAR TOKENS */
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; | &amp;lt;EOL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;\n&amp;quot;&amp;gt; { System.out.print(&amp;quot;&amp;lt;EOL&amp;gt;\n&amp;quot;); } : DEFAULT
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -------------------------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Sample input:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; int main ()
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; if (true)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 1;
&lt;br&gt;&amp;gt; int i;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -------------------------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Sample output:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; bash-3.2$ ant &amp;&amp; java -cp bin proj.Hmm test1.py
&lt;br&gt;&amp;gt; Buildfile: build.xml
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; printJavaVersion:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;[echo] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;YOU ARE USING JAVA 1.6.0_11
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;[echo]
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;[echo] &amp;nbsp; Java located at: /lusr/opt/jdk1.6.0_11/jre
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; all:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;[javacc] Java Compiler Compiler Version 4.1 (Parser Generator)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;[javacc] (type &amp;quot;javacc&amp;quot; with no arguments for help)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;[javacc] Reading from file
&lt;br&gt;&amp;gt; /v/filer4b/v38q001/cjh/cs345/project/proj/src/proj/parser/Parser.jj . . .
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;[javacc] Warning: Line 43, Column 5: Regular expression can be matched
&lt;br&gt;&amp;gt; by
&lt;br&gt;&amp;gt; the empty string (&amp;quot;&amp;quot;) in lexical state DEFAULT. This can result in an
&lt;br&gt;&amp;gt; endless loop of empty string matches.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;[javacc] Warning: Line 86, Column 5: Regular expression for UNINDENT
&lt;br&gt;&amp;gt; can
&lt;br&gt;&amp;gt; be matched by the empty string (&amp;quot;&amp;quot;) in lexical state UNINDENTING. This
&lt;br&gt;&amp;gt; regular expression along with the regular expressions at line 43, column 5
&lt;br&gt;&amp;gt; forms the cycle
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;[javacc] &amp;nbsp; &amp;nbsp;UNINDENTING--&amp;gt;DEFAULT--&amp;gt;DEFAULT
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;[javacc] containing regular expressions with empty matches. This can
&lt;br&gt;&amp;gt; result in an endless loop of empty string matches.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;[javacc] File &amp;quot;TokenMgrError.java&amp;quot; is being rebuilt.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;[javacc] File &amp;quot;ParseException.java&amp;quot; is being rebuilt.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;[javacc] File &amp;quot;Token.java&amp;quot; is being rebuilt.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;[javacc] File &amp;quot;SimpleCharStream.java&amp;quot; is being rebuilt.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;[javacc] Parser generated with 0 errors and 2 warnings.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; [javac] Compiling 7 source files to
&lt;br&gt;&amp;gt; /v/filer4b/v38q001/cjh/cs345/project/proj/bin
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; [javac] Note:
&lt;br&gt;&amp;gt; /v/filer4b/v38q001/cjh/cs345/project/proj/src/proj/parser/Parser.java uses
&lt;br&gt;&amp;gt; unchecked or unsafe operations.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; [javac] Note: Recompile with -Xlint:unchecked for details.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; BUILD SUCCESSFUL
&lt;br&gt;&amp;gt; Total time: 3 seconds
&lt;br&gt;&amp;gt; (program - start)&amp;lt;INT&amp;gt;&amp;lt;IDENTIFIER&amp;gt;&amp;lt;LPAREN&amp;gt;&amp;lt;RPAREN&amp;gt;&amp;lt;EOL&amp;gt;
&lt;br&gt;&amp;gt; (block - start)(push [0, 4])&amp;lt;INDENT&amp;gt;&amp;lt;IF&amp;gt;&amp;lt;LPAREN&amp;gt;&amp;lt;RPAREN&amp;gt;&amp;lt;EOL&amp;gt;
&lt;br&gt;&amp;gt; (block - start)(push [0, 4, 8])&amp;lt;INDENT&amp;gt;&amp;lt;RETURN&amp;gt;&amp;lt;INTEGER&amp;gt;&amp;lt;SEMI&amp;gt;(return -
&lt;br&gt;&amp;gt; end)&amp;lt;EOL&amp;gt;
&lt;br&gt;&amp;gt; (pop [0, 4])(pop [0])&amp;lt;UNINDENT&amp;gt;(block - end)Exception in thread &amp;quot;main&amp;quot;
&lt;br&gt;&amp;gt; proj.parser.TokenMgrError: Error: Bailing out of infinite loop caused by
&lt;br&gt;&amp;gt; repeated empty string matches at line 4, column 1.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at proj.parser.ParserTokenManager.MoreLexicalActions(Unknown
&lt;br&gt;&amp;gt; Source)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at proj.parser.ParserTokenManager.getNextToken(Unknown Source)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at proj.parser.Parser.jj_ntk(Unknown Source)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at proj.parser.Parser.ifStatement(Unknown Source)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at proj.parser.Parser.statement(Unknown Source)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at proj.parser.Parser.statements(Unknown Source)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at proj.parser.Parser.block(Unknown Source)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at proj.parser.Parser.restOfFunction(Unknown Source)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at proj.parser.Parser.Program(Unknown Source)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at proj.Hmm.main(Unknown Source)
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26361104&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26361104&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/We-are-trying-to-create-an-off-side-rule-parser%2C-but-have-problems--with-multiple-UNINDENT.-tp26355155p26361104.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26355155</id>
	<title>We are trying to create an off-side rule parser, but have problems  with multiple UNINDENT.</title>
	<published>2009-11-14T15:30:22Z</published>
	<updated>2009-11-14T15:30:22Z</updated>
	<author>
		<name>chris heathcott</name>
	</author>
	<content type="html">We are trying to create an off-side rule parser that uses indentation
(whitespace) rather than braces to delimit blocks in the abstract
syntax.  Ultimately, we&amp;#39;ll simplify the concrete syntax to be more like
python/haskell, but right now we are using a concrete syntax similar to that of C, with the
exception of INDENT and UNINDENT tokens to delimit blocks rather than
brace tokens. &lt;br&gt;
&lt;br&gt;In the token manager declarations, we setup a stack to keep track
of indentation.  The stack stores the length of the whitespace
comprising indentation as ints, and corresponding peek, pop and push
methods are defined.&lt;br&gt;
&lt;br&gt;We define a DEFAULT lexical state in which the lexar begins, and we
also switch back to the DEFAULT state from the IN_LINE state whenever
we encounter an end of line in the latter state.  In the DEFAULT state,
we skip empty lines, and we use MORE to capture all the whitespace
comprising the indentation.&lt;br&gt;
&lt;br&gt;After matching all the spaces or tabs in the current indentation,
we have an action associated with an empty string match that determines
if the current line is indented, unindented or the same indentation as
the previous line.  We compare the length of the whitespace of the
current line to the value at the top of the stack.&lt;br&gt;
 &lt;br&gt;If the
length of the whitespace of the current line is greater than the value
on the top of the stack, then an indent occurred, and we push the
length on the stack, and we switch to the INDENTING lexar state.  In
this state, an empty string match causes the lexar to send an INDENT
token to the parser, and this works in our tests.&lt;br&gt;
&lt;br&gt;If the length of the whitespace of the current line is less than
the value on the top of the stack, then an unindent occurred, and we
pop the stack until the value on the top of the stack is the same as
the length of the current whitespace.  Each time we pop, our goal is to
send an UNINDENT token to the parser, but we are presently unable to
send more than one UNINDENT token.  Strangely, an UNINDENT token is
sent only after the last pop, whereas it would seem that this would
happen after the first pop.&lt;br&gt;
&lt;br&gt;The second problem is that the parser becomes stuck in an infinite
loop of empty string matches in this state.  This is also strange
because the UNINDENT token is only matched after the last pop, but also
because after the last pop, the length of the whitespace of the current
line is equal to the value on the top of the stack, so the lexar should
break out of the while loop in the action, and the last else clause in
the action should switch back to the IN_LINE lexar state.&lt;br&gt;
&lt;br&gt;-------------------------------------------------------------------------------&lt;br&gt;&lt;div id=&quot;:35&quot; class=&quot;ii gt&quot;&gt;&lt;br&gt;Excerpt from Parser.jj:&lt;br&gt;&lt;br&gt;TOKEN_MGR_DECLS:&lt;br&gt;{&lt;br&gt;    Integer[] init_array = new Integer[] {new Integer(0)};&lt;br&gt;
    java.util.ArrayList&amp;lt;Integer&amp;gt; stack =&lt;br&gt;
        new java.util.ArrayList&amp;lt;Integer&amp;gt;(java.util.Arrays.asList(init_array));&lt;br&gt;    int peek() { return stack.get(stack.size() - 1); }&lt;br&gt;    int pop() { return stack.remove(stack.size() - 1); }&lt;br&gt;    void push(int i) { stack.add(i);}&lt;br&gt;

}&lt;br&gt;&lt;br&gt;&amp;lt;DEFAULT&amp;gt;&lt;br&gt;SKIP:&lt;br&gt;{&lt;br&gt;    &amp;quot;\r&amp;quot; // { System.out.print(&amp;quot;(DEFAULT STATE - SKIP: CR)&amp;quot;); }&lt;br&gt;  | &amp;quot;\n&amp;quot; // { System.out.print(&amp;quot;(DEFAULT STATE - SKIP: NL)&amp;quot;); }&lt;br&gt;}&lt;br&gt;

&lt;br&gt;&amp;lt;DEFAULT&amp;gt;&lt;br&gt;MORE:&lt;br&gt;{&lt;br&gt;    &amp;quot; &amp;quot; // { System.out.print(&amp;quot;(DEFAULT STATE - MORE: S)&amp;quot;); }&lt;br&gt;  | &amp;quot;\t&amp;quot; // { System.out.print(&amp;quot;(DEFAULT STATE - MORE: T)&amp;quot;); }&lt;br&gt;  | &amp;quot;&amp;quot;&lt;br&gt;

    {&lt;br&gt;        if (image.length() &amp;gt; peek())&lt;br&gt;        {&lt;br&gt;            push(image.length());&lt;br&gt;            System.out.print(&amp;quot;(push &amp;quot; + stack + &amp;quot;)&amp;quot;);&lt;br&gt;            SwitchTo(INDENTING);&lt;br&gt;        }&lt;br&gt;

        else if (image.length() &amp;lt; peek())&lt;br&gt;        {&lt;br&gt;            while (image.length() &amp;lt; peek())&lt;br&gt;            {&lt;br&gt;                pop();&lt;br&gt;                System.out.print(&amp;quot;(pop &amp;quot; + stack +&amp;quot;)&amp;quot;);&lt;br&gt;

                SwitchTo(UNINDENTING);&lt;br&gt;            }&lt;br&gt;            if (image.length() != peek())&lt;br&gt;            {&lt;br&gt;                //throw new TokenMgrError(&amp;quot;Improper unindent.&amp;quot;,&lt;br&gt;                //TokenMgrError.LEXICAL_ERROR);&lt;br&gt;

                System.out.print(&amp;quot;Error: Improper unindent.&amp;quot;);&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;        else&lt;br&gt;        {&lt;br&gt;            SwitchTo(IN_LINE);&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;br&gt;&amp;lt;INDENTING&amp;gt;&lt;br&gt;

TOKEN:&lt;br&gt;{&lt;br&gt;    &amp;lt;INDENT: &amp;quot;&amp;quot;&amp;gt; { System.out.print(&amp;quot;&amp;lt;INDENT&amp;gt;&amp;quot;); } : IN_LINE&lt;br&gt;}&lt;br&gt;&lt;br&gt;&amp;lt;UNINDENTING&amp;gt;&lt;br&gt;TOKEN:&lt;br&gt;{&lt;br&gt;    &amp;lt;UNINDENT: &amp;quot;&amp;quot;&amp;gt; { System.out.print(&amp;quot;&amp;lt;UNINDENT&amp;gt;&amp;quot;); } : DEFAULT&lt;br&gt;

}&lt;br&gt;&lt;br&gt;&amp;lt;IN_LINE&amp;gt;&lt;br&gt;SKIP:&lt;br&gt;{&lt;br&gt;  | &amp;quot; &amp;quot;&lt;br&gt;  | &amp;quot;\t&amp;quot;&lt;br&gt;  | &amp;quot;\r&amp;quot;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&amp;lt;IN_LINE&amp;gt;&lt;br&gt;TOKEN:&lt;br&gt;{&lt;br&gt;  &lt;br&gt;  /* ALL THE REGULAR TOKENS */&lt;br&gt;&lt;br&gt;  | &amp;lt;EOL:       &amp;quot;\n&amp;quot;&amp;gt; { System.out.print(&amp;quot;&amp;lt;EOL&amp;gt;\n&amp;quot;); } : DEFAULT&lt;br&gt;

}&lt;br&gt;&lt;br&gt;-------------------------------------------------------------------------------&lt;br&gt;&lt;br&gt;Sample input:&lt;br&gt;&lt;br&gt;int main ()&lt;br&gt;    if (true)&lt;br&gt;        return 1;&lt;br&gt;int i;&lt;br&gt;&lt;br&gt;-------------------------------------------------------------------------------&lt;br&gt;

&lt;br&gt;Sample output:&lt;br&gt;&lt;br&gt;bash-3.2$ ant &amp;amp;&amp;amp; java -cp bin proj.Hmm test1.py&lt;br&gt;Buildfile: build.xml&lt;br&gt;&lt;br&gt;printJavaVersion:&lt;br&gt;     [echo]        YOU ARE USING JAVA 1.6.0_11&lt;br&gt;     [echo] &lt;br&gt;     [echo]   Java located at: /lusr/opt/jdk1.6.0_11/jre&lt;br&gt;

&lt;br&gt;all:&lt;br&gt;   [javacc] Java Compiler Compiler Version 4.1 (Parser Generator)&lt;br&gt;   [javacc] (type &amp;quot;javacc&amp;quot; with no arguments for help)&lt;br&gt;   [javacc] Reading from file /v/filer4b/v38q001/cjh/cs345/project/proj/src/proj/parser/Parser.jj . . .&lt;br&gt;

   [javacc] Warning: Line 43, Column 5: Regular expression can be
matched by the empty string (&amp;quot;&amp;quot;) in lexical state DEFAULT. This can
result in an endless loop of empty string matches.&lt;br&gt;  
[javacc] Warning: Line 86, Column 5: Regular expression for UNINDENT
can be matched by the empty string (&amp;quot;&amp;quot;) in lexical state UNINDENTING.
This regular expression along with the regular expressions at line 43,
column 5 forms the cycle &lt;br&gt;
   [javacc]    UNINDENTING--&amp;gt;DEFAULT--&amp;gt;DEFAULT&lt;br&gt;   [javacc] containing regular expressions with empty matches. This can result in an endless loop of empty string matches.&lt;br&gt;   [javacc] File &amp;quot;TokenMgrError.java&amp;quot; is being rebuilt.&lt;br&gt;

   [javacc] File &amp;quot;ParseException.java&amp;quot; is being rebuilt.&lt;br&gt;   [javacc] File &amp;quot;Token.java&amp;quot; is being rebuilt.&lt;br&gt;   [javacc] File &amp;quot;SimpleCharStream.java&amp;quot; is being rebuilt.&lt;br&gt;   [javacc] Parser generated with 0 errors and 2 warnings.&lt;br&gt;

    [javac] Compiling 7 source files to /v/filer4b/v38q001/cjh/cs345/project/proj/bin&lt;br&gt;    [javac] Note: /v/filer4b/v38q001/cjh/cs345/project/proj/src/proj/parser/Parser.java uses unchecked or unsafe operations.&lt;br&gt;    [javac] Note: Recompile with -Xlint:unchecked for details.&lt;br&gt;

&lt;br&gt;BUILD SUCCESSFUL&lt;br&gt;Total time: 3 seconds&lt;br&gt;(program - start)&amp;lt;INT&amp;gt;&amp;lt;IDENTIFIER&amp;gt;&amp;lt;LPAREN&amp;gt;&amp;lt;RPAREN&amp;gt;&amp;lt;EOL&amp;gt;&lt;br&gt;(block - start)(push [0, 4])&amp;lt;INDENT&amp;gt;&amp;lt;IF&amp;gt;&amp;lt;LPAREN&amp;gt;&amp;lt;RPAREN&amp;gt;&amp;lt;EOL&amp;gt;&lt;br&gt;

(block - start)(push [0, 4, 8])&amp;lt;INDENT&amp;gt;&amp;lt;RETURN&amp;gt;&amp;lt;INTEGER&amp;gt;&amp;lt;SEMI&amp;gt;(return - end)&amp;lt;EOL&amp;gt;&lt;br&gt;(pop
[0, 4])(pop [0])&amp;lt;UNINDENT&amp;gt;(block - end)Exception in thread &amp;quot;main&amp;quot;
proj.parser.TokenMgrError: Error: Bailing out of infinite loop caused
by repeated empty string matches at line 4, column 1.&lt;br&gt;
        at proj.parser.ParserTokenManager.MoreLexicalActions(Unknown Source)&lt;br&gt;        at proj.parser.ParserTokenManager.getNextToken(Unknown Source)&lt;br&gt;        at proj.parser.Parser.jj_ntk(Unknown Source)&lt;br&gt;        at proj.parser.Parser.ifStatement(Unknown Source)&lt;br&gt;

        at proj.parser.Parser.statement(Unknown Source)&lt;br&gt;        at proj.parser.Parser.statements(Unknown Source)&lt;br&gt;        at proj.parser.Parser.block(Unknown Source)&lt;br&gt;        at proj.parser.Parser.restOfFunction(Unknown Source)&lt;br&gt;

        at proj.parser.Parser.Program(Unknown Source)&lt;br&gt;        at proj.Hmm.main(Unknown Source)&lt;br&gt;&lt;/div&gt;
</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/We-are-trying-to-create-an-off-side-rule-parser%2C-but-have-problems--with-multiple-UNINDENT.-tp26355155p26355155.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26295286</id>
	<title>Re: Use Longs for Line Numbers</title>
	<published>2009-11-10T18:57:07Z</published>
	<updated>2009-11-10T18:57:07Z</updated>
	<author>
		<name>Tom Copeland</name>
	</author>
	<content type="html">&lt;br&gt;On Nov 9, 2009, at 3:46 PM, &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26295286&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sreeni@...&lt;/a&gt; wrote:
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Yes, we should fix it. But for now, you can simply edit the generated
&lt;br&gt;&amp;gt; files - Token.java and SimpleCharStream.java to make the line numbers
&lt;br&gt;&amp;gt; long. There might be some issues with error reporting, but it should work.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Tom, I'm not sure I understand what you are saying. The line number stuff
&lt;br&gt;&amp;gt; is rather straightforward. It's used purely for reporting. It doesn't
&lt;br&gt;&amp;gt; affect the generated code at all.
&lt;br&gt;&lt;br&gt;Hm, maybe I misunderstood... I was thinking that Kurt was saying that there were more than Integer.MAX_INT tokens... so that all those int[] arrays of tokens and such would need to be long[] instead. &amp;nbsp;But maybe I'm misrepresenting his question...
&lt;br&gt;&lt;br&gt;Yours,
&lt;br&gt;&lt;br&gt;Tom
&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26295286&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26295286&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Use-Longs-for-Line-Numbers-tp25778044p26295286.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26273407</id>
	<title>Re: Use Longs for Line Numbers</title>
	<published>2009-11-09T12:46:22Z</published>
	<updated>2009-11-09T12:46:22Z</updated>
	<author>
		<name>Sreenivasa Viswanadha</name>
	</author>
	<content type="html">&lt;br&gt;Yes, we should fix it. But for now, you can simply edit the generated
&lt;br&gt;files - Token.java and SimpleCharStream.java to make the line numbers
&lt;br&gt;long. There might be some issues with error reporting, but it should work.
&lt;br&gt;&lt;br&gt;Tom, I'm not sure I understand what you are saying. The line number stuff
&lt;br&gt;is rather straightforward. It's used purely for reporting. It doesn't
&lt;br&gt;affect the generated code at all.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Oct 6, 2009, at 6:57 PM, Kurt Guenther wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I'm currently parsing an 8 GB file with 241,000,000 lines which is
&lt;br&gt;&amp;gt;&amp;gt; about 12.5% &amp;nbsp;of the 2^31 -1 max value of int. &amp;nbsp; I'm supposed to
&lt;br&gt;&amp;gt;&amp;gt; support files up to 200 GB, so is there a way to generate the token
&lt;br&gt;&amp;gt;&amp;gt; manager with longs instead of ints?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I keep thinking about this one. &amp;nbsp;We can't do just a search and replace
&lt;br&gt;&amp;gt; on the generated code since other stuff uses ints as well - e.g., the
&lt;br&gt;&amp;gt; lexical states are contained in an array of integers. &amp;nbsp;I think it'd
&lt;br&gt;&amp;gt; also affect the parser generating code, since we'd need to make jj_gen
&lt;br&gt;&amp;gt; and jj_ntk and others into longs as well.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; At the end of the day, it might be easier to preprocess your input
&lt;br&gt;&amp;gt; data to chunk it into smaller files.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Yours,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Tom
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26273407&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26273407&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26273407&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26273407&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Use-Longs-for-Line-Numbers-tp25778044p26273407.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26268776</id>
	<title>Re: Dynamic tokenizing</title>
	<published>2009-11-09T07:56:47Z</published>
	<updated>2009-11-09T07:56:47Z</updated>
	<author>
		<name>Bill Fenlason-2</name>
	</author>
	<content type="html">Can't you just use a symbol table? &amp;nbsp;Macro processors often do this kind 
&lt;br&gt;of thing. Another similar example is &amp;quot;typedef&amp;quot; in C. 
&lt;br&gt;&lt;br&gt;I haven't used COMMON_TOKEN_ACTION since I use USER_TOKEN_MANAGER, but I 
&lt;br&gt;would think that you can update a symbol table as the &amp;quot;UserKeywords&amp;quot; 
&lt;br&gt;statement is parsed. &amp;nbsp;Then in the common action code you can check 
&lt;br&gt;generic word tokens in the symbol table, and if found, change the &amp;quot;kind&amp;quot; 
&lt;br&gt;field in the token to a different token type (e.g. USER_KW). &amp;nbsp;The actual 
&lt;br&gt;keyword text is in the &amp;quot;image&amp;quot; field. &amp;nbsp;In the grammar you can specify 
&lt;br&gt;the &amp;lt;USER_KW&amp;gt; &amp;quot;{&amp;quot; ... &amp;quot;}&amp;quot; sequence anywhere it may occur and process it 
&lt;br&gt;as necessary as it is parsed. 
&lt;br&gt;&lt;br&gt;Depending on what you are doing with the content within the braces, you 
&lt;br&gt;may have to do some additional processing in the common action code. &amp;nbsp;If 
&lt;br&gt;you were trying to do text substitution or macro processing (i.e. 
&lt;br&gt;replacing the USER_KW {...} sequence with a different string of tokens 
&lt;br&gt;to be parsed), that would be a whole different ballgame.
&lt;br&gt;&lt;br&gt;Bill
&lt;br&gt;&lt;br&gt;Bachelier, Georges wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi!
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I have been searching a solution for three days to the following problem:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I am building a JavaCC parser for a language having an original feature: the language allows you to define user key words which may be found anywhere in the input file after their declaration.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; User key words are declared with the following statement : UserKeywords &amp;lt;my_user_kw1&amp;gt; ... &amp;lt;my_user_kwn&amp;gt; ;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Once keywords have been declared, they may be used like this :
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;my_user_kw1&amp;gt; {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;any_sequence_of_characters&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;my_user_kwn&amp;gt; {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;any_sequence_of_characters&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The sequences of characters do not matter; we do not use them, but they are surrounded by braces.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I have written a parser production in order to get the user key words and I have tried to play with the tokenizer CommonTokenAction function, but without success.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Could someone help me on this issue, please?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Georges 
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;/div&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26268776&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26268776&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dynamic-tokenizing-tp26238194p26268776.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26267178</id>
	<title>Re: Use Longs for Line Numbers</title>
	<published>2009-11-09T06:19:53Z</published>
	<updated>2009-11-09T06:19:53Z</updated>
	<author>
		<name>Tom Copeland</name>
	</author>
	<content type="html">&lt;br&gt;On Oct 6, 2009, at 6:57 PM, Kurt Guenther wrote:
&lt;br&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I'm currently parsing an 8 GB file with 241,000,000 lines which is &amp;nbsp;
&lt;br&gt;&amp;gt; about 12.5% &amp;nbsp;of the 2^31 -1 max value of int. &amp;nbsp; I'm supposed to &amp;nbsp;
&lt;br&gt;&amp;gt; support files up to 200 GB, so is there a way to generate the token &amp;nbsp;
&lt;br&gt;&amp;gt; manager with longs instead of ints?
&lt;br&gt;&lt;br&gt;I keep thinking about this one. &amp;nbsp;We can't do just a search and replace &amp;nbsp;
&lt;br&gt;on the generated code since other stuff uses ints as well - e.g., the &amp;nbsp;
&lt;br&gt;lexical states are contained in an array of integers. &amp;nbsp;I think it'd &amp;nbsp;
&lt;br&gt;also affect the parser generating code, since we'd need to make jj_gen &amp;nbsp;
&lt;br&gt;and jj_ntk and others into longs as well.
&lt;br&gt;&lt;br&gt;At the end of the day, it might be easier to preprocess your input &amp;nbsp;
&lt;br&gt;data to chunk it into smaller files.
&lt;br&gt;&lt;br&gt;Yours,
&lt;br&gt;&lt;br&gt;Tom
&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26267178&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26267178&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Use-Longs-for-Line-Numbers-tp25778044p26267178.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26267024</id>
	<title>Re: JavaCC Version 5.0 released.</title>
	<published>2009-11-09T06:09:45Z</published>
	<updated>2009-11-09T06:09:45Z</updated>
	<author>
		<name>Tom Copeland</name>
	</author>
	<content type="html">That's an interesting idea.... you might want to file an issue here:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;https://javacc.dev.java.net/servlets/ProjectIssues&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://javacc.dev.java.net/servlets/ProjectIssues&lt;/a&gt;&lt;br&gt;&lt;br&gt;Just to keep it on the radar.
&lt;br&gt;&lt;br&gt;Yours,
&lt;br&gt;&lt;br&gt;tom
&lt;br&gt;&lt;br&gt;On Sep 1, 2009, at 5:02 AM, Artur Rataj wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hello.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; What about a way to ensure that, at certain points of the grammar, &amp;nbsp;
&lt;br&gt;&amp;gt; backing up a single token is safe and, that a next token exists?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I use the former for error recovery, but I do not know if it won't &amp;nbsp;
&lt;br&gt;&amp;gt; cause weird lexer/parser behavior in some cases.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I can ensure the latter by adding artificial choices to the grammar, &amp;nbsp;
&lt;br&gt;&amp;gt; but I still do not know if it works in all cases.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; As of me, such features would add a bit of flexibility that one has &amp;nbsp;
&lt;br&gt;&amp;gt; with hand--made parsers.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; But, perhaps there is virtually no demand for the features among &amp;nbsp;
&lt;br&gt;&amp;gt; JavaCC users.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Best regards,
&lt;br&gt;&amp;gt; Artur
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26267024&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26267024&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/JavaCC-Version-5.0-released.-tp25231778p26267024.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26262700</id>
	<title>RE: Dynamic tokenizing</title>
	<published>2009-11-09T00:25:59Z</published>
	<updated>2009-11-09T00:25:59Z</updated>
	<author>
		<name>Mazas Marc</name>
	</author>
	<content type="html">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;&gt;
&lt;HTML xmlns=&quot;http://www.w3.org/TR/REC-html40&quot; xmlns:o=&quot;urn:schemas-microsoft-com:office:office&quot; xmlns:w=&quot;urn:schemas-microsoft-com:office:word&quot;&gt;&lt;HEAD&gt;
&lt;META http-equiv=Content-Type content=&quot;text/html; charset=iso-8859-1&quot;&gt;
&lt;META content=&quot;MSHTML 6.00.6000.16825&quot; name=GENERATOR&gt;

&lt;/HEAD&gt;
&lt;BODY lang=EN-US vLink=purple link=blue&gt;
&lt;DIV dir=ltr align=left&gt;&lt;SPAN class=094012108-09112009&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;I do not believe you can do dynamic tokenizing directly in 
JavaCC.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV dir=ltr align=left&gt;&lt;SPAN class=094012108-09112009&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV dir=ltr align=left&gt;&lt;SPAN class=094012108-09112009&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;I would think about &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=094012108-09112009&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;writing a first 
parser that recognizes your UserKeywords syntax, and in the corresponding 
production a) generates a second parser (through println() statements, or a 
through a template engine) which will contain all the keywords token 
definitions, b) compile it, and c) execute it on the remaining of the input 
file.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV dir=ltr align=left&gt;&lt;SPAN class=094012108-09112009&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV dir=ltr align=left&gt;&lt;SPAN class=094012108-09112009&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;Marc&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&lt;/FONT&gt;&lt;BR&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
  &lt;DIV class=OutlookMessageHeader lang=fr dir=ltr align=left&gt;
  &lt;HR tabIndex=-1&gt;
  &lt;FONT face=Tahoma size=2&gt;&lt;B&gt;De&amp;nbsp;:&lt;/B&gt; Bachelier, Georges 
  [mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26262700&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;georges.bachelier@...&lt;/a&gt;] &lt;BR&gt;&lt;B&gt;Envoyé&amp;nbsp;:&lt;/B&gt; vendredi 6 
  novembre 2009 20:14&lt;BR&gt;&lt;B&gt;À&amp;nbsp;:&lt;/B&gt; 
  &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26262700&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users@...&lt;/a&gt;&lt;BR&gt;&lt;B&gt;Objet&amp;nbsp;:&lt;/B&gt; [JavaCC] Dynamic 
  tokenizing&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/DIV&gt;
  &lt;DIV&gt;&lt;/DIV&gt;
  &lt;DIV class=Section1&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;Hi!&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;I have been searching a solution 
  for three days to the following problem:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;I am building a JavaCC parser for 
  a language having an original feature: the language allows you to define user 
  key words which may be found anywhere in the input file after their 
  declaration.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;User key words are declared with 
  the following statement : UserKeywords &amp;lt;my_user_kw1&amp;gt;  
  &amp;lt;my_user_kwn&amp;gt; ;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;Once keywords have been declared, 
  they may be used like this :&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;&amp;lt;my_user_kw1&amp;gt; 
  {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;&amp;nbsp;&amp;nbsp; 
  &amp;lt;any_sequence_of_characters&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;&amp;lt;my_user_kwn&amp;gt; 
  {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;&amp;nbsp;&amp;nbsp; 
  &amp;lt;any_sequence_of_characters&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;The sequences of characters do not 
  matter; we do not use them, but they are surrounded by 
  braces.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;I have written a parser production 
  in order to get the user key words and I have tried to play with the tokenizer 
  &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=&quot;Courier New&quot; color=black size=1&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; BACKGROUND: lime; COLOR: black; FONT-FAMILY: 'Courier New'&quot;&gt;CommonTokenAction&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=&quot;Courier New&quot; color=black size=1&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Courier New'&quot;&gt; function, 
  but without success.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;Could someone help me on this 
  issue, please?&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
  &lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial&quot;&gt;Georges 
  &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;
</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dynamic-tokenizing-tp26238194p26262700.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26251905</id>
	<title>Re: (jjtree) Problem with TRACK_TOKENS - firstToken is  wrong</title>
	<published>2009-11-08T01:08:06Z</published>
	<updated>2009-11-08T01:08:06Z</updated>
	<author>
		<name>Carsten Lohmann</name>
	</author>
	<content type="html">Hi Paul,
&lt;br&gt;&lt;br&gt;I created issue 232 for it
&lt;br&gt;&lt;a href=&quot;https://javacc.dev.java.net/issues/show_bug.cgi?id=232&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://javacc.dev.java.net/issues/show_bug.cgi?id=232&lt;/a&gt;&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;Carsten
&lt;br&gt;&lt;br&gt;Paul Cager wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I have issues concerning TRACK_TOKENS in jjtree as it sets the wrong
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;firstToken&amp;quot; on some nodes in my case.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; .....
&lt;br&gt;&amp;gt;&amp;gt; Is this all a problem with the grammar or a bug in JJTree?
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; TIA
&lt;br&gt;&amp;gt;&amp;gt; Carsten
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Hi Carsten,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; That sounds like a bug in jjtree (I've not checked the details, but using
&lt;br&gt;&amp;gt; getToken(1) doesn't sound right).
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Would you mind creating an issue
&lt;br&gt;&amp;gt; (&lt;a href=&quot;https://javacc.dev.java.net/servlets/ProjectIssues&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://javacc.dev.java.net/servlets/ProjectIssues&lt;/a&gt;) so that we remember
&lt;br&gt;&amp;gt; to fix it in the next release?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Cheers.
&lt;br&gt;&amp;gt; Paul
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26251905&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26251905&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26251905&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26251905&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/%28jjtree%29-Problem-with-TRACK_TOKENS---firstToken-is-wrong-tp25841495p26251905.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26238408</id>
	<title>Re: Dynamic tokenizing</title>
	<published>2009-11-06T12:55:05Z</published>
	<updated>2009-11-06T12:55:05Z</updated>
	<author>
		<name>Farrukh Najmi</name>
	</author>
	<content type="html">&lt;br&gt;This sounds doable. You can probably use LOOKAHEAD with a function call 
&lt;br&gt;as parameter instead of a constant value.
&lt;br&gt;See an example here:
&lt;br&gt;&lt;br&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/Problem:-semantic-lookahead-calling-boolean-functions-td23087841.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://old.nabble.com/Problem:-semantic-lookahead-calling-boolean-functions-td23087841.html&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Bachelier, Georges wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hi!
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I have been searching a solution for three days to the following problem:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I am building a JavaCC parser for a language having an original 
&lt;br&gt;&amp;gt; feature: the language allows you to define user key words which may be 
&lt;br&gt;&amp;gt; found anywhere in the input file after their declaration.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; User key words are declared with the following statement : 
&lt;br&gt;&amp;gt; UserKeywords &amp;lt;my_user_kw1&amp;gt; … &amp;lt;my_user_kwn&amp;gt; ;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Once keywords have been declared, they may be used like this :
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;my_user_kw1&amp;gt; {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;any_sequence_of_characters&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;my_user_kwn&amp;gt; {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;any_sequence_of_characters&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The sequences of characters do not matter; we do not use them, but 
&lt;br&gt;&amp;gt; they are surrounded by braces.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I have written a parser production in order to get the user key words 
&lt;br&gt;&amp;gt; and I have tried to play with the tokenizer CommonTokenAction 
&lt;br&gt;&amp;gt; function, but without success.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Could someone help me on this issue, please?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Georges
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Regards,
&lt;br&gt;Farrukh
&lt;br&gt;&lt;br&gt;Web: &lt;a href=&quot;http://www.wellfleetsoftware.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.wellfleetsoftware.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26238408&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26238408&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dynamic-tokenizing-tp26238194p26238408.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26238194</id>
	<title>Dynamic tokenizing</title>
	<published>2009-11-06T11:13:50Z</published>
	<updated>2009-11-06T11:13:50Z</updated>
	<author>
		<name>Bachelier, Georges</name>
	</author>
	<content type="html">&lt;html xmlns:o=&quot;urn:schemas-microsoft-com:office:office&quot; xmlns:w=&quot;urn:schemas-microsoft-com:office:word&quot; xmlns=&quot;http://www.w3.org/TR/REC-html40&quot;&gt;

&lt;head&gt;
&lt;meta http-equiv=Content-Type content=&quot;text/html; charset=us-ascii&quot;&gt;
&lt;meta name=Generator content=&quot;Microsoft Word 11 (filtered medium)&quot;&gt;


&lt;/head&gt;

&lt;body lang=EN-US link=blue vlink=purple&gt;

&lt;div class=Section1&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;Hi!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;I have been searching a solution for three days to the
following problem:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;I am building a JavaCC parser for a language having an
original feature: the language allows you to define user key words which may be
found anywhere in the input file after their declaration.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;User key words are declared with the following statement :
UserKeywords &amp;lt;my_user_kw1&amp;gt; &amp;#8230; &amp;lt;my_user_kwn&amp;gt; ;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;Once keywords have been declared, they may be used like this
:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&amp;lt;my_user_kw1&amp;gt; {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&amp;nbsp;&amp;nbsp; &amp;lt;any_sequence_of_characters&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&amp;lt;my_user_kwn&amp;gt; {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&amp;nbsp;&amp;nbsp; &amp;lt;any_sequence_of_characters&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;The sequences of characters do not matter; we do not use
them, but they are surrounded by braces.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;I have written a parser production in order to get the user
key words and I have tried to play with the tokenizer &lt;/span&gt;&lt;/font&gt;&lt;font size=1 color=black face=&quot;Courier New&quot;&gt;&lt;span style='font-size:9.0pt;font-family:
&quot;Courier New&quot;;color:black;background:lime'&gt;CommonTokenAction&lt;/span&gt;&lt;/font&gt;&lt;font size=1 color=black face=&quot;Courier New&quot;&gt;&lt;span style='font-size:9.0pt;font-family:
&quot;Courier New&quot;;color:black'&gt; function, but without success.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;Could someone help me on this issue, please?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;Georges &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;/div&gt;

&lt;/body&gt;

&lt;/html&gt;
</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dynamic-tokenizing-tp26238194p26238194.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26211031</id>
	<title>LOOKAHEAD question</title>
	<published>2009-11-05T00:47:32Z</published>
	<updated>2009-11-05T00:47:32Z</updated>
	<author>
		<name>David Portabella Clotet-2</name>
	</author>
	<content type="html">&lt;div class=&quot;gmail_quote&quot;&gt;&lt;div&gt;Hello,&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I do not understand how lookahead works exactly.&lt;/div&gt;&lt;div&gt;In a regex, I can use a expression like this: &amp;quot;A+A&amp;quot;, which means to get as many As and finally get another A.&lt;/div&gt;

&lt;div&gt;
(I know that it is equivalent to &amp;quot;AA+&amp;quot; which is simplier, but the previous is an example to help me understand lookahead in javacc)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I&amp;#39;ve tried to reproduce the &amp;quot;A+A&amp;quot; example in javacc, but it does not work.&lt;/div&gt;


&lt;div&gt;From my understanding, a LOOKAHEAD of 2 could process the input &amp;quot;AAA&amp;quot;, and a LOOKAHEAD of 4 could process the input &amp;quot;AAAA&amp;quot;.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Why this example is not working?&lt;/div&gt;&lt;div&gt;&lt;br&gt;


&lt;/div&gt;&lt;div&gt;++++++++++++++++++++++++++++++++++&lt;/div&gt;&lt;div&gt;options { STATIC = false; }&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;PARSER_BEGIN(B)&lt;/div&gt;&lt;div&gt;import java.io.*;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;public class B {&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;static String test = &amp;quot;AAA&amp;quot;;&lt;/div&gt;


&lt;div&gt;&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;public static void main(String args[]) throws Exception {&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;B app = new B();&lt;/div&gt;&lt;div&gt;
&lt;span style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;BTokenManager ttm = new BTokenManager(new SimpleCharStream(new StringReader(test)));&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;app.ReInit(ttm);&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;app.Entry();&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;public B() { this((Reader) null); }&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;&lt;div&gt;PARSER_END(B)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;TOKEN : { &amp;lt;A: &amp;quot;A&amp;quot;&amp;gt; }&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;void Entry() : { }&lt;/div&gt;&lt;div&gt;{&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;( LOOKAHEAD(2) &amp;lt;A&amp;gt; )+&lt;/div&gt;


&lt;div&gt;&lt;span style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&amp;lt;A&amp;gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;div&gt;++++++++++++++++++++++++++++++++++&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Best regards,&lt;/div&gt;&lt;div&gt;DAvid&lt;/div&gt;&lt;font color=&quot;#888888&quot;&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;
&lt;/font&gt;&lt;/div&gt;&lt;br&gt;
</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/LOOKAHEAD-question-tp26211031p26211031.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26135059</id>
	<title>Re: Update of the JavaCC cobol grammar</title>
	<published>2009-10-30T11:40:07Z</published>
	<updated>2009-10-30T11:40:07Z</updated>
	<author>
		<name>Tom Copeland</name>
	</author>
	<content type="html">&lt;br&gt;On Oct 28, 2009, at 5:42 AM, thierry blind wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hello,
&lt;br&gt;&amp;gt; I would like to contribute to this wonderful project by updating the &amp;nbsp;
&lt;br&gt;&amp;gt; JavaCC cobol grammar that was initially made by Bernard Pinon (and &amp;nbsp;
&lt;br&gt;&amp;gt; that can be found in the repository of JavaCC grammars).
&lt;br&gt;&amp;gt; I've heavily modified and improved this grammar, although it is (and &amp;nbsp;
&lt;br&gt;&amp;gt; i think will) never be perfect. The grammar was well tested with &amp;nbsp;
&lt;br&gt;&amp;gt; java 4.2 in a production environment.
&lt;br&gt;&amp;gt; I've attached the new grammar file to this mail. I left some &amp;quot;TODO&amp;quot; &amp;nbsp;
&lt;br&gt;&amp;gt; comments in this file, for some pending improvements, but those &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;quot;ugly&amp;quot; comments can be removed if necessary.
&lt;br&gt;&amp;gt; I don't know if it is the right address to sind this file, hope I'm &amp;nbsp;
&lt;br&gt;&amp;gt; not wrong ;)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Comments and suggestions are welcome :)
&lt;/div&gt;&lt;br&gt;Hi Thierry -
&lt;br&gt;&lt;br&gt;I've uploaded your new grammar here:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;https://javacc.dev.java.net/servlets/ProjectDocumentList?folderID=110&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://javacc.dev.java.net/servlets/ProjectDocumentList?folderID=110&lt;/a&gt;&lt;br&gt;&lt;br&gt;Thanks!
&lt;br&gt;&lt;br&gt;Yours,
&lt;br&gt;&lt;br&gt;Tom
&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26135059&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26135059&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Update-of-the-JavaCC-cobol-grammar-tp26092452p26135059.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26134981</id>
	<title>Re: Matching productions embedded in arbitrary text</title>
	<published>2009-10-30T11:33:21Z</published>
	<updated>2009-10-30T11:33:21Z</updated>
	<author>
		<name>Tom Copeland</name>
	</author>
	<content type="html">&lt;br&gt;On Oct 29, 2009, at 10:36 AM, Farrukh Najmi wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; To me the tricky bit here is that you don't know the function names &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; until runtime, so an input string like this:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; texttext fiddle(&amp;quot;a&amp;quot;, 1)texttext
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; would only be a FunctionCall if the name &amp;quot;fiddle&amp;quot; is in &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; FUNCTION_NAMES, right?
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; With that constraint, I'm not sure how to get JavaCC to tokenize &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; the input data. &amp;nbsp;I wonder if you might want to extract the function &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; declarations using a regex. &amp;nbsp;You could use a regex like &amp;quot;.* (&amp;quot; + &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; someFunctionName + &amp;quot;(.*))&amp;quot; to extract the function declaration from &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; the surrounding text, and then you could pass the match data to &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; JavaCC to create the parse tree. &amp;nbsp;This would only work if it's just &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; a function call, though, it wouldn't work if the function body were &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; there because that could include nested parenthesis which would &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; confuse the regex.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hi Tom,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; My experience suggests that part seems easy. You just define a &amp;nbsp;
&lt;br&gt;&amp;gt; LOOKAHEAD that uses a function seeFunctionCall() where the function &amp;nbsp;
&lt;br&gt;&amp;gt; looks at next few tokens and decides whether it has a function name &amp;nbsp;
&lt;br&gt;&amp;gt; or not. See example below...
&lt;/div&gt;&lt;br&gt;Hm, yup, semantic lookahead could be useful there, good idea. &amp;nbsp;But &amp;nbsp;
&lt;br&gt;what I'm wondering about though... how do you tokenize? &amp;nbsp;Do you just &amp;nbsp;
&lt;br&gt;let every character be a separate token?
&lt;br&gt;&lt;br&gt;Yours,
&lt;br&gt;&lt;br&gt;Tom
&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26134981&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26134981&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Matching-productions-embedded-in-arbitrary-text-tp26094955p26134981.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26128536</id>
	<title>javacc better error messaging</title>
	<published>2009-10-30T04:34:12Z</published>
	<updated>2009-10-30T04:34:12Z</updated>
	<author>
		<name>spotlight2001</name>
	</author>
	<content type="html">I'd like to know about error messaging capabilities.
&lt;br&gt;&lt;br&gt;javacc 5.0
&lt;br&gt;&lt;br&gt;Assumptions:
&lt;br&gt;I have 5 fields with 5 numbers each ... with some separator.
&lt;br&gt;f.e.:
&lt;br&gt;01234*56789*12391*98765
&lt;br&gt;&lt;br&gt;I cannot change the format and have a specification saying that the first 5 digits are variable say A, the next B ...
&lt;br&gt;&lt;br&gt;| &amp;nbsp; &amp;lt;#NUM_CHAR: [&amp;quot;0&amp;quot;-&amp;quot;9&amp;quot;]&amp;gt;
&lt;br&gt;| &amp;nbsp; &amp;lt;N5: &amp;lt;NUM_CHAR&amp;gt;&amp;lt;NUM_CHAR&amp;gt;&amp;lt;NUM_CHAR&amp;gt;&amp;lt;NUM_CHAR&amp;gt;&amp;lt;NUM_CHAR&amp;gt; &amp;gt;
&lt;br&gt;| &amp;nbsp; &amp;lt;DELIMITER: *&amp;gt;
&lt;br&gt;&lt;br&gt;Sometimes I get data violating the format. Example: 4 instead of 5 digits. How can I tell which variable A,B,... is meant?
&lt;br&gt;&lt;br&gt;Parse error says only: &amp;lt;N5&amp;gt; expected, got: 1234
&lt;br&gt;&lt;br&gt;My silly workaround is this:
&lt;br&gt;&lt;br&gt;{ currentField = &amp;quot;A&amp;quot;; } (t = &amp;lt;N5&amp;gt;) { obj.setA(t.image); }
&lt;br&gt;&lt;br&gt;and in the parseexception case I attach the &amp;quot;currentField&amp;quot; value to the error msg. How would a pro do this? :-)
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&lt;br&gt;first i tried this:
&lt;br&gt;| &amp;nbsp; &amp;lt;A: N5&amp;gt;
&lt;br&gt;| &amp;nbsp; &amp;lt;B: N5&amp;gt;
&lt;br&gt;...
&lt;br&gt;&lt;br&gt;Since &amp;lt;N5&amp;gt; was the first public occurrance ... all &amp;lt;A.&amp;gt;, &amp;lt;B.&amp;gt; (dots for non-html markup) always showed up as &amp;lt;N5&amp;gt; which isnt very distinctive.
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&lt;br&gt;2) 
&lt;br&gt;| &amp;nbsp; &amp;lt;N5: &amp;lt;NUM_CHAR&amp;gt;&amp;lt;NUM_CHAR&amp;gt;&amp;lt;NUM_CHAR&amp;gt;&amp;lt;NUM_CHAR&amp;gt;&amp;lt;NUM_CHAR&amp;gt; &amp;gt;
&lt;br&gt;&lt;br&gt;According to the FAQ this should work but doesnt:
&lt;br&gt;| &amp;nbsp; &amp;lt;N5: &amp;lt;NUM_CHAR&amp;gt;{5} &amp;gt;
&lt;br&gt;&lt;br&gt;???</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/javacc-better-error-messaging-tp26128536p26128536.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26119943</id>
	<title>Using JavaCC with spring</title>
	<published>2009-10-29T13:14:24Z</published>
	<updated>2009-10-29T13:14:24Z</updated>
	<author>
		<name>Farrukh Najmi</name>
	</author>
	<content type="html">&lt;br&gt;I am using JavaCC generated parser with spring framework. I define a 
&lt;br&gt;singleton instance of my Parser in spring XMl configuration. When I need 
&lt;br&gt;to use the parser I need to set it to a new Reader or InputStream. To do 
&lt;br&gt;this I needed to add an argument-less constructor and a setInputStream 
&lt;br&gt;method as follows:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; public FunctionParser() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; public void setInputStream(InputStream stream, String encoding) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Following is copied from generated constructor with same args
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try { jj_input_stream = new SimpleCharStream(stream, encoding, 
&lt;br&gt;1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new 
&lt;br&gt;RuntimeException(e); }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; token_source = new FunctionParserTokenManager(jj_input_stream);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; token = new Token();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; jj_ntk = -1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; jj_gen = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; 3; i++) jj_la1[i] = -1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; jj_2_rtns.length; i++) jj_2_rtns[i] = new 
&lt;br&gt;JJCalls();
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;This is a hack because the above code copied from generated constructor 
&lt;br&gt;with same args changes as grammar changes.
&lt;br&gt;Is there a better way to do this?
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Regards,
&lt;br&gt;Farrukh
&lt;br&gt;&lt;br&gt;Web: &lt;a href=&quot;http://www.wellfleetsoftware.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.wellfleetsoftware.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26119943&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26119943&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Using-JavaCC-with-spring-tp26119943p26119943.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26117018</id>
	<title>Re: Matching productions embedded in arbitrary text</title>
	<published>2009-10-29T10:03:33Z</published>
	<updated>2009-10-29T10:03:33Z</updated>
	<author>
		<name>Farrukh Najmi</name>
	</author>
	<content type="html">Farrukh Najmi wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Tom Copeland wrote:
&lt;br&gt;&amp;gt;&amp;gt; To me the tricky bit here is that you don't know the function names 
&lt;br&gt;&amp;gt;&amp;gt; until runtime, so an input string like this:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; texttext fiddle(&amp;quot;a&amp;quot;, 1)texttext
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; would only be a FunctionCall if the name &amp;quot;fiddle&amp;quot; is in 
&lt;br&gt;&amp;gt;&amp;gt; FUNCTION_NAMES, right?
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; With that constraint, I'm not sure how to get JavaCC to tokenize the 
&lt;br&gt;&amp;gt;&amp;gt; input data. &amp;nbsp;I wonder if you might want to extract the function 
&lt;br&gt;&amp;gt;&amp;gt; declarations using a regex. &amp;nbsp;You could use a regex like &amp;quot;.* (&amp;quot; + 
&lt;br&gt;&amp;gt;&amp;gt; someFunctionName + &amp;quot;(.*))&amp;quot; to extract the function declaration from 
&lt;br&gt;&amp;gt;&amp;gt; the surrounding text, and then you could pass the match data to 
&lt;br&gt;&amp;gt;&amp;gt; JavaCC to create the parse tree. &amp;nbsp;This would only work if it's just a 
&lt;br&gt;&amp;gt;&amp;gt; function call, though, it wouldn't work if the function body were 
&lt;br&gt;&amp;gt;&amp;gt; there because that could include nested parenthesis which would 
&lt;br&gt;&amp;gt;&amp;gt; confuse the regex.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hi Tom,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; My experience suggests that part seems easy. You just define a 
&lt;br&gt;&amp;gt; LOOKAHEAD that uses a function seeFunctionCall() where the function 
&lt;br&gt;&amp;gt; looks at next few tokens and decides whether it has a function name or 
&lt;br&gt;&amp;gt; not. See example below...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; String textOrFunctionCall():
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;String rs = new String(&amp;quot;&amp;quot;);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;String ts;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;(
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOOKAHEAD({!seeFunctionCall()}) ts = text() {rs = rs + ts;}
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;| LOOKAHEAD({seeFunctionCall()}) ts = FunctionCall() {rs = rs + &amp;quot; &amp;quot; 
&lt;br&gt;&amp;gt; + ts + &amp;quot; &amp;quot;;}
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return rs;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;Now that my parser is working with some place holder production for 
&lt;br&gt;matching the arbitrary text I now need to make it work for matching 
&lt;br&gt;arbitrary text that is not a function call. To me this is the real 
&lt;br&gt;challenge (as I said above the user configured function names is a 
&lt;br&gt;simple issue that I already have sorted out).
&lt;br&gt;&lt;br&gt;Let me as a more focused question.
&lt;br&gt;&lt;br&gt;Is it possible to define a grammar that can have occurrence of a 
&lt;br&gt;specified production within *arbitrary text*? If so does any one have 
&lt;br&gt;some sample of what that might look like?
&lt;br&gt;&lt;br&gt;Thanks.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Regards,
&lt;br&gt;Farrukh
&lt;br&gt;&lt;br&gt;Web: &lt;a href=&quot;http://www.wellfleetsoftware.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.wellfleetsoftware.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26117018&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26117018&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Matching-productions-embedded-in-arbitrary-text-tp26094955p26117018.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26114313</id>
	<title>Re: Matching productions embedded in arbitrary text</title>
	<published>2009-10-29T07:36:51Z</published>
	<updated>2009-10-29T07:36:51Z</updated>
	<author>
		<name>Farrukh Najmi</name>
	</author>
	<content type="html">Tom Copeland wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Oct 28, 2009, at 8:56 PM, Farrukh Najmi wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Hi Chris and Tom,
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Thank you for your help. Please see inline below...
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; J.Chris Findlay wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I think it might need to be:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; texttexttextfoobar(&amp;quot;arg1&amp;quot;,2.0)texttexttext
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Above is more closer to what I intended. The only thing to add is that
&lt;br&gt;&amp;gt;&amp;gt; I think the function name would have to be preceded by white space so 
&lt;br&gt;&amp;gt;&amp;gt; here a modified version of your example that would be valid:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; texttexttext foobar(&amp;quot;arg1&amp;quot;,2.0)texttexttext
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; BTW, to provide some context, I work on ebXML RegRep specificationm. 
&lt;br&gt;&amp;gt;&amp;gt; The spec supports multiple query languages (e.g. SQL, EJBQL, SPARQL, 
&lt;br&gt;&amp;gt;&amp;gt; XQuery....) and is defining a syntax for user defined functions 
&lt;br&gt;&amp;gt;&amp;gt; (UDF). Since the functions could be embedded in any query language 
&lt;br&gt;&amp;gt;&amp;gt; expression &amp;nbsp;I cannot assume a specific grammar.
&lt;br&gt;&amp;gt;&amp;gt; I have made some progress on my parser by temporarily changing the 
&lt;br&gt;&amp;gt;&amp;gt; text() production to be a choice of various types of tokens for now.
&lt;br&gt;&amp;gt;&amp;gt; So any suggestion on how to handle the arbitrary text requirement 
&lt;br&gt;&amp;gt;&amp;gt; would be great.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; To me the tricky bit here is that you don't know the function names 
&lt;br&gt;&amp;gt; until runtime, so an input string like this:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; texttext fiddle(&amp;quot;a&amp;quot;, 1)texttext
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; would only be a FunctionCall if the name &amp;quot;fiddle&amp;quot; is in 
&lt;br&gt;&amp;gt; FUNCTION_NAMES, right?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; With that constraint, I'm not sure how to get JavaCC to tokenize the 
&lt;br&gt;&amp;gt; input data. &amp;nbsp;I wonder if you might want to extract the function 
&lt;br&gt;&amp;gt; declarations using a regex. &amp;nbsp;You could use a regex like &amp;quot;.* (&amp;quot; + 
&lt;br&gt;&amp;gt; someFunctionName + &amp;quot;(.*))&amp;quot; to extract the function declaration from 
&lt;br&gt;&amp;gt; the surrounding text, and then you could pass the match data to JavaCC 
&lt;br&gt;&amp;gt; to create the parse tree. &amp;nbsp;This would only work if it's just a 
&lt;br&gt;&amp;gt; function call, though, it wouldn't work if the function body were 
&lt;br&gt;&amp;gt; there because that could include nested parenthesis which would 
&lt;br&gt;&amp;gt; confuse the regex.
&lt;/div&gt;&lt;br&gt;Hi Tom,
&lt;br&gt;&lt;br&gt;My experience suggests that part seems easy. You just define a LOOKAHEAD 
&lt;br&gt;that uses a function seeFunctionCall() where the function looks at next 
&lt;br&gt;few tokens and decides whether it has a function name or not. See 
&lt;br&gt;example below...
&lt;br&gt;&lt;br&gt;String textOrFunctionCall():
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; String rs = new String(&amp;quot;&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; String ts;
&lt;br&gt;}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; LOOKAHEAD({!seeFunctionCall()}) ts = text() {rs = rs + ts;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; | LOOKAHEAD({seeFunctionCall()}) ts = FunctionCall() {rs = rs + &amp;quot; &amp;quot; 
&lt;br&gt;+ ts + &amp;quot; &amp;quot;;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; )
&lt;br&gt;&amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return rs;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Regards,
&lt;br&gt;Farrukh
&lt;br&gt;&lt;br&gt;Web: &lt;a href=&quot;http://www.wellfleetsoftware.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.wellfleetsoftware.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26114313&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26114313&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Matching-productions-embedded-in-arbitrary-text-tp26094955p26114313.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26114114</id>
	<title>Re: Matching productions embedded in arbitrary text</title>
	<published>2009-10-29T07:26:17Z</published>
	<updated>2009-10-29T07:26:17Z</updated>
	<author>
		<name>Tom Copeland</name>
	</author>
	<content type="html">&lt;br&gt;On Oct 28, 2009, at 8:56 PM, Farrukh Najmi wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi Chris and Tom,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thank you for your help. Please see inline below...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; J.Chris Findlay wrote:
&lt;br&gt;&amp;gt;&amp;gt; I think it might need to be:
&lt;br&gt;&amp;gt;&amp;gt; texttexttextfoobar(&amp;quot;arg1&amp;quot;,2.0)texttexttext
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Above is more closer to what I intended. The only thing to add is that
&lt;br&gt;&amp;gt; I think the function name would have to be preceded by white space &amp;nbsp;
&lt;br&gt;&amp;gt; so here a modified version of your example that would be valid:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; texttexttext foobar(&amp;quot;arg1&amp;quot;,2.0)texttexttext
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; BTW, to provide some context, I work on ebXML RegRep specificationm. &amp;nbsp;
&lt;br&gt;&amp;gt; The spec supports multiple query languages (e.g. SQL, EJBQL, SPARQL, &amp;nbsp;
&lt;br&gt;&amp;gt; XQuery....) and is defining a syntax for user defined functions &amp;nbsp;
&lt;br&gt;&amp;gt; (UDF). Since the functions could be embedded in any query language &amp;nbsp;
&lt;br&gt;&amp;gt; expression &amp;nbsp;I cannot assume a specific grammar.
&lt;br&gt;&amp;gt; I have made some progress on my parser by temporarily changing the &amp;nbsp;
&lt;br&gt;&amp;gt; text() production to be a choice of various types of tokens for now.
&lt;br&gt;&amp;gt; So any suggestion on how to handle the arbitrary text requirement &amp;nbsp;
&lt;br&gt;&amp;gt; would be great.
&lt;/div&gt;&lt;br&gt;To me the tricky bit here is that you don't know the function names &amp;nbsp;
&lt;br&gt;until runtime, so an input string like this:
&lt;br&gt;&lt;br&gt;texttext fiddle(&amp;quot;a&amp;quot;, 1)texttext
&lt;br&gt;&lt;br&gt;would only be a FunctionCall if the name &amp;quot;fiddle&amp;quot; is in &amp;nbsp;
&lt;br&gt;FUNCTION_NAMES, right?
&lt;br&gt;&lt;br&gt;With that constraint, I'm not sure how to get JavaCC to tokenize the &amp;nbsp;
&lt;br&gt;input data. &amp;nbsp;I wonder if you might want to extract the function &amp;nbsp;
&lt;br&gt;declarations using a regex. &amp;nbsp;You could use a regex like &amp;quot;.* (&amp;quot; + &amp;nbsp;
&lt;br&gt;someFunctionName + &amp;quot;(.*))&amp;quot; to extract the function declaration from &amp;nbsp;
&lt;br&gt;the surrounding text, and then you could pass the match data to JavaCC &amp;nbsp;
&lt;br&gt;to create the parse tree. &amp;nbsp;This would only work if it's just a &amp;nbsp;
&lt;br&gt;function call, though, it wouldn't work if the function body were &amp;nbsp;
&lt;br&gt;there because that could include nested parenthesis which would &amp;nbsp;
&lt;br&gt;confuse the regex.
&lt;br&gt;&lt;br&gt;Yours,
&lt;br&gt;&lt;br&gt;Tom
&lt;br&gt;&lt;a href=&quot;http://generatingparserswithjavacc.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://generatingparserswithjavacc.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26114114&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26114114&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Matching-productions-embedded-in-arbitrary-text-tp26094955p26114114.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26104614</id>
	<title>Re: Matching productions embedded in arbitrary text</title>
	<published>2009-10-28T17:56:39Z</published>
	<updated>2009-10-28T17:56:39Z</updated>
	<author>
		<name>Farrukh Najmi</name>
	</author>
	<content type="html">Hi Chris and Tom,
&lt;br&gt;&lt;br&gt;Thank you for your help. Please see inline below...
&lt;br&gt;&lt;br&gt;J.Chris Findlay wrote:
&lt;br&gt;&amp;gt; I think it might need to be:
&lt;br&gt;&amp;gt; texttexttextfoobar(&amp;quot;arg1&amp;quot;,2.0)texttexttext
&lt;br&gt;&lt;br&gt;Above is more closer to what I intended. The only thing to add is that
&lt;br&gt;I think the function name would have to be preceded by white space so 
&lt;br&gt;here a modified version of your example that would be valid:
&lt;br&gt;&lt;br&gt;texttexttext foobar(&amp;quot;arg1&amp;quot;,2.0)texttexttext
&lt;br&gt;&lt;br&gt;BTW, to provide some context, I work on ebXML RegRep specificationm. The 
&lt;br&gt;spec supports multiple query languages (e.g. SQL, EJBQL, SPARQL, 
&lt;br&gt;XQuery....) and is defining a syntax for user defined functions (UDF). 
&lt;br&gt;Since the functions could be embedded in any query language expression &amp;nbsp;
&lt;br&gt;I cannot assume a specific grammar. 
&lt;br&gt;&lt;br&gt;I have made some progress on my parser by temporarily changing the 
&lt;br&gt;text() production to be a choice of various types of tokens for now.
&lt;br&gt;So any suggestion on how to handle the arbitrary text requirement would 
&lt;br&gt;be great.
&lt;br&gt;&lt;br&gt;Thanks again.
&lt;br&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Thu, Oct 29, 2009 at 11:55 AM, Tom Copeland &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26104614&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tom@...&lt;/a&gt; 
&lt;br&gt;&amp;gt; &amp;lt;mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26104614&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tom@...&lt;/a&gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;...
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; Hi Farrukh -
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; In this case the error message is indeed accurate; since
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; (anything)* is a &amp;quot;zero or more&amp;quot; expansion it can be matched by
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; nothing at all. &amp;nbsp;Thus it could just sit there in an infinite loop.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; Let's see though... so that I understand it, assuming that
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;quot;foobar&amp;quot; is one of the FUNCTION_NAMES in the HashSet, would this
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; be valid input data?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; texttexttextfoobar(arg1,arg2)texttexttext
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; Thanks,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; Tom
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://generatingparserswithjavacc.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://generatingparserswithjavacc.com/&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26104614&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;lt;mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26104614&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26104614&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;lt;mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26104614&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -- 
&lt;br&gt;&amp;gt; - J.Chris Findlay
&lt;br&gt;&amp;gt; &amp;nbsp; (c:
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Regards,
&lt;br&gt;Farrukh
&lt;br&gt;&lt;br&gt;Web: &lt;a href=&quot;http://www.wellfleetsoftware.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.wellfleetsoftware.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26104614&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26104614&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Matching-productions-embedded-in-arbitrary-text-tp26094955p26104614.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26103705</id>
	<title>Re: Matching productions embedded in arbitrary text</title>
	<published>2009-10-28T16:04:02Z</published>
	<updated>2009-10-28T16:04:02Z</updated>
	<author>
		<name>J.Chris Findlay</name>
	</author>
	<content type="html">I think it might need to be:&lt;br&gt;texttexttextfoobar(&amp;quot;arg1&amp;quot;,2.0)texttexttext&lt;br&gt;&lt;br&gt;&lt;div class=&quot;gmail_quote&quot;&gt;On Thu, Oct 29, 2009 at 11:55 AM, Tom Copeland &lt;span dir=&quot;ltr&quot;&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26103705&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tom@...&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;
&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class=&quot;h5&quot;&gt;&lt;br&gt;
On Oct 28, 2009, at 9:50 AM, Farrukh Najmi wrote:&lt;br&gt;
&lt;br&gt;
&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;
Hi Guys,&lt;br&gt;
&lt;br&gt;
I need some help with a grammar (see attached).&lt;br&gt;
&lt;br&gt;
The grammar processes text that consists of function calls embedded any where and possibly multiple time within arbitrary text.&lt;br&gt;
&lt;br&gt;
The FunctionCall() production is expected to be recognized when a function name (configurable via setFUNCTION_NAMES) is matched in the text.&lt;br&gt;
Arbitrary text is expected to be recognized by the text() production.&lt;br&gt;
&lt;br&gt;
When I run javacc I get the following error:&lt;br&gt;
&lt;br&gt;
Error: Line 73, Column 5: Expansion within &amp;quot;(...)*&amp;quot; can be matched by empty string.&lt;br&gt;
&lt;br&gt;
Can any one help me get over the hump with this problem? If there is a better way to do what I am trying to do please let me know.&lt;br&gt;
&lt;br&gt;
Thanks in advance for your help.&lt;br&gt;
&lt;/blockquote&gt;
&lt;br&gt;&lt;/div&gt;&lt;/div&gt;
Hi Farrukh -&lt;br&gt;
&lt;br&gt;
In this case the error message is indeed accurate; since (anything)* is a &amp;quot;zero or more&amp;quot; expansion it can be matched by nothing at all.  Thus it could just sit there in an infinite loop.&lt;br&gt;
&lt;br&gt;
Let&amp;#39;s see though... so that I understand it, assuming that &amp;quot;foobar&amp;quot; is one of the FUNCTION_NAMES in the HashSet, would this be valid input data?&lt;br&gt;
&lt;br&gt;
texttexttextfoobar(arg1,arg2)texttexttext&lt;br&gt;
&lt;br&gt;
Thanks,&lt;br&gt;
&lt;br&gt;
Tom&lt;br&gt;
&lt;a href=&quot;http://generatingparserswithjavacc.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://generatingparserswithjavacc.com/&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class=&quot;h5&quot;&gt;&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
---------------------------------------------------------------------&lt;br&gt;
To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26103705&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;&lt;br&gt;
For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26103705&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;&lt;br clear=&quot;all&quot;&gt;&lt;br&gt;-- &lt;br&gt; - J.Chris Findlay&lt;br&gt;   (c:&lt;br&gt;
</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Matching-productions-embedded-in-arbitrary-text-tp26094955p26103705.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26103619</id>
	<title>Re: Matching productions embedded in arbitrary text</title>
	<published>2009-10-28T15:55:51Z</published>
	<updated>2009-10-28T15:55:51Z</updated>
	<author>
		<name>Tom Copeland</name>
	</author>
	<content type="html">&lt;br&gt;On Oct 28, 2009, at 9:50 AM, Farrukh Najmi wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi Guys,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I need some help with a grammar (see attached).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The grammar processes text that consists of function calls embedded &amp;nbsp;
&lt;br&gt;&amp;gt; any where and possibly multiple time within arbitrary text.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The FunctionCall() production is expected to be recognized when a &amp;nbsp;
&lt;br&gt;&amp;gt; function name (configurable via setFUNCTION_NAMES) is matched in the &amp;nbsp;
&lt;br&gt;&amp;gt; text.
&lt;br&gt;&amp;gt; Arbitrary text is expected to be recognized by the text() production.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; When I run javacc I get the following error:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Error: Line 73, Column 5: Expansion within &amp;quot;(...)*&amp;quot; can be matched &amp;nbsp;
&lt;br&gt;&amp;gt; by empty string.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Can any one help me get over the hump with this problem? If there is &amp;nbsp;
&lt;br&gt;&amp;gt; a better way to do what I am trying to do please let me know.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks in advance for your help.
&lt;/div&gt;&lt;br&gt;Hi Farrukh -
&lt;br&gt;&lt;br&gt;In this case the error message is indeed accurate; since (anything)* &amp;nbsp;
&lt;br&gt;is a &amp;quot;zero or more&amp;quot; expansion it can be matched by nothing at all. &amp;nbsp; 
&lt;br&gt;Thus it could just sit there in an infinite loop.
&lt;br&gt;&lt;br&gt;Let's see though... so that I understand it, assuming that &amp;quot;foobar&amp;quot; is &amp;nbsp;
&lt;br&gt;one of the FUNCTION_NAMES in the HashSet, would this be valid input &amp;nbsp;
&lt;br&gt;data?
&lt;br&gt;&lt;br&gt;texttexttextfoobar(arg1,arg2)texttexttext
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;&lt;br&gt;Tom
&lt;br&gt;&lt;a href=&quot;http://generatingparserswithjavacc.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://generatingparserswithjavacc.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26103619&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26103619&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Matching-productions-embedded-in-arbitrary-text-tp26094955p26103619.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26103122</id>
	<title>Re: Question on examples/Lookahead</title>
	<published>2009-10-28T15:14:13Z</published>
	<updated>2009-10-28T15:14:13Z</updated>
	<author>
		<name>Tom Copeland</name>
	</author>
	<content type="html">&lt;br&gt;On Oct 20, 2009, at 5:41 PM, Riadh Elloumi wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi all,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I am newbie to JavaCC and I started by the tutorials. I tried the &amp;nbsp;
&lt;br&gt;&amp;gt; examples/Lookahead/Example1.jj and I am surprised that the grammar &amp;nbsp;
&lt;br&gt;&amp;gt; does not accept &amp;quot;abc&amp;quot; as it is said on the tutorial. I am using &amp;nbsp;
&lt;br&gt;&amp;gt; JavaCC 5.0 and I compile and run the example with these commands:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; riadh@giscard:Lookahead$ ../../bin/javacc Example1.jj
&lt;br&gt;&amp;gt; Java Compiler Compiler Version 5.0 (Parser Generator)
&lt;br&gt;&amp;gt; (type &amp;quot;javacc&amp;quot; with no arguments for help)
&lt;br&gt;&amp;gt; Reading from file Example1.jj . . .
&lt;br&gt;&amp;gt; Warning: Choice conflict in [...] construct at line 60, column 7.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Expansion nested within construct and expansion following &amp;nbsp;
&lt;br&gt;&amp;gt; construct
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;have common prefixes, one of which is: &amp;quot;c&amp;quot;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Consider using a lookahead of 2 or more for nested expansion.
&lt;br&gt;&amp;gt; File &amp;quot;TokenMgrError.java&amp;quot; is being rebuilt.
&lt;br&gt;&amp;gt; File &amp;quot;ParseException.java&amp;quot; is being rebuilt.
&lt;br&gt;&amp;gt; File &amp;quot;Token.java&amp;quot; is being rebuilt.
&lt;br&gt;&amp;gt; File &amp;quot;SimpleCharStream.java&amp;quot; is being rebuilt.
&lt;br&gt;&amp;gt; Parser generated with 0 errors and 1 warnings.
&lt;br&gt;&amp;gt; riadh@giscard:Lookahead$ javac *.java
&lt;br&gt;&amp;gt; riadh@giscard:Lookahead$ java Example
&lt;br&gt;&amp;gt; abc
&lt;br&gt;&amp;gt; Exception in thread &amp;quot;main&amp;quot; ParseException: Encountered &amp;quot;&amp;lt;EOF&amp;gt;&amp;quot; at &amp;nbsp;
&lt;br&gt;&amp;gt; line 1, column 4.
&lt;br&gt;&amp;gt; Was expecting:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;quot;c&amp;quot; ...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; at Example.generateParseException(Example.java:206)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; at Example.jj_consume_token(Example.java:144)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; at Example.Input(Example.java:12)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; at Example.main(Example.java:6)
&lt;br&gt;&amp;gt; riadh@giscard:Lookahead$
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Can you help me to understand why &amp;quot;abc&amp;quot; is not accepted?
&lt;/div&gt;&lt;br&gt;Hello Riadh -
&lt;br&gt;&lt;br&gt;I think the idea with examples/Lookahead/Example1.jj is to illustrate &amp;nbsp;
&lt;br&gt;how backtracking affects a grammar. &amp;nbsp;In terms of BNF, Example1.jj can &amp;nbsp;
&lt;br&gt;handle &amp;quot;abc&amp;quot;, but since JavaCC parsers don't backtrack, the parser &amp;nbsp;
&lt;br&gt;that JavaCC generates can't. &amp;nbsp;If you look at section 6 of the example/ 
&lt;br&gt;Lookahead/README file you'll see a discussion of how to solve the &amp;nbsp;
&lt;br&gt;problem in Example1.jj with semantic lookahead.
&lt;br&gt;&lt;br&gt;Hope this helps,
&lt;br&gt;&lt;br&gt;Yours,
&lt;br&gt;&lt;br&gt;Tom
&lt;br&gt;&lt;a href=&quot;http://generatingparserswithjavacc.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://generatingparserswithjavacc.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26103122&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26103122&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Question-on-examples-Lookahead-tp25981307p26103122.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26098589</id>
	<title>Re: Matching productions embedded in arbitrary text</title>
	<published>2009-10-28T10:17:02Z</published>
	<updated>2009-10-28T10:17:02Z</updated>
	<author>
		<name>Farrukh Najmi</name>
	</author>
	<content type="html">&lt;br&gt;I would be grateful for *any* general advice on the feasability of my 
&lt;br&gt;parser's goals.
&lt;br&gt;Is it even possible to match specific tokens intermixed with arbitrary 
&lt;br&gt;text? Has anyone done
&lt;br&gt;a similar parser?
&lt;br&gt;&lt;br&gt;Farrukh Najmi wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi Guys,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I need some help with a grammar (see attached).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The grammar processes text that consists of function calls embedded 
&lt;br&gt;&amp;gt; any where and possibly multiple time within arbitrary text.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The FunctionCall() production is expected to be recognized when a 
&lt;br&gt;&amp;gt; function name (configurable via setFUNCTION_NAMES) is matched in the 
&lt;br&gt;&amp;gt; text.
&lt;br&gt;&amp;gt; Arbitrary text is expected to be recognized by the text() production.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; When I run javacc I get the following error:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Error: Line 73, Column 5: Expansion within &amp;quot;(...)*&amp;quot; can be matched by 
&lt;br&gt;&amp;gt; empty string.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Can any one help me get over the hump with this problem? If there is a 
&lt;br&gt;&amp;gt; better way to do what I am trying to do please let me know.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks in advance for your help.
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Regards,
&lt;br&gt;Farrukh
&lt;br&gt;&lt;br&gt;Web: &lt;a href=&quot;http://www.wellfleetsoftware.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.wellfleetsoftware.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26098589&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26098589&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Matching-productions-embedded-in-arbitrary-text-tp26094955p26098589.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26117485</id>
	<title>Re: Matching productions embedded in arbitrary text</title>
	<published>2009-10-28T09:53:10Z</published>
	<updated>2009-10-28T09:53:10Z</updated>
	<author>
		<name>Bill Fenlason-2</name>
	</author>
	<content type="html">The base problem is that in some cases, a tokenizer cannot unambiguously 
&lt;br&gt;define the token kind. 
&lt;br&gt;&lt;br&gt;This is similar to a parsing problem with PL/I (which has no reserved 
&lt;br&gt;keywords). &amp;nbsp;In &amp;quot;IF(...) ... ;&amp;quot; &amp;nbsp;IF can be either a keyword or a variable 
&lt;br&gt;name and it cannot be determined until the token after the matching 
&lt;br&gt;right paren is examined. &amp;nbsp;There may be any number of tokens (e.g. 
&lt;br&gt;expressions) between the parens. &amp;nbsp;One approach that works is to tokenize 
&lt;br&gt;IF as a keyword and then use a specialized lookahead routine that alters 
&lt;br&gt;the &amp;quot;kind&amp;quot; field in the IF token to &amp;quot;identifier&amp;quot; if necessary (before it 
&lt;br&gt;is parsed).
&lt;br&gt;&lt;br&gt;In this case, a similar approach using a specialized lookahead to 
&lt;br&gt;identify the token kind (as was pointed out) is reasonably straight 
&lt;br&gt;forward. 
&lt;br&gt;&lt;br&gt;Farrukh Najmi wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Tom Copeland wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; On Oct 28, 2009, at 8:56 PM, Farrukh Najmi wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Hi Chris and Tom,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Thank you for your help. Please see inline below...
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; J.Chris Findlay wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I think it might need to be:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; texttexttextfoobar(&amp;quot;arg1&amp;quot;,2.0)texttexttext
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Above is more closer to what I intended. The only thing to add is that
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I think the function name would have to be preceded by white space 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; so here a modified version of your example that would be valid:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; texttexttext foobar(&amp;quot;arg1&amp;quot;,2.0)texttexttext
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; BTW, to provide some context, I work on ebXML RegRep specificationm. 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; The spec supports multiple query languages (e.g. SQL, EJBQL, SPARQL, 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; XQuery....) and is defining a syntax for user defined functions 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; (UDF). Since the functions could be embedded in any query language 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; expression &amp;nbsp;I cannot assume a specific grammar.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I have made some progress on my parser by temporarily changing the 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; text() production to be a choice of various types of tokens for now.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; So any suggestion on how to handle the arbitrary text requirement 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; would be great.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; To me the tricky bit here is that you don't know the function names 
&lt;br&gt;&amp;gt;&amp;gt; until runtime, so an input string like this:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; texttext fiddle(&amp;quot;a&amp;quot;, 1)texttext
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; would only be a FunctionCall if the name &amp;quot;fiddle&amp;quot; is in 
&lt;br&gt;&amp;gt;&amp;gt; FUNCTION_NAMES, right?
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; With that constraint, I'm not sure how to get JavaCC to tokenize the 
&lt;br&gt;&amp;gt;&amp;gt; input data. &amp;nbsp;I wonder if you might want to extract the function 
&lt;br&gt;&amp;gt;&amp;gt; declarations using a regex. &amp;nbsp;You could use a regex like &amp;quot;.* (&amp;quot; + 
&lt;br&gt;&amp;gt;&amp;gt; someFunctionName + &amp;quot;(.*))&amp;quot; to extract the function declaration from 
&lt;br&gt;&amp;gt;&amp;gt; the surrounding text, and then you could pass the match data to 
&lt;br&gt;&amp;gt;&amp;gt; JavaCC to create the parse tree. &amp;nbsp;This would only work if it's just a 
&lt;br&gt;&amp;gt;&amp;gt; function call, though, it wouldn't work if the function body were 
&lt;br&gt;&amp;gt;&amp;gt; there because that could include nested parenthesis which would 
&lt;br&gt;&amp;gt;&amp;gt; confuse the regex.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hi Tom,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; My experience suggests that part seems easy. You just define a 
&lt;br&gt;&amp;gt; LOOKAHEAD that uses a function seeFunctionCall() where the function 
&lt;br&gt;&amp;gt; looks at next few tokens and decides whether it has a function name or 
&lt;br&gt;&amp;gt; not. See example below...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; String textOrFunctionCall():
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;String rs = new String(&amp;quot;&amp;quot;);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;String ts;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;(
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOOKAHEAD({!seeFunctionCall()}) ts = text() {rs = rs + ts;}
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;| LOOKAHEAD({seeFunctionCall()}) ts = FunctionCall() {rs = rs + &amp;quot; &amp;quot; 
&lt;br&gt;&amp;gt; + ts + &amp;quot; &amp;quot;;}
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return rs;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ------------------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; No virus found in this incoming message.
&lt;br&gt;&amp;gt; Checked by AVG - www.avg.com 
&lt;br&gt;&amp;gt; Version: 8.5.423 / Virus Database: 270.14.38/2467 - Release Date: 10/29/09 07:38:00
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;/div&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26117485&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26117485&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Matching-productions-embedded-in-arbitrary-text-tp26094955p26117485.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26094955</id>
	<title>Matching productions embedded in arbitrary text</title>
	<published>2009-10-28T06:50:00Z</published>
	<updated>2009-10-28T06:50:00Z</updated>
	<author>
		<name>Farrukh Najmi</name>
	</author>
	<content type="html">Hi Guys,
&lt;br&gt;&lt;br&gt;I need some help with a grammar (see attached).
&lt;br&gt;&lt;br&gt;The grammar processes text that consists of function calls embedded any 
&lt;br&gt;where and possibly multiple time within arbitrary text.
&lt;br&gt;&lt;br&gt;The FunctionCall() production is expected to be recognized when a 
&lt;br&gt;function name (configurable via setFUNCTION_NAMES) is matched in the text.
&lt;br&gt;Arbitrary text is expected to be recognized by the text() production.
&lt;br&gt;&lt;br&gt;When I run javacc I get the following error:
&lt;br&gt;&lt;br&gt;Error: Line 73, Column 5: Expansion within &amp;quot;(...)*&amp;quot; can be matched by 
&lt;br&gt;empty string.
&lt;br&gt;&lt;br&gt;Can any one help me get over the hump with this problem? If there is a 
&lt;br&gt;better way to do what I am trying to do please let me know.
&lt;br&gt;&lt;br&gt;Thanks in advance for your help.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Regards,
&lt;br&gt;Farrukh
&lt;br&gt;&lt;br&gt;Web: &lt;a href=&quot;http://www.wellfleetsoftware.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.wellfleetsoftware.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;/**
&lt;br&gt;&amp;nbsp;* 
&lt;br&gt;&amp;nbsp;*
&lt;br&gt;&amp;nbsp;*/
&lt;br&gt;&lt;br&gt;options{
&lt;br&gt;&amp;nbsp; &amp;nbsp; STATIC=false ;
&lt;br&gt;&amp;nbsp; &amp;nbsp; IGNORE_CASE=true ;
&lt;br&gt;// &amp;nbsp;DEBUG_LOOKAHEAD= true ;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;PARSER_BEGIN(FunctionParser)
&lt;br&gt;package com.example.function;
&lt;br&gt;&lt;br&gt;import java.io.Reader;
&lt;br&gt;import java.io.FileInputStream;
&lt;br&gt;import java.util.HashSet;
&lt;br&gt;import java.util.Set;
&lt;br&gt;&lt;br&gt;public class FunctionParser {
&lt;br&gt;&amp;nbsp; &amp;nbsp; protected static Set&amp;lt;String&amp;gt; FUNCTION_NAMES = new HashSet&amp;lt;String&amp;gt;();
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; public void reInit(Reader input) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ReInit(input); 
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; protected boolean seeFunctionCall() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &amp;quot;(&amp;quot;.equals(getToken(2).image)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;&amp; FUNCTION_NAMES.contains(getToken(1).image.toUpperCase());
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; public static void setFUNCTION_NAMES(Set&amp;lt;String&amp;gt; functionNames) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FUNCTION_NAMES = functionNames;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;}
&lt;br&gt;PARSER_END(FunctionParser)
&lt;br&gt;&lt;br&gt;&lt;br&gt;SKIP:
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;quot; &amp;quot;
&lt;br&gt;| &amp;nbsp; &amp;quot;\t&amp;quot;
&lt;br&gt;| &amp;nbsp; &amp;quot;\r&amp;quot;
&lt;br&gt;| &amp;nbsp; &amp;quot;\n&amp;quot;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;TOKEN : /* Numeric Constants */
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt; S_NUMBER: &amp;lt;FLOAT&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;lt;FLOAT&amp;gt; ( [&amp;quot;e&amp;quot;,&amp;quot;E&amp;quot;] ([ &amp;quot;-&amp;quot;,&amp;quot;+&amp;quot;])? &amp;lt;FLOAT&amp;gt; )?
&lt;br&gt;&amp;nbsp; &amp;nbsp; 	&amp;gt;
&lt;br&gt;&amp;nbsp; | 	&amp;lt; #FLOAT: &amp;lt;INTEGER&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;lt;INTEGER&amp;gt; ( &amp;quot;.&amp;quot; &amp;lt;INTEGER&amp;gt; )?
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;quot;.&amp;quot; &amp;lt;INTEGER&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; 	&amp;gt;
&lt;br&gt;&amp;nbsp; | 	&amp;lt; #INTEGER: ( &amp;lt;DIGIT&amp;gt; )+ &amp;gt;
&lt;br&gt;&amp;nbsp; | 	&amp;lt; #DIGIT: [&amp;quot;0&amp;quot; - &amp;quot;9&amp;quot;] &amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;TOKEN:
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt; S_IDENTIFIER: (&amp;lt;LETTER&amp;gt;)+ (&amp;lt;DIGIT&amp;gt; | &amp;lt;LETTER&amp;gt; |&amp;lt;SPECIAL_CHARS&amp;gt;)* &amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt; #LETTER: [&amp;quot;a&amp;quot;-&amp;quot;z&amp;quot;, &amp;quot;A&amp;quot;-&amp;quot;Z&amp;quot;] &amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt; #SPECIAL_CHARS: &amp;quot;_&amp;quot; &amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt; S_CHAR_LITERAL: &amp;quot;'&amp;quot; (~[&amp;quot;'&amp;quot;])* &amp;quot;'&amp;quot; (&amp;quot;'&amp;quot; (~[&amp;quot;'&amp;quot;])* &amp;quot;'&amp;quot;)*&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt; S_QUOTED_IDENTIFIER: &amp;quot;\&amp;quot;&amp;quot; (~[&amp;quot;\n&amp;quot;,&amp;quot;\r&amp;quot;,&amp;quot;\&amp;quot;&amp;quot;])* &amp;quot;\&amp;quot;&amp;quot; &amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt; S_TEXT: ~[] &amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void start():
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; (textOrFunctionCall())*
&lt;br&gt;&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void text():
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; ( &amp;lt;S_TEXT&amp;gt; )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void textOrFunctionCall():
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; text()
&lt;br&gt;&amp;nbsp; &amp;nbsp; | LOOKAHEAD({seeFunctionCall()}) FunctionCall()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;/* ---------------- Grammar Productions --------------------- */
&lt;br&gt;&lt;br&gt;void FunctionCall():
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; FunctionReference() &amp;nbsp;&amp;quot;(&amp;quot; (FunctionArgumentList())* &amp;quot;)&amp;quot;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void FunctionReference():
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; String name;
&lt;br&gt;}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;S_IDENTIFIER&amp;gt; {name = token.image;}
&lt;br&gt;&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void FunctionArgumentList():
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; FunctionArgument() (&amp;quot;,&amp;quot; FunctionArgument())*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void FunctionArgument():
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; FunctionCall()
&lt;br&gt;&amp;nbsp; | &amp;lt;S_QUOTED_IDENTIFIER&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;S_NUMBER&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26094955&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26094955&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Matching-productions-embedded-in-arbitrary-text-tp26094955p26094955.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26092452</id>
	<title>Update of the JavaCC cobol grammar</title>
	<published>2009-10-28T02:42:54Z</published>
	<updated>2009-10-28T02:42:54Z</updated>
	<author>
		<name>thierry blind</name>
	</author>
	<content type="html">&lt;html&gt;
&lt;head&gt;

&lt;/head&gt;
&lt;body class='hmmessage'&gt;
Hello,&lt;br&gt;
I would like to contribute to this wonderful project by updating the JavaCC cobol grammar that was initially made by Bernard Pinon (and that can be found in the repository of JavaCC grammars).&lt;br&gt;
I've heavily modified and improved this grammar, although it is (and i think will) never be perfect. The grammar was well tested with java 4.2 in a production environment.&lt;br&gt;
I've attached the new grammar file to this mail. I left some &quot;TODO&quot; comments&amp;nbsp;in this file, for some pending improvements, but those &quot;ugly&quot; comments can be removed if necessary.&lt;br&gt;
I don't know if it is the right address to sind this file, hope&amp;nbsp;I'm not wrong&amp;nbsp;;)&lt;br&gt;
&amp;nbsp;&lt;br&gt;
Comments and suggestions are welcome :)&lt;br&gt;
&amp;nbsp;&lt;br&gt;
Best regards,&lt;br&gt;
Thierry BLIND.&lt;br&gt;&lt;br&gt; 		 	   		  &lt;br /&gt;&lt;hr /&gt;Nouveau Windows 7 : Trouvez le PC qui vous convient. &lt;a href='http://clk.atdmt.com/FRM/go/181574580/direct/01/' target='_new' rel=&quot;nofollow&quot;&gt;En savoir plus.&lt;/a&gt;&lt;/body&gt;
&lt;/html&gt;&lt;br /&gt;/**
&lt;br&gt;&amp;nbsp;* This is an experimental COBOL-85 grammar for JavaCC.
&lt;br&gt;&amp;nbsp;* &amp;lt;p&amp;gt;References used for this grammar :&amp;lt;ol&amp;gt;
&lt;br&gt;&amp;nbsp;* &amp;lt;li&amp;gt; Ralf Lämmel &amp; Chris Verhoef : VS COBOL II grammar Version 1.0.3
&lt;br&gt;&amp;nbsp;* &amp;lt;li&amp;gt; Fujitsu Cobol compiler reference
&lt;br&gt;&amp;nbsp;* &amp;lt;li&amp;gt; Compaq-HP Non-stop Cobol reference
&lt;br&gt;&amp;nbsp;* &amp;lt;/od&amp;gt;
&lt;br&gt;&amp;nbsp;* &amp;lt;p&amp;gt;This grammar is released under the GNU Library Public License (LGPL).
&lt;br&gt;&amp;nbsp;* &amp;lt;p&amp;gt;&amp;lt;address&amp;gt;Bernard Pinon, august 2002&amp;lt;/address&amp;gt;
&lt;br&gt;&amp;nbsp;* &amp;lt;p&amp;gt;&amp;lt;address&amp;gt;Thierry Blind, september 2009&amp;lt;/address&amp;gt;
&lt;br&gt;&amp;nbsp;* @see &lt;a href=&quot;http://www.gnu.org/licenses/lgpl.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.gnu.org/licenses/lgpl.html&lt;/a&gt;&lt;br&gt;&amp;nbsp;* @see &lt;a href=&quot;http://www.cwi.nl/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.cwi.nl/&lt;/a&gt;&lt;br&gt;&amp;nbsp;* @see &lt;a href=&quot;http://www.wins.uva.nl/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.wins.uva.nl/&lt;/a&gt;&lt;br&gt;&amp;nbsp;* @author Thierry Blind (initial work from Bernard Pinon)
&lt;br&gt;&amp;nbsp;*
&lt;br&gt;&amp;nbsp;* &amp;lt;p&amp;gt;History:&amp;lt;ul&amp;gt;
&lt;br&gt;&amp;nbsp;* &amp;lt;li&amp;gt;&amp;lt;date&amp;gt;9-aug-2002&amp;lt;/date&amp;gt; [BP] make changes to comply with JTB :&amp;lt;ol&amp;gt;
&lt;br&gt;&amp;nbsp;* &amp;lt;li&amp;gt; Changed Integer() to IntegerConstant() to avoid conflicts with java.lang.Integer
&lt;br&gt;&amp;nbsp;* &amp;lt;li&amp;gt; Removed Java code to make the grammar bare bone
&lt;br&gt;&amp;nbsp;* &amp;lt;li&amp;gt; Fixed Identification Division entries
&lt;br&gt;&amp;nbsp;* &amp;lt;/ol&amp;gt;
&lt;br&gt;&amp;nbsp;* &amp;lt;li&amp;gt;&amp;lt;date&amp;gt;8-aug-2002&amp;lt;/date&amp;gt; [BP] fixed several bugs :&amp;lt;ol&amp;gt;
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; INSTALLATION section
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; wrong spelling in keywords
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; DOT missing in FD/SD entries
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; wrong regular expressions for levels
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; possibility to have repeated string literals, e.g. &amp;quot;AA&amp;quot; &amp;quot;BB&amp;quot; -&amp;gt; &amp;quot;AABB&amp;quot;
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; optimized data division by placing the most common clauses first
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; DOT missing in exit statement
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; confusion between Identifier and QualifiedDataName (to be checked)
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; fixed NumericConstant to use Integer instead of INTEGER
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; Correcting AdvancingPhrase so LINE is optional
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; Fixed problems with abbreviated conditions
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; Fixed Add statement
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;/ol&amp;gt;
&lt;br&gt;&amp;nbsp;* &amp;lt;li&amp;gt;&amp;lt;date&amp;gt;01-sept-2009&amp;lt;/date&amp;gt; :&amp;lt;ol&amp;gt;
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; corrected picture values and enhanced linkage section
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; corrected relational operators, arithmetic expressions and conditions
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; corrected perform, evaluate and call clauses
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; corrected cobol word, litteral, identifier, comment declarations
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; created Iterables*() variants for some clauses
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; added function support from cobol 2000
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; added LOOKAHEAD() instructions, with reorderings, to remove parser ambiguities
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;li&amp;gt; ... and many many corrections, new clauses and new tokens relative to cobol 85 and (some from) cobol 2000
&lt;br&gt;&amp;nbsp;* &amp;nbsp; &amp;lt;/ol&amp;gt;
&lt;br&gt;&amp;nbsp;* &amp;lt;/ul&amp;gt;
&lt;br&gt;&amp;nbsp;*/
&lt;br&gt;&lt;br&gt;/**
&lt;br&gt;&amp;nbsp;* Cobol is not case sensitive. It is not LL(1) neither...
&lt;br&gt;&amp;nbsp;*/
&lt;br&gt;&lt;br&gt;options {
&lt;br&gt;&amp;nbsp; IGNORE_CASE = true;
&lt;br&gt;&amp;nbsp; //FORCE_LA_CHECK = true;
&lt;br&gt;&amp;nbsp; LOOKAHEAD = 3;
&lt;br&gt;&amp;nbsp; //DEBUG_PARSER = true;
&lt;br&gt;&amp;nbsp; //DEBUG_LOOKAHEAD = true;
&lt;br&gt;&amp;nbsp; STATIC = false;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;/**
&lt;br&gt;&amp;nbsp;* The parser class.
&lt;br&gt;&amp;nbsp;*/
&lt;br&gt;&lt;br&gt;PARSER_BEGIN(CobolParser)
&lt;br&gt;package convex.step2.parser;
&lt;br&gt;&lt;br&gt;public class CobolParser {
&lt;br&gt;&lt;br&gt;}
&lt;br&gt;&lt;br&gt;PARSER_END(CobolParser)
&lt;br&gt;&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;// Lexical structure
&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;&lt;br&gt;SPECIAL_TOKEN :
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt; EOL: &amp;quot;\n&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SPACECHAR: ( &amp;quot; &amp;quot; | &amp;quot;\t&amp;quot; | &amp;quot;\f&amp;quot; | &amp;quot;;&amp;quot; | &amp;quot;\r&amp;quot; )+ &amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;SPECIAL_TOKEN :
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt; COMMENT: ( &amp;quot;*&amp;gt;&amp;quot; | &amp;quot;|&amp;quot; ) (~[&amp;quot;\n&amp;quot;,&amp;quot;\r&amp;quot;])* &amp;gt;
&lt;br&gt;| &amp;lt; PREPROC_COMMENT: &amp;quot;*|&amp;quot; (~[&amp;quot;\n&amp;quot;,&amp;quot;\r&amp;quot;])* &amp;gt;
&lt;br&gt;| &amp;lt; SPACE_SEPARATOR : ( &amp;lt;SPACECHAR&amp;gt; | &amp;lt;EOL&amp;gt; )+ &amp;gt;
&lt;br&gt;| &amp;lt; COMMA_SEPARATOR : &amp;quot;,&amp;quot; &amp;lt;SPACE_SEPARATOR&amp;gt; &amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;TOKEN :
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; // TODO : Could be simplified by &amp;lt;DOTCHAR&amp;gt; ?
&lt;br&gt;&amp;nbsp; &amp;lt; DOT : &amp;lt;DOTCHAR&amp;gt; &amp;lt;SPACE_SEPARATOR&amp;gt; &amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;// RESERVED WORDS. Looks like an excerpt of the dictionary of data processing.
&lt;br&gt;// It is very hard to find significative identifiers in COBOL that are not
&lt;br&gt;// reserved...
&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;&lt;br&gt;TOKEN :
&lt;br&gt;{
&lt;br&gt;/* A */
&lt;br&gt;&amp;nbsp; &amp;lt; ACCEPT: &amp;quot;accept&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ACCESS: &amp;quot;access&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ADD: &amp;quot;add&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ADDRESS: &amp;quot;address&amp;quot; &amp;gt; // extension to support pointers
&lt;br&gt;| &amp;lt; ADVANCING: &amp;quot;advancing&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; AFTER: &amp;quot;after&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ALL: &amp;quot;all&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ALPHABET: &amp;quot;alphabet&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ALPHABETIC: &amp;quot;alphabetic&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ALPHABETIC_LOWER: &amp;quot;alphabetic-lower&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ALPHABETIC_UPPER: &amp;quot;alphabetic-upper&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ALPHANUMERIC: &amp;quot;alphanumeric&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ALPHANUMERIC_EDITED: &amp;quot;alphanumeric-edited&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ALSO: &amp;quot;also&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ALTER: &amp;quot;alter&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ALTERNATE: &amp;quot;alternate&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; AND: &amp;quot;and&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ANY: &amp;quot;any&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; APPROXIMATE: &amp;quot;approximate&amp;quot; &amp;gt; // tandem extension
&lt;br&gt;| &amp;lt; ARE: &amp;quot;are&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; AREA: &amp;quot;area&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; AREAS: &amp;quot;areas&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ASCENDING: &amp;quot;ascending&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ASSIGN: &amp;quot;assign&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; AT: &amp;quot;at&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; AUTHOR: &amp;quot;author&amp;quot; &amp;gt;
&lt;br&gt;/* B */
&lt;br&gt;| &amp;lt; BEFORE: &amp;quot;before&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; BEGINNING: &amp;quot;beginning&amp;quot; &amp;gt; // extension
&lt;br&gt;| &amp;lt; BINARY: &amp;quot;binary&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; BLANK: &amp;quot;blank&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; BLOCK: &amp;quot;block&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; BOTTOM: &amp;quot;bottom&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; BY: &amp;quot;by&amp;quot; &amp;gt;
&lt;br&gt;/* C */
&lt;br&gt;| &amp;lt; CALL: &amp;quot;call&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CALL_CONVENTION: &amp;quot;call-convention&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CANCEL: &amp;quot;cancel&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CD: &amp;quot;cd&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CF: &amp;quot;cf&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CH: &amp;quot;ch&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CHARACTER: &amp;quot;character&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CHARACTERS: &amp;quot;characters&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CLASS: &amp;quot;class&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CLOCK_UNITS: &amp;quot;clock-units&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CLOSE: &amp;quot;close&amp;quot; &amp;gt;
&lt;br&gt;//| &amp;lt; COBOL: &amp;quot;cobol&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CODE: &amp;quot;code&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CODE_SET: &amp;quot;code-set&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COLLATING: &amp;quot;collating&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COLUMN: &amp;quot;column&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMMA: &amp;quot;comma&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMMON: &amp;quot;common&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMMUNICATION: &amp;quot;communication&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP: &amp;quot;comp&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_1: &amp;quot;comp-1&amp;quot; &amp;gt; // extension in many dialects
&lt;br&gt;| &amp;lt; COMP_2: &amp;quot;comp-2&amp;quot; &amp;gt; // extension in many dialects
&lt;br&gt;| &amp;lt; COMP_3: &amp;quot;comp-3&amp;quot; &amp;gt; // extension in many dialects
&lt;br&gt;| &amp;lt; COMP_4: &amp;quot;comp-4&amp;quot; &amp;gt; // extension in many dialects
&lt;br&gt;| &amp;lt; COMPUTATIONAL: &amp;quot;computational&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_1: &amp;quot;computational-1&amp;quot; &amp;gt; // extension
&lt;br&gt;| &amp;lt; COMPUTATIONAL_2: &amp;quot;computational-2&amp;quot; &amp;gt; // extension
&lt;br&gt;| &amp;lt; COMPUTATIONAL_3: &amp;quot;computational-3&amp;quot; &amp;gt; // extension
&lt;br&gt;| &amp;lt; COMPUTATIONAL_4: &amp;quot;computational-4&amp;quot; &amp;gt; // extension
&lt;br&gt;| &amp;lt; COMPUTE: &amp;quot;compute&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CONFIGURATION: &amp;quot;configuration&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CONTAINS: &amp;quot;contains&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CONTENT: &amp;quot;content&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CONTINUE: &amp;quot;continue&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CONTROL: &amp;quot;control&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CONTROLS: &amp;quot;controls&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CONVERTING: &amp;quot;converting&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COPY: &amp;quot;copy&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CORR: &amp;quot;corr&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CORRESPONDING: &amp;quot;corresponding&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COUNT: &amp;quot;count&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; CURRENCY: &amp;quot;currency&amp;quot; &amp;gt;
&lt;br&gt;/* D */
&lt;br&gt;| &amp;lt; DATA: &amp;quot;data&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DATE: &amp;quot;date&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DATE_COMPILED: &amp;quot;date-compiled&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DATE_WRITTEN: &amp;quot;date-written&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DAY: &amp;quot;day&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DAY_OF_WEEK: &amp;quot;day-of-week&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DBCS: &amp;quot;dbcs&amp;quot; &amp;gt; // extension to support double bytes characters
&lt;br&gt;| &amp;lt; DE: &amp;quot;de&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DEBUG_CONTENTS: &amp;quot;debug-contents&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DEBUG_ITEM: &amp;quot;debug-item&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DEBUG_LINE: &amp;quot;debug-line&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DEBUG_NAME: &amp;quot;debug-name&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DEBUG_SUB_1: &amp;quot;debug-sub-1&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DEBUG_SUB_2: &amp;quot;debug-sub-2&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DEBUG_SUB_3: &amp;quot;debug-sub-3&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DEBUGGING: &amp;quot;debugging&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DECIMAL_POINT: &amp;quot;decimal-point&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DECLARATIVES: &amp;quot;declaratives&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DELETE: &amp;quot;delete&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DELIMITED: &amp;quot;delimited&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DELIMITER: &amp;quot;delimiter&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DEPENDING: &amp;quot;depending&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DESCENDING: &amp;quot;descending&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DESCRIPTOR: &amp;quot;descriptor&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DESTINATION: &amp;quot;destination&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DETAIL: &amp;quot;detail&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DISABLE: &amp;quot;disable&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DISPLAY: &amp;quot;display&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DISPLAY_1: &amp;quot;display-1&amp;quot; &amp;gt; // extension
&lt;br&gt;| &amp;lt; DIVIDE: &amp;quot;divide&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DIVISION: &amp;quot;division&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DOWN: &amp;quot;down&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DUPLICATES: &amp;quot;duplicates&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DYNAMIC: &amp;quot;dynamic&amp;quot; &amp;gt;
&lt;br&gt;/* E */
&lt;br&gt;| &amp;lt; EGCS: &amp;quot;egcs&amp;quot; &amp;gt; // extension
&lt;br&gt;| &amp;lt; EGI: &amp;quot;egi&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ELSE: &amp;quot;else&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; EMI: &amp;quot;emi&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ENABLE: &amp;quot;enable&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END: &amp;quot;end&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_ADD: &amp;quot;end-add&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_CALL: &amp;quot;end-call&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_COMPUTE: &amp;quot;end-compute&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_DELETE: &amp;quot;end-delete&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_DIVIDE: &amp;quot;end-divide&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_EVALUATE: &amp;quot;end-evaluate&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_IF: &amp;quot;end-if&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_MULTIPLY: &amp;quot;end-multiply&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_OF_PAGE: &amp;quot;end-of-page&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_PERFORM: &amp;quot;end-perform&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_READ: &amp;quot;end-read&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_RECEIVE: &amp;quot;end-receive&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_RETURN: &amp;quot;end-return&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_REWRITE: &amp;quot;end-rewrite&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_SEARCH: &amp;quot;end-search&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_START: &amp;quot;end-start&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_STRING: &amp;quot;end-string&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_SUBTRACT: &amp;quot;end-subtract&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_UNSTRING: &amp;quot;end-unstring&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; END_WRITE: &amp;quot;end-write&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ENDING: &amp;quot;endinf&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ENTER: &amp;quot;enter&amp;quot; &amp;gt; // not present in all COBOLs, use CALL instead
&lt;br&gt;| &amp;lt; ENTRY: &amp;quot;entry&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ENVIRONMENT: &amp;quot;environment&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; EOP: &amp;quot;eop&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; EQUAL: &amp;quot;equal&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ERROR: &amp;quot;error&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ESI: &amp;quot;esi&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; EVALUATE: &amp;quot;evaluate&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; EVERY: &amp;quot;every&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; EXCEPTION: &amp;quot;exception&amp;quot; &amp;gt;
&lt;br&gt;/* | &amp;lt; EXCLUSIVE: &amp;quot;exclusive&amp;quot; &amp;gt; tandem extension */
&lt;br&gt;| &amp;lt; EXIT: &amp;quot;exit&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; EXTEND: &amp;quot;extend&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; EXTERNAL: &amp;quot;external&amp;quot; &amp;gt;
&lt;br&gt;/* F */
&lt;br&gt;| &amp;lt; FALSE: &amp;quot;false&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; FD: &amp;quot;fd&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; FILE: &amp;quot;file&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; FILE_CONTROL: &amp;quot;file-control&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; FILLER: &amp;quot;filler&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; FINAL: &amp;quot;final&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; FIRST: &amp;quot;first&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; FOOTING: &amp;quot;footing&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; FOR: &amp;quot;for&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; FROM: &amp;quot;from&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; FUNCTION: &amp;quot;function&amp;quot; &amp;gt;
&lt;br&gt;/* G */
&lt;br&gt;| &amp;lt; GENERATE: &amp;quot;generate&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; GOBACK: &amp;quot;goback&amp;quot; &amp;gt; // extension
&lt;br&gt;| &amp;lt; GENERIC: &amp;quot;generic&amp;quot; &amp;gt; // tandem extension
&lt;br&gt;| &amp;lt; GIVING: &amp;quot;giving&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; GLOBAL: &amp;quot;global&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; GO: &amp;quot;go&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; GREATER: &amp;quot;greater&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; GROUP: &amp;quot;group&amp;quot; &amp;gt;
&lt;br&gt;/* H */
&lt;br&gt;| &amp;lt; HEADING: &amp;quot;heading&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; HIGH_VALUE: &amp;quot;high-value&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; HIGH_VALUES: &amp;quot;high-values&amp;quot; &amp;gt;
&lt;br&gt;/* I */
&lt;br&gt;| &amp;lt; I_O: &amp;quot;i-o&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; I_O_CONTROL: &amp;quot;i-o-control&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ID: &amp;quot;id&amp;quot; &amp;gt; // extension, synonym for IDENTIFICATION
&lt;br&gt;| &amp;lt; IDENTIFICATION: &amp;quot;identification&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; IDENTIFIED: &amp;quot;identified&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; IF: &amp;quot;if&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; IMPLICIT: &amp;quot;implicit&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; IN: &amp;quot;in&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; INDEX: &amp;quot;index&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; INDEXED: &amp;quot;indexed&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; INDICATE: &amp;quot;indicate&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; INITIAL: &amp;quot;initial&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; INITIALIZE: &amp;quot;initialize&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; INITIATE: &amp;quot;initiate&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; INPUT: &amp;quot;input&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; INPUT_OUTPUT: &amp;quot;input-output&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; INSPECT: &amp;quot;inspect&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; INSTALLATION: &amp;quot;installation&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; INTO: &amp;quot;into&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; INVALID: &amp;quot;invalid&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; IS: &amp;quot;is&amp;quot; &amp;gt;
&lt;br&gt;/* J */
&lt;br&gt;| &amp;lt; JUST: &amp;quot;just&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; JUSTIFIED: &amp;quot;justified&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; JUSTIFY: &amp;quot;justify&amp;quot; &amp;gt;
&lt;br&gt;/* K */
&lt;br&gt;| &amp;lt; KANJI: &amp;quot;kanji&amp;quot; &amp;gt; // extension to support Kanji characters (japanese)
&lt;br&gt;| &amp;lt; KEY: &amp;quot;key&amp;quot; &amp;gt;
&lt;br&gt;/* L */
&lt;br&gt;| &amp;lt; LABEL: &amp;quot;label&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LAST: &amp;quot;last&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LEADING: &amp;quot;leading&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LEFT: &amp;quot;left&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LENGTH: &amp;quot;length&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LESS: &amp;quot;less&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LIMIT: &amp;quot;limit&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LIMITS: &amp;quot;limits&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LINAGE: &amp;quot;linage&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LINAGE_COUNTER: &amp;quot;linage_counter&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LINE: &amp;quot;line&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LINES: &amp;quot;lines&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LINE_COUNTER: &amp;quot;line-counter&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LINKAGE: &amp;quot;linkage&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LOCK: &amp;quot;lock&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LOCKFILE: &amp;quot;lockfile&amp;quot; &amp;gt; // tandem extension
&lt;br&gt;| &amp;lt; LOW_VALUE: &amp;quot;low-value&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LOW_VALUES: &amp;quot;low-values&amp;quot; &amp;gt;
&lt;br&gt;/* M */
&lt;br&gt;| &amp;lt; MEMORY: &amp;quot;memory&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; MERGE: &amp;quot;merge&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; MESSAGE: &amp;quot;message&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; MODE: &amp;quot;mode&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; MODULES: &amp;quot;modules&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; MORE_LABELS: &amp;quot;more-labels&amp;quot; &amp;gt; // IBM extension
&lt;br&gt;| &amp;lt; MOVE: &amp;quot;move&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; MULTIPLE: &amp;quot;multiple&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; MULTIPLY: &amp;quot;multiply&amp;quot; &amp;gt;
&lt;br&gt;/* N */
&lt;br&gt;| &amp;lt; NATIVE: &amp;quot;native&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; NEGATIVE: &amp;quot;negative&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; NEXT: &amp;quot;next&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; NO: &amp;quot;no&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; NOT: &amp;quot;not&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; NULL: &amp;quot;null&amp;quot; &amp;gt; // tandem &amp; IBM extension
&lt;br&gt;| &amp;lt; NULLS: &amp;quot;nulls&amp;quot; &amp;gt; // tandem &amp; IBM extension
&lt;br&gt;| &amp;lt; NUMBER: &amp;quot;number&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; NUMERIC: &amp;quot;numeric&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; NUMERIC_EDITED: &amp;quot;numeric-edited&amp;quot; &amp;gt;
&lt;br&gt;/* O */
&lt;br&gt;| &amp;lt; OBJECT_COMPUTER: &amp;quot;object-computer&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; OCCURS: &amp;quot;occurs&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; OF: &amp;quot;of&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; OFF: &amp;quot;off&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; OMITTED: &amp;quot;omitted&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ON: &amp;quot;on&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; OPEN: &amp;quot;open&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; OPTIONAL: &amp;quot;optional&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; OR: &amp;quot;or&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ORDER: &amp;quot;order&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ORGANIZATION: &amp;quot;organization&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; OTHER: &amp;quot;other&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; OUTPUT: &amp;quot;output&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; OVERFLOW: &amp;quot;overflow&amp;quot; &amp;gt;
&lt;br&gt;/* P */
&lt;br&gt;| &amp;lt; PACKED_DECIMAL: &amp;quot;packed-decimal&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PADDING: &amp;quot;padding&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PAGE: &amp;quot;page&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PAGE_COUNTER: &amp;quot;page-counter&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PASSWORD: &amp;quot;password&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PERFORM: &amp;quot;perform&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PF: &amp;quot;pf&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PH: &amp;quot;ph&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PIC: &amp;quot;pic&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PICTURE: &amp;quot;picture&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PLUS: &amp;quot;plus&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; POINTER: &amp;quot;pointer&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; POSITION: &amp;quot;position&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; POSITIVE: &amp;quot;positive&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PRINTING: &amp;quot;printing&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PROCEDURE: &amp;quot;procedure&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PROCEDURES: &amp;quot;procedures&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PROCEDURE_POINTER: &amp;quot;procedure-pointer&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PROCEED: &amp;quot;proceed&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PROGRAM: &amp;quot;program&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PROGRAM_ID: &amp;quot;program-id&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PROGRAM_STATUS: &amp;quot;program-status&amp;quot; &amp;gt; // tandem extension
&lt;br&gt;| &amp;lt; PROMPT: &amp;quot;prompt&amp;quot; &amp;gt; // tandem extension
&lt;br&gt;| &amp;lt; PROTECTED: &amp;quot;protected&amp;quot; &amp;gt; // tandem extension
&lt;br&gt;| &amp;lt; PURGE: &amp;quot;purge&amp;quot; &amp;gt;
&lt;br&gt;/* Q */
&lt;br&gt;| &amp;lt; QUEUE: &amp;quot;queue&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; QUOTE: &amp;quot;quote&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; QUOTES: &amp;quot;quotes&amp;quot; &amp;gt;
&lt;br&gt;/* R */
&lt;br&gt;| &amp;lt; RANDOM: &amp;quot;random&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RD: &amp;quot;rd&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; READ: &amp;quot;read&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RECEIVE: &amp;quot;receive&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RECEIVE_CONTROL: &amp;quot;receive-control&amp;quot; &amp;gt; // tandem extension
&lt;br&gt;| &amp;lt; RECORD: &amp;quot;record&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RECORDING: &amp;quot;recording&amp;quot; &amp;gt; // probably IBM extension
&lt;br&gt;| &amp;lt; RECORDS: &amp;quot;records&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; REDEFINES: &amp;quot;redefines&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; REEL: &amp;quot;reel&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; REFERENCE: &amp;quot;reference&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; REFERENCES: &amp;quot;references&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RELATIVE: &amp;quot;relative&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RELEASE: &amp;quot;release&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; REMAINDER: &amp;quot;remainder&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; REMOVAL: &amp;quot;removal&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RENAMES: &amp;quot;renames&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; REPLACE: &amp;quot;replace&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; REPLACING: &amp;quot;replacing&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; REPLY: &amp;quot;reply&amp;quot; &amp;gt; // tandem extension
&lt;br&gt;| &amp;lt; REPORT: &amp;quot;report&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; REPORTING: &amp;quot;reporting&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; REPORTS: &amp;quot;reports&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RERUN: &amp;quot;rerun&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RESERVE: &amp;quot;reserve&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RESET: &amp;quot;reset&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RETURN: &amp;quot;return&amp;quot; &amp;gt; // IBM extension - does not do what expected ;-)
&lt;br&gt;| &amp;lt; RETURN_CODE: &amp;quot;return-code&amp;quot; &amp;gt; // special register IBM
&lt;br&gt;| &amp;lt; RETURNED: &amp;quot;returned&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RETURNING: &amp;quot;returning&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; REVERSED: &amp;quot;reversed&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; REWIND: &amp;quot;rewind&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; REWRITE: &amp;quot;rewrite&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RF: &amp;quot;rf&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RH: &amp;quot;rh&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RIGHT: &amp;quot;right&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ROUNDED: &amp;quot;rounded&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RUN: &amp;quot;run&amp;quot; &amp;gt;
&lt;br&gt;/* S */
&lt;br&gt;| &amp;lt; SAME: &amp;quot;same&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SD: &amp;quot;sd&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SEARCH: &amp;quot;search&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SECTION: &amp;quot;section&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SECURITY: &amp;quot;security&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SEGMENT: &amp;quot;segment&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SEGMENT_LIMIT: &amp;quot;segment-limit&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SELECT: &amp;quot;select&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SEND: &amp;quot;send&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SENTENCE: &amp;quot;sentence&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SEPARATE: &amp;quot;separate&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SEQUENCE: &amp;quot;sequence&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SEQUENTIAL: &amp;quot;sequential&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SET: &amp;quot;set&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SHARED: &amp;quot;shared&amp;quot; &amp;gt; // tandem extension, should be in C2000
&lt;br&gt;| &amp;lt; SHIFT_IN: &amp;quot;shift-in&amp;quot; &amp;gt; // IBM special register
&lt;br&gt;| &amp;lt; SHIFT_OUT: &amp;quot;shift-out&amp;quot; &amp;gt; // IBM special register
&lt;br&gt;| &amp;lt; SIGN: &amp;quot;sign&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SIZE: &amp;quot;size&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SORT: &amp;quot;sort&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SORT_CONTROL: &amp;quot;sort-control&amp;quot; &amp;gt; // IBM special register
&lt;br&gt;| &amp;lt; SORT_CORE_SIZE: &amp;quot;sort-core-size&amp;quot; &amp;gt; // IBM special register
&lt;br&gt;| &amp;lt; SORT_FILE_SIZE: &amp;quot;sort-file-size&amp;quot; &amp;gt; // IBM special register
&lt;br&gt;| &amp;lt; SORT_MERGE: &amp;quot;sort-merge&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SORT_MESSAGE: &amp;quot;sort-message&amp;quot; &amp;gt; // IBM special register
&lt;br&gt;| &amp;lt; SORT_MODE_SIZE: &amp;quot;sort-mode-size&amp;quot; &amp;gt; // IBM special register
&lt;br&gt;| &amp;lt; SORT_RETURN: &amp;quot;sort-return&amp;quot; &amp;gt; // IBM special register
&lt;br&gt;| &amp;lt; SOURCE: &amp;quot;source&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SOURCE_COMPUTER: &amp;quot;source-computer&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SPACE: &amp;quot;space&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SPACES: &amp;quot;spaces&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SPECIAL_NAMES: &amp;quot;special-names&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; STANDARD: &amp;quot;standard&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; STANDARD_1: &amp;quot;standard-1&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; STANDARD_2: &amp;quot;standard-2&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; START: &amp;quot;start&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; STATUS: &amp;quot;status&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; STDCALL: &amp;quot;stdcall&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; STOP: &amp;quot;stop&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; STRING: &amp;quot;string&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SUB_QUEUE_1: &amp;quot;sub-queue-1&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SUB_QUEUE_2: &amp;quot;sub-queue-2&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SUB_QUEUE_3: &amp;quot;sub-queue-3&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SUBTRACT: &amp;quot;subtract&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SUM: &amp;quot;sum&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SUPPRESS: &amp;quot;suppress&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SYMBOLIC: &amp;quot;symbolic&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SYNC: &amp;quot;sync&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SYNCHRONIZED: &amp;quot;synchronized&amp;quot; &amp;gt;
&lt;br&gt;/* T */
&lt;br&gt;| &amp;lt; TABLE: &amp;quot;table&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; TALLY: &amp;quot;tally&amp;quot; &amp;gt; // IBM special register
&lt;br&gt;| &amp;lt; TALLYING: &amp;quot;tallying&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; TAPE: &amp;quot;tape&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; TERMINAL: &amp;quot;terminal&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; TERMINATE: &amp;quot;terminate&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; TEST: &amp;quot;test&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; TEXT: &amp;quot;text&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; THAN: &amp;quot;than&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; THEN: &amp;quot;then&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; THROUGH: &amp;quot;through&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; THRU: &amp;quot;thru&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; TIME: &amp;quot;time&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; TIMES: &amp;quot;times&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; TO: &amp;quot;to&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; TOP: &amp;quot;top&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; TRAILING: &amp;quot;trailing&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; TRUE: &amp;quot;true&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; TYPE: &amp;quot;type&amp;quot; &amp;gt;
&lt;br&gt;/* U */
&lt;br&gt;| &amp;lt; UNIT: &amp;quot;unit&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; UNLOCK: &amp;quot;unlock&amp;quot; &amp;gt; // tandem extension
&lt;br&gt;| &amp;lt; UNLOCKFILE: &amp;quot;unlockfile&amp;quot; &amp;gt; // tandem again
&lt;br&gt;| &amp;lt; UNLOCKRECORD: &amp;quot;unlockrecord&amp;quot; &amp;gt; // guess what
&lt;br&gt;| &amp;lt; UNSTRING: &amp;quot;unstring&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; UNTIL: &amp;quot;until&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; UP: &amp;quot;up&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; UPON: &amp;quot;upon&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; USAGE: &amp;quot;usage&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; USE: &amp;quot;use&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; USING: &amp;quot;using&amp;quot; &amp;gt;
&lt;br&gt;/* V */
&lt;br&gt;| &amp;lt; VALUE: &amp;quot;value&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; VALUES: &amp;quot;values&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; VARYING: &amp;quot;varying&amp;quot; &amp;gt;
&lt;br&gt;/* W */
&lt;br&gt;| &amp;lt; WHEN: &amp;quot;when&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; WHEN_COMPILED: &amp;quot;when-compiled&amp;quot; &amp;gt; // IBM special register
&lt;br&gt;| &amp;lt; WITH: &amp;quot;with&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; WORDS: &amp;quot;words&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; WORKING_STORAGE: &amp;quot;working-storage&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; WRITE: &amp;quot;write&amp;quot; &amp;gt;
&lt;br&gt;/* Z */
&lt;br&gt;| &amp;lt; ZERO: &amp;quot;zero&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ZEROS: &amp;quot;zeros&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ZEROES: &amp;quot;zeroes&amp;quot; &amp;gt;
&lt;br&gt;/* Newly added */
&lt;br&gt;| &amp;lt; ALPHANUMERIC_HASHTABLE: &amp;quot;alphanumeric-hashtable&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; BINARY_BYTE: &amp;quot;binary-byte&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; BINARY_DOUBLE: &amp;quot;binary-double&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; BINARY_LONG: &amp;quot;binary-long&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; BINARY_M: &amp;quot;binary-m&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; BINARY_REV: &amp;quot;binary-rev&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; BINARY_SHORT: &amp;quot;binary-short&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; BIT: &amp;quot;bit&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPONENT: &amp;quot;component&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_2_A: &amp;quot;computational-2-a&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_1_A: &amp;quot;computational-1-a&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_1_E: &amp;quot;computational-1-e&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_1_M: &amp;quot;computational-1-m&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_1_MVS: &amp;quot;computational-1-mvs&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_1_REV: &amp;quot;computational-1-rev&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_2_E: &amp;quot;computational-2-e&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_2_M: &amp;quot;computational-2-m&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_2_MVS: &amp;quot;computational-2-mvs&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_2_REV: &amp;quot;computational-2-rev&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_3_A: &amp;quot;computational-3-a&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_3_M: &amp;quot;computational-3-m&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_4_M: &amp;quot;computational-4-m&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_5: &amp;quot;computational-5&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_5_M: &amp;quot;computational-5-m&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_6: &amp;quot;computational-6&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_A: &amp;quot;computational-a&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_B: &amp;quot;computational-b&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_D: &amp;quot;computational-d&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_M: &amp;quot;computational-m&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_N: &amp;quot;computational-n&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_P: &amp;quot;computational-p&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_S: &amp;quot;computational-s&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_X: &amp;quot;computational-x&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMPUTATIONAL_X_REV: &amp;quot;computational-x-rev&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_1_A: &amp;quot;comp-1-a&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_1_E: &amp;quot;comp-1-e&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_1_M: &amp;quot;comp-1-m&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_1_MVS: &amp;quot;comp-1-mvs&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_1_REV: &amp;quot;comp-1-rev&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_2_A: &amp;quot;comp-2-a&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_2_E: &amp;quot;comp-2-e&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_2_M: &amp;quot;comp-2-m&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_2_MVS: &amp;quot;comp-2-mvs&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_2_REV: &amp;quot;comp-2-rev&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_3_A: &amp;quot;comp-3-a&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_3_M: &amp;quot;comp-3-m&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_4_M: &amp;quot;comp-4-m&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_5: &amp;quot;comp-5&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_5_M: &amp;quot;comp-5-m&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_6: &amp;quot;comp-6&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_A: &amp;quot;comp-a&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_B: &amp;quot;comp-b&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_D: &amp;quot;comp-d&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_M: &amp;quot;comp-m&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_N: &amp;quot;comp-n&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_P: &amp;quot;comp-p&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_S: &amp;quot;comp-s&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_X: &amp;quot;comp-x&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMP_X_REV: &amp;quot;comp-x-rev&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DEFAULT_FONT: &amp;quot;default-font&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DISPLAY_WS: &amp;quot;display-ws&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DOUBLE: &amp;quot;double&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; EXTERNAL_FORM: &amp;quot;external-form&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; FIXED_FONT: &amp;quot;fixed-font&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; FLOAT: &amp;quot;float&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; FLOAT_LONG: &amp;quot;float-long&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; FLOAT_SHORT: &amp;quot;float-short&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; FONT: &amp;quot;font&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; HANDLE: &amp;quot;handle&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; JBOOLEAN: &amp;quot;jboolean&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; JBYTE: &amp;quot;jbyte&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; JCHAR: &amp;quot;jchar&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; JDOUBLE: &amp;quot;jdouble&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; JFLOAT: &amp;quot;jfloat&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; JINT: &amp;quot;jint&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; JLONG: &amp;quot;jlong&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; JPACKED_DECIMAL: &amp;quot;jpacked-decimal&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; JSHORT: &amp;quot;jshort&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; JSTRING: &amp;quot;jstring&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LARGE_FONT: &amp;quot;large-font&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; MEDIUM_FONT: &amp;quot;medium-font&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; NATIONAL: &amp;quot;national&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; NUMERIC_HASHTABLE: &amp;quot;numeric-hashtable&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; OBJECT: &amp;quot;object&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; OBJECT_HASHTABLE: &amp;quot;object-hashtable&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PACKED_DECIMAL_A: &amp;quot;packed-decimal-a&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PACKED_DECIMAL_E: &amp;quot;packed-decimal-e&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PACKED_DECIMAL_H: &amp;quot;packed-decimal-h&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PACKED_DECIMAL_I: &amp;quot;packed-decimal-i&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PACKED_DECIMAL_M: &amp;quot;packed-decimal-m&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SIGNED_INT: &amp;quot;signed-int&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SIGNED_LONG: &amp;quot;signed-long&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SIGNED_SHORT: &amp;quot;signed-short&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SMALL_FONT: &amp;quot;small-font&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SQLIND: &amp;quot;sqlind&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; THREAD: &amp;quot;thread&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; TRADITIONAL_FONT: &amp;quot;traditional-font&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; UNSIGNED_INT: &amp;quot;unsigned-int&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; UNSIGNED_LONG: &amp;quot;unsigned-long&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; UNSIGNED_SHORT: &amp;quot;unsigned-short&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; WINDOW: &amp;quot;window&amp;quot; &amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;TOKEN :
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt; LEVEL_66: &amp;quot;66&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LEVEL_77: &amp;quot;77&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LEVEL_88: &amp;quot;88&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LEVEL_NUMBER: ( ((&amp;quot;0&amp;quot;)? [&amp;quot;1&amp;quot;-&amp;quot;9&amp;quot;]) | ([&amp;quot;1&amp;quot;-&amp;quot;4&amp;quot;][&amp;quot;0&amp;quot;-&amp;quot;9&amp;quot;]) | &amp;quot;78&amp;quot; ) &amp;gt;
&lt;br&gt;| &amp;lt; INTEGER: ([&amp;quot;0&amp;quot;-&amp;quot;9&amp;quot;])+ &amp;gt;
&lt;br&gt;| &amp;lt; MINUSCHAR: &amp;quot;-&amp;quot; &amp;gt; // a.k.a. dash
&lt;br&gt;| &amp;lt; LPARENCHAR: &amp;quot;(&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; RPARENCHAR: &amp;quot;)&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COLONCHAR: &amp;quot;:&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DOTCHAR: &amp;quot;.&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; COMMACHAR: &amp;quot;,&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DOUBLEDQUOTECHAR: &amp;quot;\&amp;quot;\&amp;quot;&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; QUOTECHAR: &amp;quot;\&amp;quot;&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DOUBLEDAPOSTROPHE: &amp;quot;''&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; APOSTROPHE: &amp;quot;'&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; PLUSCHAR: &amp;quot;+&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; ASTERISKCHAR: &amp;quot;*&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; POWEROF: &amp;quot;**&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; SLASHCHAR: &amp;quot;/&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; DOLLARCHAR: &amp;quot;$&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LESSTHANOREQUAL: &amp;quot;&amp;lt;=&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; LESSTHANCHAR: &amp;quot;&amp;lt;&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; MORETHANOREQUAL: &amp;quot;&amp;gt;=&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; MORETHANCHAR: &amp;quot;&amp;gt;&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; EQUALCHAR: &amp;quot;=&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; NOTEQUAL: &amp;quot;&amp;lt;&amp;gt;&amp;quot; &amp;gt;
&lt;br&gt;| &amp;lt; HEXNUMBER: [&amp;quot;h&amp;quot;,&amp;quot;x&amp;quot;] ( ( &amp;lt;QUOTECHAR&amp;gt; ( [&amp;quot;0&amp;quot;-&amp;quot;9&amp;quot;,&amp;quot;a&amp;quot;-&amp;quot;f&amp;quot;] )+ &amp;lt;QUOTECHAR&amp;gt; )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| ( &amp;lt;APOSTROPHE&amp;gt; ( [&amp;quot;0&amp;quot;-&amp;quot;9&amp;quot;,&amp;quot;a&amp;quot;-&amp;quot;f&amp;quot;] )+ &amp;lt;APOSTROPHE&amp;gt; )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;&amp;nbsp; &amp;gt;
&lt;br&gt;| &amp;lt; QUOTEDSTRING: ( &amp;lt;QUOTECHAR&amp;gt; (~[&amp;quot;\&amp;quot;&amp;quot;] | &amp;lt;DOUBLEDQUOTECHAR&amp;gt; )* &amp;lt;QUOTECHAR&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;lt;APOSTROPHE&amp;gt; (~[&amp;quot;'&amp;quot;] | &amp;lt;DOUBLEDAPOSTROPHE&amp;gt; )* &amp;lt;APOSTROPHE&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )
&lt;br&gt;&amp;nbsp; &amp;gt;
&lt;br&gt;&amp;nbsp; // NB : COBOL_WORD can be defined as an INTEGER (or a LEVEL_66* or a LEVEL_NUMBER) too !
&lt;br&gt;| &amp;lt; COBOL_WORD: ([&amp;quot;a&amp;quot;-&amp;quot;z&amp;quot;,&amp;quot;0&amp;quot;-&amp;quot;9&amp;quot;])+ ( (&amp;lt;MINUSCHAR&amp;gt; | &amp;quot;_&amp;quot; )+ ([&amp;quot;a&amp;quot;-&amp;quot;z&amp;quot;,&amp;quot;0&amp;quot;-&amp;quot;9&amp;quot;])+ )* &amp;gt;
&lt;br&gt;| &amp;lt; OTHER_CHARS: ~[] &amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;// Contains at least one alphabetic, max. 30 char
&lt;br&gt;void CobolWord() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;COBOL_WORD&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void QuotedText() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( IterableQuotedText() )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void IterableQuotedText() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;QUOTEDSTRING&amp;gt; | &amp;lt;DOUBLEDQUOTECHAR&amp;gt; | &amp;lt;DOUBLEDAPOSTROPHE&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void IntegerConstant() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;LEVEL_66&amp;gt; | &amp;lt;LEVEL_77&amp;gt; | &amp;lt;LEVEL_88&amp;gt; | &amp;lt;LEVEL_NUMBER&amp;gt; | &amp;lt;INTEGER&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void NumericConstant() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;PLUSCHAR&amp;gt; | &amp;lt;MINUSCHAR&amp;gt; ] ( ( &amp;lt;DOTCHAR&amp;gt; | &amp;lt;COMMACHAR&amp;gt; ) IntegerConstant() | IntegerConstant() [ ( &amp;lt;DOTCHAR&amp;gt; | &amp;lt;COMMACHAR&amp;gt; ) IntegerConstant() ] )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void LevelNumber() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;LEVEL_NUMBER&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void FigurativeConstant() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;ZERO&amp;gt; | &amp;lt;ZEROS&amp;gt; | &amp;lt;ZEROES&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;SPACE&amp;gt; | &amp;lt;SPACES&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;HIGH_VALUE&amp;gt; | &amp;lt;HIGH_VALUES&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;LOW_VALUE&amp;gt; | &amp;lt;LOW_VALUES&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;QUOTE&amp;gt; | &amp;lt;QUOTES&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;NULL&amp;gt; | &amp;lt;NULLS&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void NonNumericConstant() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( QuotedText()
&lt;br&gt;&amp;nbsp; | &amp;lt;HEXNUMBER&amp;gt;
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void IterableNonNumericConstant() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( IterableQuotedText()
&lt;br&gt;&amp;nbsp; | &amp;lt;HEXNUMBER&amp;gt;
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void Literal() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;ALL&amp;gt; ] ( NonNumericConstant()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | NumericConstant()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* | &amp;lt;DBCS&amp;gt; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | FigurativeConstant()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void IterableLiteral() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;ALL&amp;gt; ] ( IterableNonNumericConstant()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | NumericConstant()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* | &amp;lt;DBCS&amp;gt; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | FigurativeConstant()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;// LOGICAL EXPRESSIONS (e.g. in IF statements)
&lt;br&gt;// one of the nice feature of COBOL is to allow for abbeviated conditions
&lt;br&gt;// such as : if X less than 100 and more than 10 then ...
&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;&lt;br&gt;void IterableCondition() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; // TODO : This step was created because of the ambiguite of the rule ClassCondition() inside of RelationCondition() :
&lt;br&gt;&amp;nbsp; // &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CobolWord() CobolWord() === ArithmeticExpression() ClassCondition()
&lt;br&gt;&amp;nbsp; LOOKAHEAD(ArithmeticExpression())
&lt;br&gt;&amp;nbsp; &amp;nbsp; ArithmeticExpression()
&lt;br&gt;&amp;nbsp; | &amp;lt;LPARENCHAR&amp;gt; Condition() &amp;lt;RPARENCHAR&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void Condition() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CombinableCondition() ( ( &amp;lt;AND&amp;gt; | &amp;lt;OR&amp;gt; ) ( LOOKAHEAD(CombinableCondition()) CombinableCondition() | AbbreviationRest() ) )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CombinableCondition() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; ] SimpleCondition()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SimpleCondition() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; LOOKAHEAD(RelationCondition())
&lt;br&gt;&amp;nbsp; &amp;nbsp; RelationCondition()
&lt;br&gt;&amp;nbsp; | LOOKAHEAD(ArithmeticExpression())
&lt;br&gt;&amp;nbsp; &amp;nbsp; ArithmeticExpression()
&lt;br&gt;&amp;nbsp; | &amp;lt;LPARENCHAR&amp;gt; Condition() &amp;lt;RPARENCHAR&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ClassCondition() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;IS&amp;gt; ] [ &amp;lt;NOT&amp;gt; ] ( &amp;lt;NUMERIC&amp;gt; | &amp;lt;ALPHABETIC&amp;gt; | &amp;lt;ALPHABETIC_LOWER&amp;gt; | &amp;lt;ALPHABETIC_UPPER&amp;gt; | ClassName() | &amp;lt;DBCS&amp;gt; | &amp;lt;KANJI&amp;gt; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void RelationCondition() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ArithmeticExpression() ( LOOKAHEAD(AbbreviationRest())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AbbreviationRest()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| LOOKAHEAD(SignCondition())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SignCondition()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| ClassCondition()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SignCondition() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;IS&amp;gt; ] [ &amp;lt;NOT&amp;gt; ] ( &amp;lt;POSITIVE&amp;gt; | &amp;lt;NEGATIVE&amp;gt; | &amp;lt;ZERO&amp;gt; | &amp;lt;ZEROS&amp;gt; | &amp;lt;ZEROES&amp;gt; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void RelationalOperator() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;IS&amp;gt; ] [ &amp;lt;NOT&amp;gt; ] ( &amp;lt;GREATER&amp;gt; [ &amp;lt;THAN&amp;gt; ] [ &amp;lt;OR&amp;gt; &amp;lt;EQUAL&amp;gt; [ &amp;lt;TO&amp;gt; ] ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;lt;MORETHANCHAR&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;lt;LESS&amp;gt; [ &amp;lt;THAN&amp;gt; ] [ &amp;lt;OR&amp;gt; &amp;lt;EQUAL&amp;gt; [ &amp;lt;TO&amp;gt; ] ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;lt;LESSTHANCHAR&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;lt;EQUAL&amp;gt; [ &amp;lt;TO&amp;gt; ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;lt;EQUALCHAR&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;lt;NOTEQUAL&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;lt;MORETHANOREQUAL&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;lt;LESSTHANOREQUAL&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void AbbreviationLeaf() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; LOOKAHEAD(ArithmeticExpression())
&lt;br&gt;&amp;nbsp; &amp;nbsp; ArithmeticExpression()
&lt;br&gt;&amp;nbsp; // TODO : Is there another abbreviation rule ?
&lt;br&gt;&amp;nbsp; | &amp;lt;LPARENCHAR&amp;gt; AbbreviationLeaf() ( &amp;lt;OR&amp;gt; AbbreviationLeaf() )+ &amp;lt;RPARENCHAR&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void AbbreviationRest() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; RelationalOperator() AbbreviationLeaf()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;// VARIOUS TYPES OF IDENTIFIERS
&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;&lt;br&gt;void ProcedureName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( ParagraphName() [ ( &amp;lt;IN&amp;gt; | &amp;lt;OF&amp;gt; ) SectionName() ]
&lt;br&gt;&amp;nbsp; | SectionName() // Useless here ...
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void Subscript() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;LPARENCHAR&amp;gt; ( ArithmeticExpression() )+ &amp;lt;RPARENCHAR&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void FunctionClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;FUNCTION&amp;gt; FunctionName() [ LOOKAHEAD(Subscript()) Subscript() ] [ &amp;lt;LPARENCHAR&amp;gt; LeftmostCharacterPosition() &amp;lt;COLONCHAR&amp;gt; [ Length() ] &amp;lt;RPARENCHAR&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void Identifier() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( QualifiedDataName() ( LOOKAHEAD(Subscript()) Subscript() )* [ &amp;lt;LPARENCHAR&amp;gt; LeftmostCharacterPosition() &amp;lt;COLONCHAR&amp;gt; [ Length() ] &amp;lt;RPARENCHAR&amp;gt; ]
&lt;br&gt;&amp;nbsp; | &amp;lt;LINAGE_COUNTER&amp;gt; [ ( &amp;lt;IN&amp;gt; | &amp;lt;OF&amp;gt; ) FileName() ]
&lt;br&gt;&amp;nbsp; | &amp;lt;PROGRAM_STATUS&amp;gt;
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void QualifiedDataName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( DataName() ( ( &amp;lt;IN&amp;gt; | &amp;lt;OF&amp;gt; ) DataName() )*
&lt;br&gt;&amp;nbsp; [ ( &amp;lt;IN&amp;gt; | &amp;lt;OF&amp;gt; ) FileName() ] // Useless part here ...
&lt;br&gt;&amp;nbsp; | SpecialRegister() // Useless here ...
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void Length() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ArithmeticExpression()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void LeftmostCharacterPosition() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ArithmeticExpression()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void Mode() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void AlphabetName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ClassName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ConditionName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void FileName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void IndexName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void MnemonicName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void RecordName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; Identifier()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void RoutineName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SymbolicCharacter() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void LibraryName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ProgramName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SectionName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; // We force IntegerConstant() recognization here ...
&lt;br&gt;&amp;nbsp; IntegerConstant() | CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ParagraphName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; // We force IntegerConstant() recognization here ...
&lt;br&gt;&amp;nbsp; IntegerConstant() | CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SystemName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ComputerName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; SystemName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void LanguageName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; SystemName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void EnvironmentName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; SystemName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void AssignmentName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; SystemName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void BasisName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ProgramName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void FunctionName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( CobolWord()
&lt;br&gt;&amp;nbsp; | &amp;lt;LENGTH&amp;gt; // To avoid conflicts with token having same name ...
&lt;br&gt;&amp;nbsp; | &amp;lt;WHEN_COMPILED&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;SUM&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;RANDOM&amp;gt;
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SpecialRegister() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( &amp;lt;ADDRESS&amp;gt; &amp;lt;OF&amp;gt; DataName()
&lt;br&gt;&amp;nbsp; | &amp;lt;DEBUG_ITEM&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;LENGTH&amp;gt; &amp;lt;OF&amp;gt; Identifier()
&lt;br&gt;&amp;nbsp; | &amp;lt;RETURN_CODE&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;SHIFT_OUT&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;SHIFT_IN&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;SORT_CONTROL&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;SORT_CORE_SIZE&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;SORT_FILE_SIZE&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;SORT_MESSAGE&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;SORT_MODE_SIZE&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;SORT_RETURN&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;TALLY&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;WHEN_COMPILED&amp;gt;
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CdName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ConventionName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void HandleComponent() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; CobolWord()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ImplicitTitle() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; QuotedText()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void LevelName66() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; DataName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void LevelName77() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; DataName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void LevelName88() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ConditionName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void LevelName() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ DataName() | &amp;lt;FILLER&amp;gt; | &amp;lt;REPLY&amp;gt; | &amp;lt;PROGRAM_STATUS&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;// ARITHMETIC
&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;&lt;br&gt;void ArithmeticExpression() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; TimesDiv() ( ( &amp;lt;PLUSCHAR&amp;gt; | &amp;lt;MINUSCHAR&amp;gt; ) TimesDiv() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void TimesDiv() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; Power() ( ( &amp;lt;ASTERISKCHAR&amp;gt; | &amp;lt;SLASHCHAR&amp;gt; ) Power() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void Power() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ ( &amp;lt;PLUSCHAR&amp;gt; | &amp;lt;MINUSCHAR&amp;gt; ) ] Basis() ( &amp;lt;POWEROF&amp;gt; Basis() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void Basis() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; // IMPORTANT : From more complex to most specific :
&lt;br&gt;&amp;nbsp; // TODO : Dirty hack : is &amp;lt;ALL&amp;gt; a valid value ?
&lt;br&gt;&amp;nbsp; ( FunctionClause() | Identifier() | Literal() | &amp;lt;ALL&amp;gt; | &amp;lt;LPARENCHAR&amp;gt; ArithmeticExpression() &amp;lt;RPARENCHAR&amp;gt; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CommentLine() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( ( NonDotChars() | Literal() )+ [ &amp;lt;DOT&amp;gt; ] )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;// COMPILATION UNIT.
&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;&lt;br&gt;void CompilationUnit() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ProgramUnit()
&lt;br&gt;&amp;nbsp; ( NestedProgramUnit() EndProgramStatement() )*
&lt;br&gt;&amp;nbsp; [ EndProgramStatement() ( CompilationUnit() )* ]
&lt;br&gt;&amp;nbsp; &amp;lt;EOF&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ProgramUnit() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; IdentificationDivision()
&lt;br&gt;&amp;nbsp; [ EnvironmentDivision() ]
&lt;br&gt;&amp;nbsp; [ DataDivision() ]
&lt;br&gt;&amp;nbsp; [ ProcedureDivision() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void NestedProgramUnit() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; NestedIdentificationDivision()
&lt;br&gt;&amp;nbsp; [ EnvironmentDivision() ]
&lt;br&gt;&amp;nbsp; [ DataDivision() ]
&lt;br&gt;&amp;nbsp; [ ProcedureDivision() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void EndProgramStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;END&amp;gt; &amp;lt;PROGRAM&amp;gt; ProgramName() &amp;lt;DOT&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CopyBookUnit() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; LinkageSectionEntry()
&lt;br&gt;&amp;nbsp; &amp;lt;EOF&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;// IDENTIFICATION DIVISION.
&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;&lt;br&gt;void IdentificationDivision() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( &amp;lt;IDENTIFICATION&amp;gt; | &amp;lt;ID&amp;gt; ) &amp;lt;DIVISION&amp;gt; &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; ProgramIdParagraph()
&lt;br&gt;&amp;nbsp; ( IdentificationDivisionParagraph() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void NestedIdentificationDivision() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( &amp;lt;IDENTIFICATION&amp;gt; | &amp;lt;ID&amp;gt; ) &amp;lt;DIVISION&amp;gt; &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; NestedProgramIdParagraph()
&lt;br&gt;&amp;nbsp; ( IdentificationDivisionParagraph() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void IdentificationDivisionParagraph() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; AuthorParagraph()
&lt;br&gt;&amp;nbsp; | InstallationParagraph()
&lt;br&gt;&amp;nbsp; | DateWrittenParagraph()
&lt;br&gt;&amp;nbsp; | DateCompiledParagraph()
&lt;br&gt;&amp;nbsp; | SecurityParagraph()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ProgramIdParagraph() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;PROGRAM_ID&amp;gt; &amp;lt;DOT&amp;gt; ProgramName() [ [ &amp;lt;IS&amp;gt; ] &amp;lt;INITIAL&amp;gt; [ &amp;lt;PROGRAM&amp;gt; ] ] &amp;lt;DOT&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void NestedProgramIdParagraph() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;PROGRAM_ID&amp;gt; &amp;lt;DOT&amp;gt; ProgramName()
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;IS&amp;gt; ] InitialOrCommon() [ &amp;lt;PROGRAM&amp;gt; ] ] &amp;lt;DOT&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void InitialOrCommon() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( &amp;lt;INITIAL&amp;gt; [ &amp;lt;COMMON&amp;gt; ]
&lt;br&gt;&amp;nbsp; | &amp;lt;COMMON&amp;gt; [ &amp;lt;INITIAL&amp;gt; ]
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void AuthorParagraph() :
&lt;br&gt;{ /* System.out.println(&amp;quot;Deprecated keyword : author - use a comment&amp;quot;); */ }
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;AUTHOR&amp;gt; &amp;lt;DOT&amp;gt; [ CommentLine() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void InstallationParagraph() :
&lt;br&gt;{ /* System.out.println(&amp;quot;Deprecated keyword : installation - use a comment&amp;quot;); */ }
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;INSTALLATION&amp;gt; &amp;lt;DOT&amp;gt; [ CommentLine() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DateWrittenParagraph() :
&lt;br&gt;{ /* System.out.println(&amp;quot;Deprecated keyword : date-written - use a comment&amp;quot;); */ }
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;DATE_WRITTEN&amp;gt; &amp;lt;DOT&amp;gt; [ CommentLine() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DateCompiledParagraph() :
&lt;br&gt;{ /* System.out.println(&amp;quot;Deprecated keyword : date-compiled - use a comment&amp;quot;); */ }
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;DATE_COMPILED&amp;gt; &amp;lt;DOT&amp;gt; [ CommentLine() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SecurityParagraph() :
&lt;br&gt;{ /* System.out.println(&amp;quot;Deprecated keyword : security - use a comment&amp;quot;); */ }
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;SECURITY&amp;gt; &amp;lt;DOT&amp;gt; [ CommentLine() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;// ENVIRONMENT DIVISION.
&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;&lt;br&gt;void EnvironmentDivision() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;ENVIRONMENT&amp;gt; &amp;lt;DIVISION&amp;gt; &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; ( EnvironmentSection() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void EnvironmentSection() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; ConfigurationSection()
&lt;br&gt;&amp;nbsp; | InputOutputSection()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;//------------------------------------------------------------------------------
&lt;br&gt;// CONFIGURATION SECTION
&lt;br&gt;//------------------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;void ConfigurationSection() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;CONFIGURATION&amp;gt; &amp;lt;SECTION&amp;gt; &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; ( ConfigurationSectionParagraph() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ConfigurationSectionParagraph() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; SourceComputerParagraph()
&lt;br&gt;&amp;nbsp; | ObjectComputerParagraph()
&lt;br&gt;&amp;nbsp; | SpecialNamesParagraph()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SourceComputerParagraph() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;SOURCE_COMPUTER&amp;gt; &amp;lt;DOT&amp;gt; ComputerName() [ [ &amp;lt;WITH&amp;gt; ] &amp;lt;DEBUGGING&amp;gt; &amp;lt;MODE&amp;gt; ] &amp;lt;DOT&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ObjectComputerParagraph() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;OBJECT_COMPUTER&amp;gt; &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; ComputerName() ( ObjectComputerClause() )* &amp;lt;DOT&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ObjectComputerClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; MemorySizeClause()
&lt;br&gt;&amp;nbsp; | CollatingSequenceClause()
&lt;br&gt;&amp;nbsp; | SegmentLimitClause()
&lt;br&gt;&amp;nbsp; | CharacterSetClause()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void MemorySizeClause() :
&lt;br&gt;{ /* System.out.println(&amp;quot;Deprecated keyword : memory - use a comment&amp;quot;); */ }
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;MEMORY&amp;gt; [ &amp;lt;SIZE&amp;gt; ] IntegerConstant() [ &amp;lt;WORDS&amp;gt; | &amp;lt;CHARACTERS&amp;gt; | &amp;lt;MODULES&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CollatingSequenceClause() :
&lt;br&gt;{ /* System.out.println(&amp;quot;Deprecated keyword : collating sequence - use a comment&amp;quot;); */ }
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;PROGRAM&amp;gt; ] [ &amp;lt;COLLATING&amp;gt; ] &amp;lt;SEQUENCE&amp;gt; [ &amp;lt;IS&amp;gt; ] AlphabetName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SegmentLimitClause() :
&lt;br&gt;{ /* System.out.println(&amp;quot;Deprecated keyword : segment unit - use a comment&amp;quot;); */ }
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( &amp;lt;SEGMENT_LIMIT&amp;gt; | &amp;lt;SEGMENT&amp;gt; &amp;lt;LIMIT&amp;gt; ) [ &amp;lt;IS&amp;gt; ] IntegerConstant()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;// Tandem ???
&lt;br&gt;void CharacterSetClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;CHARACTER&amp;gt; &amp;lt;SET&amp;gt; [ CommentLine() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SpecialNamesParagraph() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;SPECIAL_NAMES&amp;gt; &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; [ ( SpecialNameClause() )+ &amp;lt;DOT&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SpecialNameClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; AlphabetClause()
&lt;br&gt;&amp;nbsp; | ClassClause()
&lt;br&gt;&amp;nbsp; | CurrencySignClause()
&lt;br&gt;&amp;nbsp; | DecimalPointClause()
&lt;br&gt;&amp;nbsp; | SymbolicCharactersClause()
&lt;br&gt;&amp;nbsp; | CallConventionClause()
&lt;br&gt;&amp;nbsp; | EnvironmentNameIsMnemonicNameClause()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void IterableAlphabetPhrase() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; ( &amp;lt;THROUGH&amp;gt; | &amp;lt;THRU&amp;gt; ) IterableLiteral()
&lt;br&gt;&amp;nbsp; | ( &amp;lt;ALSO&amp;gt; IterableLiteral() )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void AlphabetClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;ALPHABET&amp;gt; AlphabetName() [ &amp;lt;IS&amp;gt; ]
&lt;br&gt;&amp;nbsp; ( &amp;lt;STANDARD_1&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;STANDARD_2&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;NATIVE&amp;gt;
&lt;br&gt;&amp;nbsp; | CobolWord()
&lt;br&gt;&amp;nbsp; | ( IterableLiteral() [ IterableAlphabetPhrase() ] )+
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ClassClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; // TODO (SUPPRESS) : Dirty hack : IterableLiteral() --&amp;gt; Identifier() | IterableLiteral()
&lt;br&gt;&amp;nbsp; &amp;lt;CLASS&amp;gt; ClassName() [ &amp;lt;IS&amp;gt; ] ( ( Identifier() | IterableLiteral() ) [ ( &amp;lt;THROUGH&amp;gt; | &amp;lt;THRU&amp;gt; ) ( Identifier() | IterableLiteral() ) ] )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CurrencySignClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;CURRENCY&amp;gt; [ &amp;lt;SIGN&amp;gt; ] [ &amp;lt;IS&amp;gt; ] Literal()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DecimalPointClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;DECIMAL_POINT&amp;gt; [ &amp;lt;IS&amp;gt; ] &amp;lt;COMMA&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SymbolicCharactersClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;SYMBOLIC&amp;gt; [ &amp;lt;CHARACTERS&amp;gt; ] ( ( SymbolicCharacter() )+ [ ( &amp;lt;ARE&amp;gt; | &amp;lt;IS&amp;gt; ) ] ( NumericConstant() | &amp;lt;HEXNUMBER&amp;gt; )+ )+ [ &amp;lt;IN&amp;gt; AlphabetName() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CallConventionClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;CALL_CONVENTION&amp;gt; IntegerConstant() [ &amp;lt;IS&amp;gt; ] ConventionName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void EnvironmentNameIsMnemonicNameClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; EnvironmentName()
&lt;br&gt;&amp;nbsp; ( [ &amp;lt;IS&amp;gt; ] MnemonicName() [ SpecialNamesParagraphStatusPhrase() ]
&lt;br&gt;&amp;nbsp; | SpecialNamesParagraphStatusPhrase()
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SpecialNamesParagraphStatusPhrase() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( &amp;lt;ON&amp;gt; [ &amp;lt;STATUS&amp;gt; ] [ &amp;lt;IS&amp;gt; ] IterableCondition() [ &amp;lt;OFF&amp;gt; [ &amp;lt;STATUS&amp;gt; ] [ &amp;lt;IS&amp;gt; ] IterableCondition() ]
&lt;br&gt;&amp;nbsp; | &amp;lt;OFF&amp;gt; [ &amp;lt;STATUS&amp;gt; ] [ &amp;lt;IS&amp;gt; ] IterableCondition() [ &amp;lt;ON&amp;gt; [ &amp;lt;STATUS&amp;gt; ] [ &amp;lt;IS&amp;gt; ] IterableCondition() ]
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;//------------------------------------------------------------------------------
&lt;br&gt;// INPUT-OUTPUT SECTION
&lt;br&gt;//------------------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;void InputOutputSection() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;INPUT_OUTPUT&amp;gt; &amp;lt;SECTION&amp;gt; &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; ( InputOutputSectionParagraph() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void InputOutputSectionParagraph() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; FileControlParagraph()
&lt;br&gt;&amp;nbsp; | IOControlParagraph()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void FileControlParagraph() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;FILE_CONTROL&amp;gt; ( LOOKAHEAD([ &amp;lt;DOT&amp;gt; ] FileControlEntry()) [ &amp;lt;DOT&amp;gt; ] FileControlEntry() )* &amp;lt;DOT&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void FileControlEntry() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; SelectClause()
&lt;br&gt;&amp;nbsp; ( FileControlClause() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void FileControlClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; AssignClause()
&lt;br&gt;&amp;nbsp; | ReserveClause()
&lt;br&gt;&amp;nbsp; | OrganizationClause()
&lt;br&gt;&amp;nbsp; | PaddingCharacterClause()
&lt;br&gt;&amp;nbsp; | RecordDelimiterClause()
&lt;br&gt;&amp;nbsp; | AccessModeClause()
&lt;br&gt;&amp;nbsp; | RecordKeyClause()
&lt;br&gt;&amp;nbsp; | AlternateRecordKeyClause()
&lt;br&gt;&amp;nbsp; | FileStatusClause()
&lt;br&gt;&amp;nbsp; | PasswordClause()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SelectClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;SELECT&amp;gt; [ &amp;lt;OPTIONAL&amp;gt; ] FileName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void AssignClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;ASSIGN&amp;gt; [ &amp;lt;TO&amp;gt; ] ( AssignmentName() | Literal() ) [ &amp;lt;USING&amp;gt; ( AssignmentName() | Literal() ) ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ReserveClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;RESERVE&amp;gt; IntegerConstant() [ &amp;lt;AREA&amp;gt; | &amp;lt;AREAS&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void OrganizationClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;ORGANIZATION&amp;gt; [ &amp;lt;IS&amp;gt; ] ]
&lt;br&gt;&amp;nbsp; ( SequentialOrganizationClause()
&lt;br&gt;&amp;nbsp; | LineSequentialOrganizationClause()
&lt;br&gt;&amp;nbsp; | RelativeOrganizationClause()
&lt;br&gt;&amp;nbsp; | IndexedOrganizationClause()
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SequentialOrganizationClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;SEQUENTIAL&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void LineSequentialOrganizationClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;LINE&amp;gt; &amp;lt;SEQUENTIAL&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void RelativeOrganizationClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;RELATIVE&amp;gt; [ Identifier() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void IndexedOrganizationClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;INDEXED&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void PaddingCharacterClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;PADDING&amp;gt; [ &amp;lt;CHARACTER&amp;gt; ] [ &amp;lt;IS&amp;gt; ] ( Identifier() | Literal() )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void RecordDelimiterClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;RECORD&amp;gt; &amp;lt;DELIMITER&amp;gt; [ &amp;lt;IS&amp;gt; ] ( &amp;lt;STANDARD_1&amp;gt; | &amp;lt;IMPLICIT&amp;gt; | AssignmentName() )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void AccessModeClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;ACCESS&amp;gt; [ &amp;lt;MODE&amp;gt; ] [ &amp;lt;IS&amp;gt; ]
&lt;br&gt;&amp;nbsp; ( SequentialAccessMode()
&lt;br&gt;&amp;nbsp; | RandomAccessMode()
&lt;br&gt;&amp;nbsp; | DynamicAccessMode()
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SequentialAccessMode() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;SEQUENTIAL&amp;gt; [ RelativeKeyClause() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void RandomAccessMode() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;RANDOM&amp;gt; [ RelativeKeyClause() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DynamicAccessMode() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;DYNAMIC&amp;gt; [ RelativeKeyClause() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void RelativeKeyClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;RELATIVE&amp;gt; [ &amp;lt;KEY&amp;gt; ] [ &amp;lt;IS&amp;gt; ] Identifier()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void RecordKeyClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;RECORD&amp;gt; [ &amp;lt;KEY&amp;gt; ] [ &amp;lt;IS&amp;gt; ] Identifier() [ PasswordClause() ] [ [ &amp;lt;WITH&amp;gt; ] &amp;lt;DUPLICATES&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void AlternateRecordKeyClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;ALTERNATE&amp;gt; &amp;lt;RECORD&amp;gt; [ &amp;lt;KEY&amp;gt; ] [ &amp;lt;IS&amp;gt; ] Identifier() [ PasswordClause() ] [ [ &amp;lt;WITH&amp;gt; ] &amp;lt;DUPLICATES&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void PasswordClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;PASSWORD&amp;gt; [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void FileStatusClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;FILE&amp;gt; ] &amp;lt;STATUS&amp;gt; [ &amp;lt;IS&amp;gt; ] Identifier() [ Identifier() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void IOControlParagraph() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;I_O_CONTROL&amp;gt;
&lt;br&gt;&amp;nbsp; ( LOOKAHEAD([ &amp;lt;DOT&amp;gt; ] IOControlClause())
&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &amp;lt;DOT&amp;gt; ] IOControlClause()
&lt;br&gt;&amp;nbsp; )*
&lt;br&gt;&amp;nbsp; &amp;lt;DOT&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void IOControlClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; RerunClause()
&lt;br&gt;&amp;nbsp; | SameAreaClause()
&lt;br&gt;&amp;nbsp; | MultipleFileClause()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void RerunClause() :
&lt;br&gt;{ /* System.out.println(&amp;quot;Deprecated keyword : rerun&amp;quot;); */ }
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;RERUN&amp;gt; [ &amp;lt;ON&amp;gt; ( AssignmentName() | FileName() ) ] &amp;lt;EVERY&amp;gt; ( LOOKAHEAD(Rerun2()) Rerun2() | IntegerConstant() [ &amp;lt;CLOCK_UNITS&amp;gt; ] )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void Rerun2() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; IntegerConstant() &amp;lt;RECORDS&amp;gt;
&lt;br&gt;&amp;nbsp; | [ &amp;lt;END&amp;gt; ] [ &amp;lt;OF&amp;gt; ] ( &amp;lt;REEL&amp;gt; | &amp;lt;UNIT&amp;gt; ) &amp;lt;OF&amp;gt; FileName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SameAreaClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; // TODO : Dirty hack : Are &amp;lt;SAME&amp;gt; &amp;lt;AREA&amp;gt; ... or &amp;lt;SAME&amp;gt; ... valid values ?
&lt;br&gt;&amp;nbsp; &amp;lt;SAME&amp;gt; [ &amp;lt;RECORD&amp;gt; | &amp;lt;SORT&amp;gt; | &amp;lt;SORT_MERGE&amp;gt; ] [ &amp;lt;AREA&amp;gt; ] [ &amp;lt;FOR&amp;gt; ] ( FileName() )+
&lt;br&gt;//| &amp;lt;SAME&amp;gt; &amp;lt;AREA&amp;gt; [ &amp;lt;FOR&amp;gt; ] ( FileName() )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void MultipleFileClause() :
&lt;br&gt;{ /* System.out.println(&amp;quot;Deprecated keyword : multiple file&amp;quot;); */ }
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;MULTIPLE&amp;gt; &amp;lt;FILE&amp;gt; [ &amp;lt;TAPE&amp;gt; ] [ &amp;lt;CONTAINS&amp;gt; ] ( FileName() [ [ &amp;lt;POSITION&amp;gt; ] IntegerConstant() ] )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;// DATA DIVISION.
&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;&lt;br&gt;void DataDivision() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;DATA&amp;gt; &amp;lt;DIVISION&amp;gt; &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; ( DataDivisionSection() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataDivisionSection() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; FileSection()
&lt;br&gt;&amp;nbsp; | WorkingStorageSection()
&lt;br&gt;&amp;nbsp; | LinkageSection()
&lt;br&gt;&amp;nbsp; | CommunicationSection()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void FileSection() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;FILE&amp;gt; &amp;lt;SECTION&amp;gt; &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; ( FileAndSortDescriptionEntry() ( DataDescriptionEntry() )* )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void FileAndSortDescriptionEntry() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( &amp;lt;FD&amp;gt; | &amp;lt;SD&amp;gt; ) FileName()
&lt;br&gt;&amp;nbsp; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; LOOKAHEAD([ &amp;lt;DOT&amp;gt; ] FileAndSortDescriptionEntryClause())
&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &amp;lt;DOT&amp;gt; ] FileAndSortDescriptionEntryClause()
&lt;br&gt;&amp;nbsp; )* &amp;lt;DOT&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void FileAndSortDescriptionEntryClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; ExternalClause()
&lt;br&gt;&amp;nbsp; | GlobalClause()
&lt;br&gt;&amp;nbsp; | BlockContainsClause()
&lt;br&gt;&amp;nbsp; | RecordContainsClause()
&lt;br&gt;&amp;nbsp; | LabelRecordsClause()
&lt;br&gt;&amp;nbsp; | ValueOfClause()
&lt;br&gt;&amp;nbsp; | DataRecordClause()
&lt;br&gt;&amp;nbsp; | LinageClause()
&lt;br&gt;&amp;nbsp; | CodeSetClause()
&lt;br&gt;&amp;nbsp; | ReportClause()
&lt;br&gt;&amp;nbsp; | RecordingModeClause()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ExternalClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;IS&amp;gt; ] &amp;lt;EXTERNAL&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void GlobalClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;IS&amp;gt; ] &amp;lt;GLOBAL&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void BlockContainsClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;BLOCK&amp;gt; [ &amp;lt;CONTAINS&amp;gt; ] IntegerConstant() [ &amp;lt;TO&amp;gt; IntegerConstant() ] [ &amp;lt;RECORDS&amp;gt; | &amp;lt;CHARACTERS&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void RecordContainsClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;RECORD&amp;gt; [ &amp;lt;CONTAINS&amp;gt; ]
&lt;br&gt;&amp;nbsp; ( IntegerConstant() [ &amp;lt;TO&amp;gt; IntegerConstant() ] [ &amp;lt;CHARACTERS&amp;gt; ]
&lt;br&gt;&amp;nbsp; | [ &amp;lt;IS&amp;gt; ] &amp;lt;VARYING&amp;gt; [ &amp;lt;IN&amp;gt; ] [ &amp;lt;SIZE&amp;gt; ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; [ [ &amp;lt;FROM&amp;gt; ] IntegerConstant() [ &amp;lt;TO&amp;gt; IntegerConstant() ] [ &amp;lt;CHARACTERS&amp;gt; ] ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &amp;lt;DEPENDING&amp;gt; [ &amp;lt;ON&amp;gt; ] Identifier() ]
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void LabelRecordsClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;LABEL&amp;gt; ( &amp;lt;RECORD&amp;gt; [ &amp;lt;IS&amp;gt; ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;lt;RECORDS&amp;gt; [ &amp;lt;ARE&amp;gt; ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ) ( &amp;lt;OMITTED&amp;gt; | &amp;lt;STANDARD&amp;gt; | ( DataName() )+ )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ValueOfClause() :
&lt;br&gt;{ /* System.out.println(&amp;quot;Deprecated clause : value of&amp;quot;); */ }
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;VALUE&amp;gt; &amp;lt;OF&amp;gt; ( SystemName() &amp;lt;IS&amp;gt; ( Identifier() | Literal() ) )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataRecordClause() :
&lt;br&gt;{ /* System.out.println(&amp;quot;Deprecated clause : data record&amp;quot;); */ }
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;DATA&amp;gt; ( &amp;lt;RECORD&amp;gt; [ &amp;lt;IS&amp;gt; ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;lt;RECORDS&amp;gt; [ &amp;lt;ARE&amp;gt; ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;) ( DataName() )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void LinageClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;LINAGE&amp;gt; [ &amp;lt;IS&amp;gt; ] ( DataName() | IntegerConstant() ) [ &amp;lt;LINES&amp;gt; ]
&lt;br&gt;&amp;nbsp; ( [ &amp;lt;WITH&amp;gt; ] &amp;lt;FOOTING&amp;gt; [ &amp;lt;AT&amp;gt; ] ( DataName() | IntegerConstant() )
&lt;br&gt;&amp;nbsp; | [ &amp;lt;LINES&amp;gt; ] [ &amp;lt;AT&amp;gt; ] ( &amp;lt;TOP&amp;gt; | &amp;lt;BOTTOM&amp;gt; ) ( DataName() | IntegerConstant() )
&lt;br&gt;&amp;nbsp; )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void RecordingModeClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;RECORDING&amp;gt; [ &amp;lt;MODE&amp;gt; ] [ &amp;lt;IS&amp;gt; ] Mode()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CodeSetClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;CODE_SET&amp;gt; [ &amp;lt;IS&amp;gt; ] AlphabetName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ReportClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( &amp;lt;REPORT&amp;gt; [ &amp;lt;IS&amp;gt; ] | &amp;lt;REPORTS&amp;gt; [ &amp;lt;ARE&amp;gt; ] ) ( Identifier() )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataDescriptionEntry() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( &amp;lt;LEVEL_66&amp;gt; LevelName66() RenamesClause() &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;LEVEL_77&amp;gt; LevelName77() ( LOOKAHEAD(DataDescriptionEntryClause()) DataDescriptionEntryClause() )* &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;LEVEL_88&amp;gt; LevelName88() ConditionValueClause() &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; | LevelNumber() LevelName() ( LOOKAHEAD(DataDescriptionEntryClause()) DataDescriptionEntryClause() )* &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataDescriptionEntryClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; DataPictureClause()
&lt;br&gt;&amp;nbsp; | DataValueClause()
&lt;br&gt;&amp;nbsp; | DataUsageClause()
&lt;br&gt;&amp;nbsp; | DataRedefinesClause()
&lt;br&gt;&amp;nbsp; | DataExternalClause()
&lt;br&gt;&amp;nbsp; | DataGlobalClause()
&lt;br&gt;&amp;nbsp; | DataIdentifiedClause()
&lt;br&gt;&amp;nbsp; | DataSignClause()
&lt;br&gt;&amp;nbsp; | DataOccursClause()
&lt;br&gt;&amp;nbsp; | DataSynchronizedClause()
&lt;br&gt;&amp;nbsp; | DataJustifiedClause()
&lt;br&gt;&amp;nbsp; | DataBlankWhenZeroClause()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataRedefinesClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;REDEFINES&amp;gt; DataName() [ DataPictureClause() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataBlankWhenZeroClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;BLANK&amp;gt; [ &amp;lt;WHEN&amp;gt; ] ( &amp;lt;ZERO&amp;gt; | &amp;lt;ZEROS&amp;gt; | &amp;lt;ZEROES&amp;gt; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataJustifiedClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( &amp;lt;JUSTIFIED&amp;gt; | &amp;lt;JUST&amp;gt; ) [ &amp;lt;RIGHT&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataOccursClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;OCCURS&amp;gt; IntegerConstant() [ &amp;lt;TO&amp;gt; IntegerConstant() ] [ &amp;lt;TIMES&amp;gt; ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;DEPENDING&amp;gt; [ &amp;lt;ON&amp;gt; ] Identifier() ]
&lt;br&gt;&amp;nbsp; ( ( &amp;lt;ASCENDING&amp;gt; | &amp;lt;DESCENDING&amp;gt; ) [ &amp;lt;KEY&amp;gt; ] [ &amp;lt;IS&amp;gt; ] ( Identifier() )+ )*
&lt;br&gt;&amp;nbsp; [ &amp;lt;INDEXED&amp;gt; [ &amp;lt;BY&amp;gt; ] ( IndexName() )+ ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataPictureClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( &amp;lt;PICTURE&amp;gt; | &amp;lt;PIC&amp;gt; ) [ &amp;lt;IS&amp;gt; ] PictureString()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void PictureString() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; PictureOccurence() ( LOOKAHEAD(&amp;lt;DOTCHAR&amp;gt; PictureOccurence()) &amp;lt;DOTCHAR&amp;gt; PictureOccurence() | PictureOccurence() )*
&lt;br&gt;&amp;nbsp; // There can be additional dots at end of picture strings ...
&lt;br&gt;&amp;nbsp; ( &amp;lt;DOTCHAR&amp;gt; )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void PictureOccurence() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; ( NonDotChars() )+ [ &amp;lt;LPARENCHAR&amp;gt; IntegerConstant() &amp;lt;RPARENCHAR&amp;gt; ]
&lt;br&gt;&amp;nbsp; | &amp;lt;DOTCHAR&amp;gt; ( &amp;lt;LPARENCHAR&amp;gt; IntegerConstant() &amp;lt;RPARENCHAR&amp;gt; | NonDotChars() )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void PicturePunctuation() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;SLASHCHAR&amp;gt; | &amp;lt;COMMACHAR&amp;gt; | &amp;lt;COLONCHAR&amp;gt; | &amp;lt;ASTERISKCHAR&amp;gt; | &amp;lt;MINUSCHAR&amp;gt; | &amp;lt;PLUSCHAR&amp;gt; |
&lt;br&gt;&amp;nbsp; &amp;lt;POWEROF&amp;gt; | &amp;lt;LESSTHANOREQUAL&amp;gt; | &amp;lt;LESSTHANCHAR&amp;gt; | &amp;lt;MORETHANOREQUAL&amp;gt; | &amp;lt;MORETHANCHAR&amp;gt; |
&lt;br&gt;&amp;nbsp; &amp;lt;EQUALCHAR&amp;gt; | &amp;lt;NOTEQUAL&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void PictureCurrency() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;DOLLARCHAR&amp;gt; // to be completed
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void NonDotChars() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; IntegerConstant() | CobolWord() | PicturePunctuation() | PictureCurrency()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataExternalClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;IS&amp;gt; ] &amp;lt;EXTERNAL&amp;gt; [ &amp;lt;BY&amp;gt; Literal() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataGlobalClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;IS&amp;gt; ] &amp;lt;GLOBAL&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataIdentifiedClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;IS&amp;gt; ] &amp;lt;IDENTIFIED&amp;gt; &amp;lt;BY&amp;gt; Literal()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataUsageClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;USAGE&amp;gt; [ &amp;lt;IS&amp;gt; ] ] ( MemoryUsage() | ExternalUsage() | PropertyObjectModifier() )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void MemoryUsage() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;DISPLAY&amp;gt; | &amp;lt;DISPLAY_1&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;COMP&amp;gt; | &amp;lt;COMPUTATIONAL&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;COMP_N&amp;gt; | &amp;lt;COMPUTATIONAL_N&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;COMP_1&amp;gt; | &amp;lt;COMPUTATIONAL_1&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;COMP_1_REV&amp;gt; | &amp;lt;COMPUTATIONAL_1_REV&amp;gt; | &amp;lt;COMP_1_M&amp;gt; | &amp;lt;COMPUTATIONAL_1_M&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;COMP_1_MVS&amp;gt; | &amp;lt;COMPUTATIONAL_1_MVS&amp;gt; | &amp;lt;COMP_1_E&amp;gt; | &amp;lt;COMPUTATIONAL_1_E&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;COMP_2&amp;gt; | &amp;lt;COMPUTATIONAL_2&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;COMP_2_REV&amp;gt; | &amp;lt;COMPUTATIONAL_2_REV&amp;gt; | &amp;lt;COMP_2_M&amp;gt; | &amp;lt;COMPUTATIONAL_2_M&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;COMP_2_MVS&amp;gt; | &amp;lt;COMPUTATIONAL_2_MVS&amp;gt; | &amp;lt;COMP_2_E&amp;gt; | &amp;lt;COMPUTATIONAL_2_E&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;COMP_3&amp;gt; | &amp;lt;COMPUTATIONAL_3&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;COMP_4&amp;gt; | &amp;lt;COMPUTATIONAL_4&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;COMP_5&amp;gt; | &amp;lt;COMPUTATIONAL_5&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;COMP_6&amp;gt; | &amp;lt;COMPUTATIONAL_6&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;COMP_S&amp;gt; | &amp;lt;COMPUTATIONAL_S&amp;gt; | &amp;lt;COMP_1_A&amp;gt; | &amp;lt;COMPUTATIONAL_1_A&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;COMP_D&amp;gt; | &amp;lt;COMPUTATIONAL_D&amp;gt; | &amp;lt;COMP_2_A&amp;gt; | &amp;lt;COMPUTATIONAL_2_A&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;PACKED_DECIMAL&amp;gt; | &amp;lt;COMP_P&amp;gt; | &amp;lt;COMPUTATIONAL_P&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;PACKED_DECIMAL_A&amp;gt; | &amp;lt;COMP_3_A&amp;gt; | &amp;lt;COMPUTATIONAL_3_A&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;PACKED_DECIMAL_I&amp;gt; | &amp;lt;PACKED_DECIMAL_E&amp;gt; | &amp;lt;PACKED_DECIMAL_H&amp;gt; | &amp;lt;COMP_3_M&amp;gt; | &amp;lt;COMPUTATIONAL_3_M&amp;gt; | &amp;lt;PACKED_DECIMAL_M&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;BINARY&amp;gt; | &amp;lt;BINARY_M&amp;gt; | &amp;lt;COMP_M&amp;gt; | &amp;lt;COMPUTATIONAL_M&amp;gt; | &amp;lt;COMP_A&amp;gt; | &amp;lt;COMPUTATIONAL_A&amp;gt; | &amp;lt;COMP_4_M&amp;gt; | &amp;lt;COMPUTATIONAL_4_M&amp;gt; | &amp;lt;COMP_B&amp;gt; | &amp;lt;COMPUTATIONAL_B&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;BINARY_REV&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;SQLIND&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;COMP_X&amp;gt; | &amp;lt;COMP_X&amp;gt; | &amp;lt;COMPUTATIONAL_X&amp;gt; | &amp;lt;COMPUTATIONAL_X&amp;gt; | &amp;lt;COMP_5_M&amp;gt; | &amp;lt;COMPUTATIONAL_5_M&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;COMP_X_REV&amp;gt; | &amp;lt;COMPUTATIONAL_X_REV&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;DISPLAY_WS&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;EXTERNAL_FORM&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;NATIONAL&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;KANJI&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;SIGNED_SHORT&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;UNSIGNED_SHORT&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;SIGNED_INT&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;UNSIGNED_INT&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;SIGNED_LONG&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;UNSIGNED_LONG&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;FLOAT&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;DOUBLE&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;HANDLE&amp;gt; &amp;lt;OF&amp;gt; &amp;lt;THREAD&amp;gt; // &amp;lt;OF&amp;gt; is not optional here
&lt;br&gt;&amp;nbsp; | &amp;lt;HANDLE&amp;gt; [ [ &amp;lt;OF&amp;gt; ] HandleComponent() [ ImplicitTitle() ] ]
&lt;br&gt;&amp;nbsp; | &amp;lt;HANDLE&amp;gt; [ &amp;lt;OF&amp;gt; ] &amp;lt;FONT&amp;gt; [ &amp;lt;FIXED_FONT&amp;gt; | &amp;lt;TRADITIONAL_FONT&amp;gt; | &amp;lt;DEFAULT_FONT&amp;gt; | &amp;lt;SMALL_FONT&amp;gt; | &amp;lt;MEDIUM_FONT&amp;gt; | &amp;lt;LARGE_FONT&amp;gt; ]
&lt;br&gt;&amp;nbsp; | &amp;lt;HANDLE&amp;gt; [ &amp;lt;OF&amp;gt; ] &amp;lt;WINDOW&amp;gt; [ ImplicitTitle() ]
&lt;br&gt;&amp;nbsp; | &amp;lt;WINDOW&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ExternalUsage() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;INDEX&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;POINTER&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;PROCEDURE_POINTER&amp;gt; | &amp;lt;PROCEDURE&amp;gt; &amp;lt;POINTER&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;STRING&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;JPACKED_DECIMAL&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;JSTRING&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;JBYTE&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;JSHORT&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;JINT&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;JLONG&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;JBOOLEAN&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;JFLOAT&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;JDOUBLE&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;JCHAR&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;ALPHANUMERIC_HASHTABLE&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;NUMERIC_HASHTABLE&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;OBJECT_HASHTABLE&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;OBJECT&amp;gt; &amp;lt;REFERENCE&amp;gt; [ [ &amp;lt;OF&amp;gt; ] ( ClassName() | Literal() ) ]
&lt;br&gt;&amp;nbsp; | ( &amp;lt;OBJECT&amp;gt; | &amp;lt;COMPONENT&amp;gt; ) [ [ &amp;lt;OF&amp;gt; ] ClassName() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void PropertyObjectModifier() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;CHARACTER&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;BINARY_BYTE&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;BINARY_SHORT&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;BINARY&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;BINARY_LONG&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;BINARY_DOUBLE&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;FLOAT_SHORT&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;FLOAT_LONG&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;BIT&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataSignClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;SIGN&amp;gt; [ &amp;lt;IS&amp;gt; ] ] ( &amp;lt;LEADING&amp;gt; | &amp;lt;TRAILING&amp;gt; ) [ &amp;lt;SEPARATE&amp;gt; [ &amp;lt;CHARACTER&amp;gt; ] ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataSynchronizedClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( &amp;lt;SYNCHRONIZED&amp;gt; | &amp;lt;SYNC&amp;gt; ) [ ( &amp;lt;LEFT&amp;gt; | &amp;lt;RIGHT&amp;gt; ) ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DataValueClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; // TODO (SUPPRESS) : Dirty hack : Literal() --&amp;gt; PictureString() | IterableLiteral()
&lt;br&gt;&amp;nbsp; ( &amp;lt;VALUE&amp;gt; [ &amp;lt;IS&amp;gt; ] | &amp;lt;VALUES&amp;gt; [ &amp;lt;ARE&amp;gt; ] ) ( ( LOOKAHEAD(PictureString()) PictureString() | IterableLiteral() ) [ ( &amp;lt;THROUGH&amp;gt; | &amp;lt;THRU&amp;gt; ) IterableLiteral() ] )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ConditionValueClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; DataValueClause()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void RenamesClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;RENAMES&amp;gt; Identifier() [ ( &amp;lt;THROUGH&amp;gt; | &amp;lt;THRU&amp;gt; ) Identifier() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;// DATA DIVISION : COMMUNICATION SECTION.
&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;&lt;br&gt;void CommunicationDescriptionEntry() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; LOOKAHEAD(CommunicationInputEntry())
&lt;br&gt;&amp;nbsp; &amp;nbsp; CommunicationInputEntry()
&lt;br&gt;&amp;nbsp; | LOOKAHEAD(CommunicationOutputEntry())
&lt;br&gt;&amp;nbsp; &amp;nbsp; CommunicationOutputEntry()
&lt;br&gt;&amp;nbsp; | LOOKAHEAD(CommunicationIOEntry())
&lt;br&gt;&amp;nbsp; &amp;nbsp; CommunicationIOEntry()
&lt;br&gt;&amp;nbsp; ) &amp;lt;DOT&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CommunicationInputEntry() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;CD&amp;gt; CdName() [ &amp;lt;FOR&amp;gt; ] [ &amp;lt;INITIAL&amp;gt; ] &amp;lt;INPUT&amp;gt; ( CommunicationInputClause() )* ( DataName() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CommunicationOutputEntry() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;CD&amp;gt; CdName() [ &amp;lt;FOR&amp;gt; ] &amp;lt;OUTPUT&amp;gt; ( CommunicationOutputClause() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CommunicationIOEntry() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;CD&amp;gt; CdName() [ &amp;lt;FOR&amp;gt; ] [ &amp;lt;INITIAL&amp;gt; ] &amp;lt;I_O&amp;gt; ( CommunicationIOClause() )* ( DataName() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CommunicationInputClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;MESSAGE&amp;gt; ( &amp;lt;DATE&amp;gt; | &amp;lt;TIME&amp;gt; | &amp;lt;COUNT&amp;gt; ) [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;&amp;nbsp; | &amp;lt;TEXT&amp;gt; &amp;lt;LENGTH&amp;gt; [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;&amp;nbsp; | &amp;lt;END&amp;gt; &amp;lt;KEY&amp;gt; [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;&amp;nbsp; | &amp;lt;STATUS&amp;gt; &amp;lt;KEY&amp;gt; [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;&amp;nbsp; | &amp;lt;COUNT&amp;gt; [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;&amp;nbsp; | [ &amp;lt;SYMBOLIC&amp;gt; ] ( &amp;lt;QUEUE&amp;gt; | &amp;lt;SUB_QUEUE_1&amp;gt; | &amp;lt;SUB_QUEUE_2&amp;gt; | &amp;lt;SUB_QUEUE_3&amp;gt; | &amp;lt;SOURCE&amp;gt; ) [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CommunicationOutputClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;DESTINATION&amp;gt; &amp;lt;COUNT&amp;gt; [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;&amp;nbsp; | &amp;lt;TEXT&amp;gt; &amp;lt;LENGTH&amp;gt; [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;&amp;nbsp; | &amp;lt;STATUS&amp;gt; &amp;lt;KEY&amp;gt; [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;&amp;nbsp; | LOOKAHEAD([ &amp;lt;SYMBOLIC&amp;gt; ] &amp;lt;DESTINATION&amp;gt; [ &amp;lt;IS&amp;gt; ] DataName())
&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &amp;lt;SYMBOLIC&amp;gt; ] &amp;lt;DESTINATION&amp;gt; [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;&amp;nbsp; | &amp;lt;DESTINATION&amp;gt; &amp;lt;TABLE&amp;gt; &amp;lt;OCCURS&amp;gt; IntegerConstant() [ &amp;lt;TIMES&amp;gt; ] [ &amp;lt;INDEXED&amp;gt; [ &amp;lt;BY&amp;gt; ] ( IndexName() )+ ]
&lt;br&gt;&amp;nbsp; | &amp;lt;ERROR&amp;gt; &amp;lt;KEY&amp;gt; [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CommunicationIOClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;MESSAGE&amp;gt; ( &amp;lt;DATE&amp;gt; | &amp;lt;TIME&amp;gt; ) [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;&amp;nbsp; | &amp;lt;TEXT&amp;gt; &amp;lt;LENGTH&amp;gt; [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;&amp;nbsp; | &amp;lt;END&amp;gt; &amp;lt;KEY&amp;gt; [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;&amp;nbsp; | &amp;lt;STATUS&amp;gt; &amp;lt;KEY&amp;gt; [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;&amp;nbsp; | [ &amp;lt;SYMBOLIC&amp;gt; ] &amp;lt;TERMINAL&amp;gt; [ &amp;lt;IS&amp;gt; ] DataName()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;//------------------------------------------------------------------------------
&lt;br&gt;// WORKING STORAGE SECTION, LINKAGE SECTION.
&lt;br&gt;//------------------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;void WorkingStorageSection() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;WORKING_STORAGE&amp;gt; &amp;lt;SECTION&amp;gt; &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; ( DataDescriptionEntry() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void LinkageSectionEntry() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( DataDescriptionEntry() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void LinkageSection() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;LINKAGE&amp;gt; &amp;lt;SECTION&amp;gt; &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; LinkageSectionEntry()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CommunicationSection() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;COMMUNICATION&amp;gt; &amp;lt;SECTION&amp;gt; &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; ( CommunicationDescriptionEntry() ( DataDescriptionEntry() )* )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;// PROCEDURE DIVISION also known as &amp;quot;spaghetti division&amp;quot;.
&lt;br&gt;////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;&lt;br&gt;void ProcedureDivision() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;PROCEDURE&amp;gt; &amp;lt;DIVISION&amp;gt; [ ConventionName() ] [ &amp;lt;USING&amp;gt; ( DataName() )+ ] &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; [ Declaratives() ]
&lt;br&gt;&amp;nbsp; ProcedureBody()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void Declaratives() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;DECLARATIVES&amp;gt; &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; ( SectionHeader() &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; UseStatement() &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Paragraphs()
&lt;br&gt;&amp;nbsp; )+
&lt;br&gt;&amp;nbsp; &amp;lt;END&amp;gt; &amp;lt;DECLARATIVES&amp;gt; &amp;lt;DOT&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ProcedureBody() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; Paragraphs() ( ProcedureSection() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ProcedureSection() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; SectionHeader() &amp;lt;DOT&amp;gt; Paragraphs()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SectionHeader() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; SectionName() &amp;lt;SECTION&amp;gt; [ IntegerConstant() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void Paragraphs() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( Sentence() )* ( Paragraph() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void Paragraph() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ParagraphName() &amp;lt;DOT&amp;gt;
&lt;br&gt;&amp;nbsp; ( ExitStatement()
&lt;br&gt;&amp;nbsp; | AlteredGoto()
&lt;br&gt;&amp;nbsp; | ( Sentence() )*
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void Sentence() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; StatementList() &amp;lt;DOT&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void StatementList() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( Statement() )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void Statement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( AcceptStatement()
&lt;br&gt;&amp;nbsp; | AddStatement()
&lt;br&gt;&amp;nbsp; | AlterStatement()
&lt;br&gt;&amp;nbsp; | CallStatement()
&lt;br&gt;&amp;nbsp; | CancelStatement()
&lt;br&gt;&amp;nbsp; | CloseStatement()
&lt;br&gt;&amp;nbsp; | ComputeStatement()
&lt;br&gt;&amp;nbsp; | ContinueStatement()
&lt;br&gt;&amp;nbsp; | DeleteStatement()
&lt;br&gt;&amp;nbsp; | DisplayStatement()
&lt;br&gt;&amp;nbsp; | DivideStatement()
&lt;br&gt;&amp;nbsp; | EntryStatement()
&lt;br&gt;&amp;nbsp; | EvaluateStatement()
&lt;br&gt;&amp;nbsp; /* | ExitStatement() */
&lt;br&gt;&amp;nbsp; | ExitProgramStatement()
&lt;br&gt;&amp;nbsp; | GobackStatement()
&lt;br&gt;&amp;nbsp; | GotoStatement()
&lt;br&gt;&amp;nbsp; | IfStatement()
&lt;br&gt;&amp;nbsp; | InitializeStatement()
&lt;br&gt;&amp;nbsp; | InspectStatement()
&lt;br&gt;&amp;nbsp; | MergeStatement()
&lt;br&gt;&amp;nbsp; | MoveStatement()
&lt;br&gt;&amp;nbsp; | MultiplyStatement()
&lt;br&gt;&amp;nbsp; | OpenStatement()
&lt;br&gt;&amp;nbsp; | PerformStatement()
&lt;br&gt;&amp;nbsp; | ReadStatement()
&lt;br&gt;&amp;nbsp; | ReleaseStatement()
&lt;br&gt;&amp;nbsp; | ReturnStatement()
&lt;br&gt;&amp;nbsp; | RewriteStatement()
&lt;br&gt;&amp;nbsp; | SearchStatement()
&lt;br&gt;&amp;nbsp; | SetStatement()
&lt;br&gt;&amp;nbsp; | SortStatement()
&lt;br&gt;&amp;nbsp; | StartStatement()
&lt;br&gt;&amp;nbsp; | StopStatement()
&lt;br&gt;&amp;nbsp; | StringStatement()
&lt;br&gt;&amp;nbsp; | SubtractStatement()
&lt;br&gt;&amp;nbsp; | UnstringStatement()
&lt;br&gt;&amp;nbsp; | WriteStatement() )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void AcceptStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;ACCEPT&amp;gt; ( &amp;lt;REPLY&amp;gt; | &amp;lt;OMITTED&amp;gt; | Identifier() )
&lt;br&gt;&amp;nbsp; [ &amp;lt;FROM&amp;gt;
&lt;br&gt;&amp;nbsp; ( MnemonicName()
&lt;br&gt;&amp;nbsp; | EnvironmentName()
&lt;br&gt;&amp;nbsp; | &amp;lt;DATE&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;DAY&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;DAY_OF_WEEK&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;TIME&amp;gt;
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;&amp;nbsp; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void AddStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;ADD&amp;gt;
&lt;br&gt;&amp;nbsp; ( ( &amp;lt;CORRESPONDING&amp;gt; | &amp;lt;CORR&amp;gt; ) Identifier() &amp;lt;TO&amp;gt; Identifier() [ &amp;lt;ROUNDED&amp;gt; ]
&lt;br&gt;&amp;nbsp; | ( Identifier() | Literal() )+ [ &amp;lt;TO&amp;gt; ( Identifier() [ &amp;lt;ROUNDED&amp;gt; ] )+ ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [ &amp;lt;GIVING&amp;gt; ( Identifier() [ &amp;lt;ROUNDED&amp;gt; ] )+ ]
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;ON&amp;gt; ] &amp;lt;SIZE&amp;gt; &amp;lt;ERROR&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; [ &amp;lt;ON&amp;gt; ] &amp;lt;SIZE&amp;gt; &amp;lt;ERROR&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_ADD&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void AlteredGoto() :
&lt;br&gt;{ /* System.out.println(&amp;quot;***ALTER ALERT***&amp;quot;); */ }
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;GO&amp;gt; [ &amp;lt;TO&amp;gt; ] &amp;lt;DOT&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;/**
&lt;br&gt;&amp;nbsp;* ALTER is one of the most dangerous statement ever invented by man.
&lt;br&gt;&amp;nbsp;* ALTER is to GOTO what an atomic bomb is to firecrackers.
&lt;br&gt;&amp;nbsp;*/
&lt;br&gt;&lt;br&gt;void AlterStatement() :
&lt;br&gt;{ /* System.out.println(&amp;quot;***ALTER ALERT***&amp;quot;); */ }
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;ALTER&amp;gt; ( ProcedureName() &amp;lt;TO&amp;gt; [ &amp;lt;PROCEED&amp;gt; &amp;lt;TO&amp;gt; ] ProcedureName() )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CallByContent() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;BY&amp;gt; ] &amp;lt;CONTENT&amp;gt; ( &amp;lt;ADDRESS&amp;gt; &amp;lt;OF&amp;gt; Identifier() | [ &amp;lt;LENGTH&amp;gt; &amp;lt;OF&amp;gt; ] Identifier() | Literal() | &amp;lt;OMITTED&amp;gt; )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CallByReference() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;BY&amp;gt; ] &amp;lt;REFERENCE&amp;gt; ] ( &amp;lt;ADDRESS&amp;gt; &amp;lt;OF&amp;gt; Identifier() | Identifier() | FileName() | &amp;lt;OMITTED&amp;gt; )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CallByDescriptor() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;BY&amp;gt; ] &amp;lt;DESCRIPTOR&amp;gt; ( &amp;lt;ADDRESS&amp;gt; &amp;lt;OF&amp;gt; Identifier() | Identifier() | FileName() | &amp;lt;OMITTED&amp;gt; )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CallByValue() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;BY&amp;gt; ] &amp;lt;VALUE&amp;gt; ( &amp;lt;ADDRESS&amp;gt; &amp;lt;OF&amp;gt; Identifier() | [ &amp;lt;LENGTH&amp;gt; &amp;lt;OF&amp;gt; ] Identifier() | Literal() | &amp;lt;OMITTED&amp;gt; )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CallStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;CALL&amp;gt;
&lt;br&gt;&amp;nbsp; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; LOOKAHEAD(ConventionName() ( Identifier() | Literal() ))
&lt;br&gt;&amp;nbsp; &amp;nbsp; ConventionName() ( Identifier() | Literal() )
&lt;br&gt;&amp;nbsp; | ( Identifier() | Literal() )
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;WITH&amp;gt; ] &amp;lt;STDCALL&amp;gt; [ &amp;lt;LINKAGE&amp;gt; ] ] // Fijutsu Cobol
&lt;br&gt;&amp;nbsp; [ &amp;lt;USING&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; LOOKAHEAD(CallByContent())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; CallByContent()
&lt;br&gt;&amp;nbsp; &amp;nbsp; | LOOKAHEAD(CallByDescriptor())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; CallByDescriptor()
&lt;br&gt;&amp;nbsp; &amp;nbsp; | LOOKAHEAD(CallByValue())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; CallByValue()
&lt;br&gt;&amp;nbsp; &amp;nbsp; | LOOKAHEAD(CallByReference())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; CallByReference()
&lt;br&gt;&amp;nbsp; &amp;nbsp; )+
&lt;br&gt;&amp;nbsp; ]
&lt;br&gt;&amp;nbsp; [ ( &amp;lt;GIVING&amp;gt; | &amp;lt;RETURNING&amp;gt; ) Identifier() ]
&lt;br&gt;&amp;nbsp; [ LOOKAHEAD([ &amp;lt;ON&amp;gt; ] &amp;lt;EXCEPTION&amp;gt;) [ &amp;lt;ON&amp;gt; ] &amp;lt;EXCEPTION&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ LOOKAHEAD(&amp;lt;NOT&amp;gt; [ &amp;lt;ON&amp;gt; ] &amp;lt;EXCEPTION&amp;gt;) &amp;lt;NOT&amp;gt; [ &amp;lt;ON&amp;gt; ] &amp;lt;EXCEPTION&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;ON&amp;gt; ] &amp;lt;OVERFLOW&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; [ &amp;lt;ON&amp;gt; ] &amp;lt;OVERFLOW&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_CALL&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CancelStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;CANCEL&amp;gt; ( Identifier() | Literal() )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void CloseStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;CLOSE&amp;gt;
&lt;br&gt;&amp;nbsp; ( FileName()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [ ( ( &amp;lt;REEL&amp;gt; | &amp;lt;UNIT&amp;gt; ) [ ( [ &amp;lt;FOR&amp;gt; ] &amp;lt;REMOVAL&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | [ &amp;lt;WITH&amp;gt; ] &amp;lt;NO&amp;gt; &amp;lt;REWIND&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | [ &amp;lt;WITH&amp;gt; ] ( &amp;lt;NO&amp;gt; &amp;lt;REWIND&amp;gt; | &amp;lt;LOCK&amp;gt; )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ]
&lt;br&gt;&amp;nbsp; )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ComputeStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;COMPUTE&amp;gt; ( Identifier() [ &amp;lt;ROUNDED&amp;gt; ] )+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ( &amp;lt;EQUALCHAR&amp;gt; | &amp;lt;EQUAL&amp;gt; )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ArithmeticExpression()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [ [ &amp;lt;ON&amp;gt; ] &amp;lt;SIZE&amp;gt; &amp;lt;ERROR&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [ &amp;lt;NOT&amp;gt; [ &amp;lt;ON&amp;gt; ] &amp;lt;SIZE&amp;gt; &amp;lt;ERROR&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_COMPUTE&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ContinueStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;CONTINUE&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DeleteStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;DELETE&amp;gt; FileName() [ &amp;lt;RECORD&amp;gt; ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;INVALID&amp;gt; [ &amp;lt;KEY&amp;gt; ] StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; &amp;lt;INVALID&amp;gt; [ &amp;lt;KEY&amp;gt; ] StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_DELETE&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DisplayStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;DISPLAY&amp;gt; ( Identifier() | Literal() )+
&lt;br&gt;&amp;nbsp; [ &amp;lt;UPON&amp;gt; ( MnemonicName() | EnvironmentName() ) ]
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;WITH&amp;gt; ] &amp;lt;NO&amp;gt; &amp;lt;ADVANCING&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void DivideStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;DIVIDE&amp;gt; ( Identifier() | Literal() )
&lt;br&gt;&amp;nbsp; ( &amp;lt;INTO&amp;gt; ( Identifier() | Literal() ) [ &amp;lt;ROUNDED&amp;gt; ] ( &amp;lt;GIVING&amp;gt; ( Identifier() [ &amp;lt;ROUNDED&amp;gt; ] )+ | ( ( Identifier() | Literal() ) [ &amp;lt;ROUNDED&amp;gt; ] )* )
&lt;br&gt;&amp;nbsp; | &amp;lt;BY&amp;gt; ( Identifier() | Literal() ) [ &amp;lt;GIVING&amp;gt; ( Identifier() [ &amp;lt;ROUNDED&amp;gt; ] )+ ]
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;&amp;nbsp; [ &amp;lt;REMAINDER&amp;gt; Identifier() ]
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;ON&amp;gt; ] &amp;lt;SIZE&amp;gt; &amp;lt;ERROR&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; [ &amp;lt;ON&amp;gt; ] &amp;lt;SIZE&amp;gt; &amp;lt;ERROR&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_DIVIDE&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void EntryStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;ENTRY&amp;gt; Literal() [ &amp;lt;USING&amp;gt; ( Identifier() )+ ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void EvaluateStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;EVALUATE&amp;gt; EvaluateValue()
&lt;br&gt;&amp;nbsp; ( &amp;lt;ALSO&amp;gt; EvaluateValue() )*
&lt;br&gt;&amp;nbsp; ( ( EvaluateWhenClause() )+ [ &amp;lt;THEN&amp;gt; ] StatementList() )+
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_EVALUATE&amp;gt; ]
&lt;br&gt;&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void EvaluateValue() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( Condition()
&lt;br&gt;&amp;nbsp; | &amp;lt;TRUE&amp;gt; // Useless here ...
&lt;br&gt;&amp;nbsp; | &amp;lt;FALSE&amp;gt; // Useless here ...
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void EvaluateWhenClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( LOOKAHEAD(&amp;lt;WHEN&amp;gt; &amp;lt;OTHER&amp;gt;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;WHEN&amp;gt; &amp;lt;OTHER&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;WHEN&amp;gt; EvaluatePhrase() ( &amp;lt;ALSO&amp;gt; EvaluatePhrase() )*
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void EvaluateThruPhrase() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; ] ArithmeticExpression() ( &amp;lt;THROUGH&amp;gt; | &amp;lt;THRU&amp;gt; ) ArithmeticExpression()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void EvaluatePhrase() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( LOOKAHEAD(EvaluateThruPhrase())
&lt;br&gt;&amp;nbsp; &amp;nbsp; EvaluateThruPhrase()
&lt;br&gt;&amp;nbsp; | Condition()
&lt;br&gt;&amp;nbsp; | &amp;lt;ANY&amp;gt;
&lt;br&gt;&amp;nbsp; | &amp;lt;TRUE&amp;gt; // Useless here ...
&lt;br&gt;&amp;nbsp; | &amp;lt;FALSE&amp;gt; // Useless here ...
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ExitStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;EXIT&amp;gt; &amp;lt;DOT&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ExitProgramStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;EXIT&amp;gt; &amp;lt;PROGRAM&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void GobackStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;GOBACK&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void GotoStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;GO&amp;gt; [ &amp;lt;TO&amp;gt; ]
&lt;br&gt;&amp;nbsp; ( ( ProcedureName() )+ [ &amp;lt;DEPENDING&amp;gt; [ &amp;lt;ON&amp;gt; ] Identifier() ]
&lt;br&gt;&amp;nbsp; | &amp;lt;MORE_LABELS&amp;gt; // ??? IBM extension ???
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void IfStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;IF&amp;gt; Condition() [ &amp;lt;THEN&amp;gt; ] ( ( Statement() )+ | &amp;lt;NEXT&amp;gt; &amp;lt;SENTENCE&amp;gt; )
&lt;br&gt;&amp;nbsp; [ &amp;lt;ELSE&amp;gt; ( ( Statement() )+ | &amp;lt;NEXT&amp;gt; &amp;lt;SENTENCE&amp;gt; ) ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_IF&amp;gt; ]
&lt;br&gt;&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void InitializeStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;INITIALIZE&amp;gt; ( Identifier() )+
&lt;br&gt;&amp;nbsp; [ &amp;lt;REPLACING&amp;gt; ( ( &amp;lt;ALPHABETIC&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;lt;ALPHANUMERIC&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;lt;NUMERIC&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;lt;ALPHANUMERIC_EDITED&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;lt;NUMERIC_EDITED&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;lt;DBCS&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;lt;EGCS&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ) [ &amp;lt;DATA&amp;gt; ] &amp;lt;BY&amp;gt; ( Identifier() | Literal() )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )+
&lt;br&gt;&amp;nbsp; ]
&lt;br&gt;&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void InspectStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;INSPECT&amp;gt; Identifier()
&lt;br&gt;&amp;nbsp; ( TallyingPhrase()
&lt;br&gt;&amp;nbsp; | ConvertingPhrase()
&lt;br&gt;&amp;nbsp; | ReplacingPhrase()
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void IterableTallyingClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;CHARACTERS&amp;gt; ( IterableBeforeAfterPhrase() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void RecursiveTallyingClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( &amp;lt;ALL&amp;gt; | &amp;lt;LEADING&amp;gt; ) IterableBeforeAfterClause()
&lt;br&gt;&amp;nbsp; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; LOOKAHEAD(Identifier() &amp;lt;FOR&amp;gt;)
&lt;br&gt;&amp;nbsp; ( Identifier() &amp;lt;FOR&amp;gt; ( RecursiveTallyingClause() | IterableTallyingClause() )+ )+
&lt;br&gt;&amp;nbsp; | IterableBeforeAfterClause()
&lt;br&gt;&amp;nbsp; )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void TallyingPhrase() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;TALLYING&amp;gt;
&lt;br&gt;&amp;nbsp; ( Identifier() &amp;lt;FOR&amp;gt; ( RecursiveTallyingClause() | IterableTallyingClause() )+ )+
&lt;br&gt;&amp;nbsp; [ ReplacingPhrase() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ConvertingPhrase() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;CONVERTING&amp;gt; ( Identifier() | Literal() )
&lt;br&gt;&amp;nbsp; &amp;lt;TO&amp;gt; IterableBeforeAfterClause()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ReplacingPhrase() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;REPLACING&amp;gt;
&lt;br&gt;&amp;nbsp; ( &amp;lt;CHARACTERS&amp;gt; &amp;lt;BY&amp;gt; IterableBeforeAfterClause()
&lt;br&gt;&amp;nbsp; | ( &amp;lt;ALL&amp;gt; | &amp;lt;LEADING&amp;gt; | &amp;lt;FIRST&amp;gt; ) ( LOOKAHEAD(( Identifier() | Literal() ) &amp;lt;BY&amp;gt; IterableBeforeAfterClause())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ( Identifier() | Literal() ) &amp;lt;BY&amp;gt; IterableBeforeAfterClause()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )+
&lt;br&gt;&amp;nbsp; )+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void IterableBeforeAfterClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( Identifier() | IterableLiteral() ) ( IterableBeforeAfterPhrase() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void IterableBeforeAfterPhrase() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( &amp;lt;BEFORE&amp;gt; | &amp;lt;AFTER&amp;gt; ) [ &amp;lt;INITIAL&amp;gt; ] ( Identifier() | IterableLiteral() )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void MergeStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;MERGE&amp;gt; FileName()
&lt;br&gt;&amp;nbsp; ( [ &amp;lt;ON&amp;gt; ] ( &amp;lt;ASCENDING&amp;gt; | &amp;lt;DESCENDING&amp;gt; ) [ &amp;lt;KEY&amp;gt; ] ( Identifier() )+ )+
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;COLLATING&amp;gt; ] &amp;lt;SEQUENCE&amp;gt; [ &amp;lt;IS&amp;gt; ] AlphabetName() ] &amp;lt;USING&amp;gt; FileName() ( FileName() )+
&lt;br&gt;&amp;nbsp; ( &amp;lt;OUTPUT&amp;gt; &amp;lt;PROCEDURE&amp;gt; [ &amp;lt;IS&amp;gt; ] ProcedureName() [ ( &amp;lt;THROUGH&amp;gt; | &amp;lt;THRU&amp;gt; ) ProcedureName() ]
&lt;br&gt;&amp;nbsp; | &amp;lt;GIVING&amp;gt; ( FileName() )+
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;/**
&lt;br&gt;&amp;nbsp;* MOVE is probably the first polymorphic statement in the history of computing.
&lt;br&gt;&amp;nbsp;*/
&lt;br&gt;&lt;br&gt;void MoveStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; // &amp;lt;MOVE&amp;gt; FunctionClause() : NON-CONFORMING STANDARD
&lt;br&gt;&amp;nbsp; &amp;lt;MOVE&amp;gt;
&lt;br&gt;&amp;nbsp; ( ArithmeticExpression() &amp;lt;TO&amp;gt; ( Identifier() )+
&lt;br&gt;&amp;nbsp; | ( &amp;lt;CORRESPONDING&amp;gt; | &amp;lt;CORR&amp;gt; ) Identifier() &amp;lt;TO&amp;gt; ( Identifier() )+
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void MultiplyStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;MULTIPLY&amp;gt; ( Identifier() | Literal() ) &amp;lt;BY&amp;gt; ( ( Identifier() | Literal() ) [ &amp;lt;ROUNDED&amp;gt; ] )+
&lt;br&gt;&amp;nbsp; [ &amp;lt;GIVING&amp;gt; ( Identifier() [ &amp;lt;ROUNDED&amp;gt; ] )+ ]
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;ON&amp;gt; ] &amp;lt;SIZE&amp;gt; &amp;lt;ERROR&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; [ &amp;lt;ON&amp;gt; ] &amp;lt;SIZE&amp;gt; &amp;lt;ERROR&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_MULTIPLY&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void OpenStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;OPEN&amp;gt; ( &amp;lt;INPUT&amp;gt; ( FileName() [ ( &amp;lt;REVERSED&amp;gt; | [ &amp;lt;WITH&amp;gt; ] &amp;lt;NO&amp;gt; &amp;lt;REWIND&amp;gt; ) ] )+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;lt;OUTPUT&amp;gt; ( FileName() [ [ &amp;lt;WITH&amp;gt; ] &amp;lt;NO&amp;gt; &amp;lt;REWIND&amp;gt; ] )+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;lt;I_O&amp;gt; ( FileName() )+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;lt;EXTEND&amp;gt; ( FileName() )+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)+
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;/**
&lt;br&gt;&amp;nbsp;* The &amp;quot;one-size-fits-all&amp;quot; statement of COBOL: it replaces for, while, call...
&lt;br&gt;&amp;nbsp;*/
&lt;br&gt;&lt;br&gt;void PerformStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; // TODO : Rule &amp;quot;PERFORM &amp;lt;Identifier Range&amp;gt; ***&amp;lt;With Test&amp;gt;*** &amp;lt;Numeric&amp;gt; TIMES&amp;quot; doesn't exist.
&lt;br&gt;&amp;nbsp; &amp;lt;PERFORM&amp;gt;
&lt;br&gt;&amp;nbsp; ( LOOKAHEAD(PerformFlavour() StatementList() &amp;lt;END_PERFORM&amp;gt;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; PerformFlavour() StatementList() &amp;lt;END_PERFORM&amp;gt;
&lt;br&gt;&amp;nbsp; | LOOKAHEAD(PerformProcedureScopeClause() PerformFlavour())
&lt;br&gt;&amp;nbsp; &amp;nbsp; PerformProcedureScopeClause() PerformFlavour()
&lt;br&gt;&amp;nbsp; | LOOKAHEAD(StatementList() &amp;lt;END_PERFORM&amp;gt;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; StatementList() &amp;lt;END_PERFORM&amp;gt;
&lt;br&gt;&amp;nbsp; | PerformProcedureScopeClause()
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void PerformFlavour() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; PerformTimeClause()
&lt;br&gt;&amp;nbsp; | [ PerformTestPositionClause() ] ( PerformUntilClause() | PerformVaryingWithAfterClause() )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void PerformVaryingWithAfterClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;VARYING&amp;gt; PerformVaryingPhrase() ( &amp;lt;AFTER&amp;gt; PerformVaryingPhrase() )*
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void PerformVaryingPhrase() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; Identifier()
&lt;br&gt;&amp;nbsp; &amp;lt;FROM&amp;gt; ( Identifier() | Literal() )
&lt;br&gt;&amp;nbsp; &amp;lt;BY&amp;gt; ( Identifier() | Literal() )
&lt;br&gt;&amp;nbsp; PerformUntilClause()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void PerformUntilClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;UNTIL&amp;gt; Condition()
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void PerformTestPositionClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; [ &amp;lt;WITH&amp;gt; ] &amp;lt;TEST&amp;gt; ( &amp;lt;BEFORE&amp;gt; | &amp;lt;AFTER&amp;gt; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void PerformProcedureScopeClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ProcedureName() [ ( &amp;lt;THROUGH&amp;gt; | &amp;lt;THRU&amp;gt; ) ProcedureName() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void PerformTimeClause() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( Identifier() | IntegerConstant() ) &amp;lt;TIMES&amp;gt;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ReadStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;READ&amp;gt; FileName() [ &amp;lt;NEXT&amp;gt; ] [ &amp;lt;RECORD&amp;gt; ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;INTO&amp;gt; Identifier() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;KEY&amp;gt; [ &amp;lt;IS&amp;gt; ] Identifier() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;INVALID&amp;gt; [ &amp;lt;KEY&amp;gt; ] StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; &amp;lt;INVALID&amp;gt; [ &amp;lt;KEY&amp;gt; ] StatementList() ]
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;AT&amp;gt; ] &amp;lt;END&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; [ &amp;lt;AT&amp;gt; ] &amp;lt;END&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_READ&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ReleaseStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;RELEASE&amp;gt; RecordName() [ &amp;lt;FROM&amp;gt; Identifier() ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void ReturnStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;RETURN&amp;gt; FileName() [ &amp;lt;RECORD&amp;gt; ] [ &amp;lt;INTO&amp;gt; Identifier() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;AT&amp;gt; ] &amp;lt;END&amp;gt; StatementList()
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; [ &amp;lt;AT&amp;gt; ] &amp;lt;END&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_RETURN&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void RewriteStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;REWRITE&amp;gt; RecordName() [ &amp;lt;FROM&amp;gt; Identifier() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;INVALID&amp;gt; [ &amp;lt;KEY&amp;gt; ] StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; &amp;lt;INVALID&amp;gt; [ &amp;lt;KEY&amp;gt; ] StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_REWRITE&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SearchStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;SEARCH&amp;gt; [ &amp;lt;ALL&amp;gt; ] Identifier()
&lt;br&gt;&amp;nbsp; [ &amp;lt;VARYING&amp;gt; Identifier() ]
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;AT&amp;gt; ] &amp;lt;END&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; ( &amp;lt;WHEN&amp;gt; Condition() ( StatementList() | &amp;lt;NEXT&amp;gt; &amp;lt;SENTENCE&amp;gt; ) )+
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_SEARCH&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SetStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;SET&amp;gt; [ &amp;lt;CONFIGURATION&amp;gt; ] ( Identifier() | Literal() )+
&lt;br&gt;&amp;nbsp; ( &amp;lt;TO&amp;gt; [ &amp;lt;CONFIGURATION&amp;gt; ] ( Identifier() | &amp;lt;TRUE&amp;gt; | &amp;lt;FALSE&amp;gt; | &amp;lt;ON&amp;gt; | &amp;lt;OFF&amp;gt; | [ &amp;lt;ENTRY&amp;gt; ] Literal() )
&lt;br&gt;&amp;nbsp; | ( &amp;lt;UP&amp;gt; | &amp;lt;DOWN&amp;gt; ) [ &amp;lt;BY&amp;gt; ] ( Identifier() | Literal() )
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SortStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;SORT&amp;gt; FileName()
&lt;br&gt;&amp;nbsp; ( [ &amp;lt;ON&amp;gt; ] ( &amp;lt;ASCENDING&amp;gt; | &amp;lt;DESCENDING&amp;gt; ) [ &amp;lt;KEY&amp;gt; ] ( Identifier() )+ )+
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;WITH&amp;gt; ] &amp;lt;DUPLICATES&amp;gt; [ &amp;lt;IN&amp;gt; ] [ &amp;lt;ORDER&amp;gt; ] ]
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;COLLATING&amp;gt; ] &amp;lt;SEQUENCE&amp;gt; [ &amp;lt;IS&amp;gt; ] AlphabetName() ]
&lt;br&gt;&amp;nbsp; ( &amp;lt;USING&amp;gt; ( FileName() )+ | &amp;lt;INPUT&amp;gt; &amp;lt;PROCEDURE&amp;gt; [ &amp;lt;IS&amp;gt; ] ProcedureName() [ ( &amp;lt;THROUGH&amp;gt; | &amp;lt;THRU&amp;gt; ) ProcedureName() ] )
&lt;br&gt;&amp;nbsp; ( &amp;lt;GIVING&amp;gt; ( FileName() )+ | &amp;lt;OUTPUT&amp;gt; &amp;lt;PROCEDURE&amp;gt; [ &amp;lt;IS&amp;gt; ] ProcedureName() [ ( &amp;lt;THROUGH&amp;gt; | &amp;lt;THRU&amp;gt; ) ProcedureName() ] )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void StartStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;START&amp;gt; FileName()
&lt;br&gt;&amp;nbsp; [ &amp;lt;KEY&amp;gt; RelationalOperator() Identifier() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;INVALID&amp;gt; [ &amp;lt;KEY&amp;gt; ] StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; &amp;lt;INVALID&amp;gt; [ &amp;lt;KEY&amp;gt; ] StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_START&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void StopStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;STOP&amp;gt; ( &amp;lt;RUN&amp;gt; | Literal() )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void StringStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;STRING&amp;gt;
&lt;br&gt;&amp;nbsp; ( ( Identifier() | IterableLiteral() )+ &amp;lt;DELIMITED&amp;gt; [ &amp;lt;BY&amp;gt; ] ( Identifier() | IterableLiteral() | &amp;lt;SIZE&amp;gt; ) )+
&lt;br&gt;&amp;nbsp; &amp;lt;INTO&amp;gt; Identifier()
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;WITH&amp;gt; ] &amp;lt;POINTER&amp;gt; Identifier() ]
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;ON&amp;gt; ] &amp;lt;OVERFLOW&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; [ &amp;lt;ON&amp;gt; ] &amp;lt;OVERFLOW&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_STRING&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void SubtractStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;SUBTRACT&amp;gt;
&lt;br&gt;&amp;nbsp; ( ( Identifier() | Literal() )+ &amp;lt;FROM&amp;gt; ( ( Identifier() | Literal() ) [ &amp;lt;ROUNDED&amp;gt; ] )+ [ &amp;lt;GIVING&amp;gt; ( Identifier() [ &amp;lt;ROUNDED&amp;gt; ] )+ ]
&lt;br&gt;&amp;nbsp; | ( &amp;lt;CORRESPONDING&amp;gt; | &amp;lt;CORR&amp;gt; ) Identifier() &amp;lt;FROM&amp;gt; Identifier() [ &amp;lt;ROUNDED&amp;gt; ]
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;ON&amp;gt; ] &amp;lt;SIZE&amp;gt; &amp;lt;ERROR&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; [ &amp;lt;ON&amp;gt; ] &amp;lt;SIZE&amp;gt; &amp;lt;ERROR&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_SUBTRACT&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void UnstringStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;UNSTRING&amp;gt; Identifier()
&lt;br&gt;&amp;nbsp; [ &amp;lt;DELIMITED&amp;gt; [ &amp;lt;BY&amp;gt; ] [ &amp;lt;ALL&amp;gt; ] ( Identifier() | Literal() ) ( &amp;lt;OR&amp;gt; [ &amp;lt;ALL&amp;gt; ] ( Identifier() | Literal() ) )* ]
&lt;br&gt;&amp;nbsp; &amp;lt;INTO&amp;gt;
&lt;br&gt;&amp;nbsp; ( Identifier() [ &amp;lt;DELIMITER&amp;gt; [ &amp;lt;IN&amp;gt; ] Identifier() ] [ &amp;lt;COUNT&amp;gt; [ &amp;lt;IN&amp;gt; ] Identifier() ] )+
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;WITH&amp;gt; ] &amp;lt;POINTER&amp;gt; Identifier() ] [ &amp;lt;TALLYING&amp;gt; [ &amp;lt;IN&amp;gt; ] Identifier() ]
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;ON&amp;gt; ] &amp;lt;OVERFLOW&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; [ &amp;lt;ON&amp;gt; ] &amp;lt;OVERFLOW&amp;gt; StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_UNSTRING&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void UseStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;USE&amp;gt; ( [ &amp;lt;FOR&amp;gt; ] &amp;lt;DEBUGGING&amp;gt; [ &amp;lt;ON&amp;gt; ] ( ( ProcedureName() )+ | &amp;lt;ALL&amp;gt; ( &amp;lt;PROCEDURES&amp;gt; | &amp;lt;REFERENCES&amp;gt; &amp;lt;OF&amp;gt; DataName() ) )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | [ &amp;lt;GLOBAL&amp;gt; ] &amp;lt;AFTER&amp;gt; [ &amp;lt;STANDARD&amp;gt; ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ( ( &amp;lt;EXCEPTION&amp;gt; | &amp;lt;ERROR&amp;gt; )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | [ ( &amp;lt;BEGINNING&amp;gt; | &amp;lt;ENDING&amp;gt; ) ] [ ( &amp;lt;FILE&amp;gt; | &amp;lt;REEL&amp;gt; | &amp;lt;UNIT&amp;gt; ) ] &amp;lt;LABEL&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;PROCEDURE&amp;gt; [ &amp;lt;ON&amp;gt; ] ( ( FileName() )+ | &amp;lt;INPUT&amp;gt; | &amp;lt;OUTPUT&amp;gt; | &amp;lt;I_O&amp;gt; | &amp;lt;EXTEND&amp;gt; )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void WriteStatement() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;lt;WRITE&amp;gt; RecordName() [ &amp;lt;FROM&amp;gt; Identifier() ]
&lt;br&gt;&amp;nbsp; [ AdvancingPhrase() ]
&lt;br&gt;&amp;nbsp; [ [ &amp;lt;AT&amp;gt; ] ( &amp;lt;END_OF_PAGE&amp;gt; | &amp;lt;EOP&amp;gt; ) StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; [ &amp;lt;AT&amp;gt; ] ( &amp;lt;END_OF_PAGE&amp;gt; | &amp;lt;EOP&amp;gt; ) StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;INVALID&amp;gt; [ &amp;lt;KEY&amp;gt; ] StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;NOT&amp;gt; &amp;lt;INVALID&amp;gt; [ &amp;lt;KEY&amp;gt; ] StatementList() ]
&lt;br&gt;&amp;nbsp; [ &amp;lt;END_WRITE&amp;gt; ]
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void AdvancingPhrase() :
&lt;br&gt;{}
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; ( &amp;lt;BEFORE&amp;gt; | &amp;lt;AFTER&amp;gt; ) [ &amp;lt;ADVANCING&amp;gt; ]
&lt;br&gt;&amp;nbsp; ( &amp;lt;PAGE&amp;gt;
&lt;br&gt;&amp;nbsp; | ( IntegerConstant() | Identifier() | Literal() ) [ ( &amp;lt;LINE&amp;gt; | &amp;lt;LINES&amp;gt; ) ]
&lt;br&gt;&amp;nbsp; | MnemonicName() // Useless here ...
&lt;br&gt;&amp;nbsp; )
&lt;br&gt;}
&lt;br&gt;&lt;br /&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26092452&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26092452&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Update-of-the-JavaCC-cobol-grammar-tp26092452p26092452.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26080726</id>
	<title>Generating Parsers with JavaCC, Second Edition</title>
	<published>2009-10-27T09:27:29Z</published>
	<updated>2009-10-27T09:27:29Z</updated>
	<author>
		<name>Tom Copeland</name>
	</author>
	<content type="html">This is a plug... stop reading now if you don't like those!
&lt;br&gt;&lt;br&gt;That said, we're now shipping the second edition of my JavaCC book, &amp;nbsp;
&lt;br&gt;Generating Parsers with JavaCC!
&lt;br&gt;&lt;br&gt;Creating this second edition was a labor of love. I went through every &amp;nbsp;
&lt;br&gt;page of the first edition and found all the places where JavaCC had &amp;nbsp;
&lt;br&gt;moved out from under the book. I've brought those bits up to date, &amp;nbsp;
&lt;br&gt;added new sections all over, fixed numerous typos, added more index &amp;nbsp;
&lt;br&gt;entries, and generally given it a thorough house cleaning. This second &amp;nbsp;
&lt;br&gt;edition also benefits from the intervening two years during which I &amp;nbsp;
&lt;br&gt;worked on the JavaCC code and answered questions from folks on the &amp;nbsp;
&lt;br&gt;javacc-users mailing list. And I've generally had a little more time &amp;nbsp;
&lt;br&gt;to digest some of the information in the first edition, so I think the &amp;nbsp;
&lt;br&gt;second edition is improved because of that.
&lt;br&gt;&lt;br&gt;So, what does the second edition include? Here's a sampling:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;Discussion of new JavaCC features like TRACK_TOKENS, TOKEN_EXTENDS, &amp;nbsp;
&lt;br&gt;SUPPORT_CLASS_VISIBILITY_PUBLIC, TOKEN_FACTORY, and more.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Details of new JJTree features like NODE_CLASS, VISITOR_DATA_TYPE, &amp;nbsp;
&lt;br&gt;VISITOR_RETURN_TYPE, and more.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Updated examples to reflect JavaCC's current defaults - e.g., &amp;nbsp;
&lt;br&gt;JDK_VERSION is now 1.5 by default, the options block is now optional &amp;nbsp;
&lt;br&gt;if empty, and more.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Updated chapter 8 (Case Study: The JavaCC Grammar) to reflect &amp;nbsp;
&lt;br&gt;latest JavaCC grammar.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Update software versions used throughout - the second edition uses &amp;nbsp;
&lt;br&gt;much more recent versions of Java, Maven, JUnit, Jaxen.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Changes since JavaCC 4.0 are flagged in the index for easy lookup.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Many small fixes to the text, to examples, to code samples.
&lt;br&gt;&lt;br&gt;I'm excited to get this second edition out there; I think folks will &amp;nbsp;
&lt;br&gt;find that it's a nice refresh. Enjoy!
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://generatingparserswithjavacc.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://generatingparserswithjavacc.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Yours,
&lt;br&gt;&lt;br&gt;Tom
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26080726&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26080726&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Generating-Parsers-with-JavaCC%2C-Second-Edition-tp26080726p26080726.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26070247</id>
	<title>Re: (jjtree) Problem with TRACK_TOKENS - firstToken is  wrong</title>
	<published>2009-10-26T17:31:11Z</published>
	<updated>2009-10-26T17:31:11Z</updated>
	<author>
		<name>Paul Cager-5</name>
	</author>
	<content type="html">&amp;gt; Hi,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I have issues concerning TRACK_TOKENS in jjtree as it sets the wrong
&lt;br&gt;&amp;gt; &amp;quot;firstToken&amp;quot; on some nodes in my case.
&lt;br&gt;&lt;br&gt;.....
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Is this all a problem with the grammar or a bug in JJTree?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; TIA
&lt;br&gt;&amp;gt; Carsten
&lt;br&gt;&lt;br&gt;&lt;br&gt;Hi Carsten,
&lt;br&gt;&lt;br&gt;That sounds like a bug in jjtree (I've not checked the details, but using
&lt;br&gt;getToken(1) doesn't sound right).
&lt;br&gt;&lt;br&gt;Would you mind creating an issue
&lt;br&gt;(&lt;a href=&quot;https://javacc.dev.java.net/servlets/ProjectIssues&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://javacc.dev.java.net/servlets/ProjectIssues&lt;/a&gt;) so that we remember
&lt;br&gt;to fix it in the next release?
&lt;br&gt;&lt;br&gt;Cheers.
&lt;br&gt;Paul
&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26070247&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26070247&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/%28jjtree%29-Problem-with-TRACK_TOKENS---firstToken-is-wrong-tp25841495p26070247.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26070242</id>
	<title>Re: Token Interface and JFlex</title>
	<published>2009-10-26T17:30:16Z</published>
	<updated>2009-10-26T17:30:16Z</updated>
	<author>
		<name>J.Chris Findlay</name>
	</author>
	<content type="html">KawaDD is now known as FreeCC I believe.&lt;br&gt;&lt;br&gt;&lt;div class=&quot;gmail_quote&quot;&gt;On Tue, Oct 27, 2009 at 10:45 AM, Paul Cager &lt;span dir=&quot;ltr&quot;&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26070242&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;paul-debian@...&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;
&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;&lt;div class=&quot;im&quot;&gt;&amp;gt; I also would like to vote for getting rid of the &amp;quot;wired in&amp;quot; access to&lt;br&gt;

&amp;gt; the Token class, and think providing an IToken interface would be better.&lt;br&gt;
&amp;gt;&lt;br&gt;
&lt;/div&gt;....&lt;br&gt;
&lt;div class=&quot;im&quot;&gt;&lt;br&gt;
&amp;gt; Some tinkering was necessary to make it work, and I believe the task&lt;br&gt;
&amp;gt; would have been a bit easier if an IToken interface had been used by the&lt;br&gt;
&amp;gt; generated code.  Are there currently any plans to move in that direction?&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Bill Fenlason&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/div&gt;Yes, modernising JavaCC is probably high on the &amp;quot;to do&amp;quot; list. There are&lt;br&gt;
also two forks of JavaCC with a more modern API (but not backwards&lt;br&gt;
compatible):&lt;br&gt;
&lt;br&gt;
&lt;a href=&quot;https://javacc.dev.java.net/servlets/ReadMsg?list=users&amp;amp;msgNo=2923&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;https://javacc.dev.java.net/servlets/ReadMsg?list=users&amp;amp;msgNo=2923&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
and&lt;br&gt;
&lt;br&gt;
KawaDD.&lt;br&gt;
&lt;br&gt;
Cheers,&lt;br&gt;
&lt;font color=&quot;#888888&quot;&gt;Paul&lt;br&gt;
&lt;/font&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class=&quot;h5&quot;&gt;&lt;br&gt;
&lt;br&gt;
---------------------------------------------------------------------&lt;br&gt;
To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26070242&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;&lt;br&gt;
For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26070242&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;&lt;br clear=&quot;all&quot;&gt;&lt;br&gt;-- &lt;br&gt; - J.Chris Findlay&lt;br&gt;   (c:&lt;br&gt;
</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/New-version-of-JavaCC-uploaded-tp25984167p26070242.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26068252</id>
	<title>Re: Token Interface and JFlex</title>
	<published>2009-10-26T14:45:34Z</published>
	<updated>2009-10-26T14:45:34Z</updated>
	<author>
		<name>Paul Cager-5</name>
	</author>
	<content type="html">&amp;gt; I also would like to vote for getting rid of the &amp;quot;wired in&amp;quot; access to
&lt;br&gt;&amp;gt; the Token class, and think providing an IToken interface would be better.
&lt;br&gt;&amp;gt;
&lt;br&gt;....
&lt;br&gt;&lt;br&gt;&amp;gt; Some tinkering was necessary to make it work, and I believe the task
&lt;br&gt;&amp;gt; would have been a bit easier if an IToken interface had been used by the
&lt;br&gt;&amp;gt; generated code. &amp;nbsp;Are there currently any plans to move in that direction?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Bill Fenlason
&lt;br&gt;&lt;br&gt;&lt;br&gt;Yes, modernising JavaCC is probably high on the &amp;quot;to do&amp;quot; list. There are
&lt;br&gt;also two forks of JavaCC with a more modern API (but not backwards
&lt;br&gt;compatible):
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;https://javacc.dev.java.net/servlets/ReadMsg?list=users&amp;msgNo=2923&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://javacc.dev.java.net/servlets/ReadMsg?list=users&amp;msgNo=2923&lt;/a&gt;&lt;br&gt;&lt;br&gt;and
&lt;br&gt;&lt;br&gt;KawaDD.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;Paul
&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26068252&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26068252&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/New-version-of-JavaCC-uploaded-tp25984167p26068252.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26067535</id>
	<title>Re: Error Recovery</title>
	<published>2009-10-26T13:59:33Z</published>
	<updated>2009-10-26T13:59:33Z</updated>
	<author>
		<name>J.Chris Findlay</name>
	</author>
	<content type="html">There are examples in the docs for both shallow and deep error recovery.&lt;br&gt;&lt;br&gt;&lt;div class=&quot;gmail_quote&quot;&gt;On Tue, Oct 27, 2009 at 9:57 AM, Kurt Guenther &lt;span dir=&quot;ltr&quot;&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26067535&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kurtg@...&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;
&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;Are there any patterns for doing error recovery (to report more then one error to the user) ?&lt;br&gt;

&lt;br&gt;
&lt;br&gt;
---------------------------------------------------------------------&lt;br&gt;
To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26067535&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;&lt;br&gt;
For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26067535&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;&lt;br clear=&quot;all&quot;&gt;&lt;br&gt;-- &lt;br&gt; - J.Chris Findlay&lt;br&gt;   (c:&lt;br&gt;
</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Error-Recovery-tp26067501p26067535.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26067501</id>
	<title>Error Recovery</title>
	<published>2009-10-26T13:57:51Z</published>
	<updated>2009-10-26T13:57:51Z</updated>
	<author>
		<name>KurtG</name>
	</author>
	<content type="html">Are there any patterns for doing error recovery (to report more then one 
&lt;br&gt;error to the user) ?
&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26067501&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26067501&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Error-Recovery-tp26067501p26067501.html" />
</entry>

</feed>
