<?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-09T12:46:22Z</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-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>

<entry>
	<id>tag:old.nabble.com,2006:post-26055820</id>
	<title>RE: Parsing strings with quotes....</title>
	<published>2009-10-26T01:14:51Z</published>
	<updated>2009-10-26T01:14:51Z</updated>
	<author>
		<name>Mazas Marc</name>
	</author>
	<content type="html">Try this ?
&lt;br&gt;&lt;br&gt;&amp;lt;QUOTED_STRING: &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;&lt;br&gt;You should also extend this if you can have two apostrophes in a row
&lt;br&gt;&lt;br&gt;&lt;br&gt;Marc MAZAS
&lt;br&gt;&lt;br&gt;&lt;br&gt;-----Message d'origine-----
&lt;br&gt;De : Alexander James [mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26055820&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;earwigboy@...&lt;/a&gt;] 
&lt;br&gt;Envoyé : dimanche 25 octobre 2009 17:55
&lt;br&gt;À : &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26055820&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users@...&lt;/a&gt;
&lt;br&gt;Objet : [JavaCC] Parsing strings with quotes....
&lt;br&gt;&lt;br&gt;Hi All,
&lt;br&gt;&lt;br&gt;I'm trying to parse a language where single quotes are allowed within strings that are themselves enclosed within the same quotes without an escape character being used.
&lt;br&gt;E.g. 'This is how you'''d use an apostrophe'
&lt;br&gt;&lt;br&gt;At the moment I'm defining a string within single quotes as the
&lt;br&gt;following:
&lt;br&gt;&lt;br&gt;&amp;lt;QUOTED_STRING: &amp;quot;\'&amp;quot; (~[&amp;quot;\'&amp;quot;])* &amp;quot;\'&amp;quot;&amp;gt;
&lt;br&gt;&lt;br&gt;Has anyone got an suggestions on I could handle this?
&lt;br&gt;&lt;br&gt;Cheers,
&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=26055820&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=26055820&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&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=26055820&amp;i=4&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=26055820&amp;i=5&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/Parsing-strings-with-quotes....-tp26049838p26055820.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26049838</id>
	<title>Parsing strings with quotes....</title>
	<published>2009-10-25T09:54:55Z</published>
	<updated>2009-10-25T09:54:55Z</updated>
	<author>
		<name>Alexander James-2</name>
	</author>
	<content type="html">Hi All,
&lt;br&gt;&lt;br&gt;I'm trying to parse a language where single quotes are allowed within &amp;nbsp;
&lt;br&gt;strings that are themselves enclosed within the same quotes without an &amp;nbsp;
&lt;br&gt;escape character being used.
&lt;br&gt;E.g. 'This is how you'''d use an apostrophe'
&lt;br&gt;&lt;br&gt;At the moment I'm defining a string within single quotes as the &amp;nbsp;
&lt;br&gt;following:
&lt;br&gt;&lt;br&gt;&amp;lt;QUOTED_STRING: &amp;quot;\'&amp;quot; (~[&amp;quot;\'&amp;quot;])* &amp;quot;\'&amp;quot;&amp;gt;
&lt;br&gt;&lt;br&gt;Has anyone got an suggestions on I could handle this?
&lt;br&gt;&lt;br&gt;Cheers,
&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=26049838&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=26049838&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/Parsing-strings-with-quotes....-tp26049838p26049838.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26028621</id>
	<title>Token Interface and JFlex</title>
	<published>2009-10-22T08:37:02Z</published>
	<updated>2009-10-22T08:37:02Z</updated>
	<author>
		<name>Bill Fenlason</name>
	</author>
	<content type="html">I also would like to vote for getting rid of the &amp;quot;wired in&amp;quot; access to 
&lt;br&gt;the Token class, and think providing an IToken interface would be better. 
&lt;br&gt;&lt;br&gt;I used JavaCC and a JFlex generated scanner in my PL/I Eclipse plugin. &amp;nbsp;
&lt;br&gt;I have not seen the JavaCC / JFlex combination mentioned in this forum 
&lt;br&gt;and don't know if it is common. &amp;nbsp;In my case, several reasons made it an 
&lt;br&gt;effective solution. &amp;nbsp;PL/I has hundreds of keywords (1200+ line lex file) 
&lt;br&gt;and I had a flex definition file to start with, scanning and parsing run 
&lt;br&gt;in different threads, etc. &amp;nbsp;(details on request)
&lt;br&gt;&lt;br&gt;Some tinkering was necessary to make it work, and I believe the task 
&lt;br&gt;would have been a bit easier if an IToken interface had been used by the 
&lt;br&gt;generated code. &amp;nbsp;Are there currently any plans to move in that direction?
&lt;br&gt;&lt;br&gt;Bill Fenlason
&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=26028621&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=26028621&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-tp25984167p26028621.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25984167</id>
	<title>New version of JavaCC uploaded</title>
	<published>2009-10-20T16:25:20Z</published>
	<updated>2009-10-20T16:25:20Z</updated>
	<author>
		<name>Paul Cager-5</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;I have uploaded a new release of JavaCC 5.0 to the Documents and Files
&lt;br&gt;secion. This fixes a rather embarrassing problem with the previous release
&lt;br&gt;where the &amp;quot;bin/javacc.bat&amp;quot; file was missing.
&lt;br&gt;&lt;br&gt;Sorry for the inconvenience.
&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=25984167&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=25984167&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-tp25984167p25984167.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25981307</id>
	<title>Question on examples/Lookahead</title>
	<published>2009-10-20T12:47:30Z</published>
	<updated>2009-10-20T12:47:30Z</updated>
	<author>
		<name>Riadh Elloumi-4</name>
	</author>
	<content type="html">Hi all,
&lt;br&gt;&lt;br&gt;I am newbie to JavaCC and I started by the tutorials. I tried the 
&lt;br&gt;examples/Lookahead/Example1.jj and I am surprised that the grammar does 
&lt;br&gt;not accept &amp;quot;abc&amp;quot; as it is said on the tutorial. I am using JavaCC 5.0 
&lt;br&gt;and I compile and run the example with these commands:
&lt;br&gt;&lt;br&gt;riadh@giscard:Lookahead$ ../../bin/javacc Example1.jj
&lt;br&gt;Java Compiler Compiler Version 5.0 (Parser Generator)
&lt;br&gt;(type &amp;quot;javacc&amp;quot; with no arguments for help)
&lt;br&gt;Reading from file Example1.jj . . .
&lt;br&gt;Warning: Choice conflict in [...] construct at line 60, column 7.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Expansion nested within construct and expansion following construct
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;have common prefixes, one of which is: &amp;quot;c&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Consider using a lookahead of 2 or more for nested expansion.
&lt;br&gt;File &amp;quot;TokenMgrError.java&amp;quot; is being rebuilt.
&lt;br&gt;File &amp;quot;ParseException.java&amp;quot; is being rebuilt.
&lt;br&gt;File &amp;quot;Token.java&amp;quot; is being rebuilt.
&lt;br&gt;File &amp;quot;SimpleCharStream.java&amp;quot; is being rebuilt.
&lt;br&gt;Parser generated with 0 errors and 1 warnings.
&lt;br&gt;riadh@giscard:Lookahead$ javac *.java
&lt;br&gt;riadh@giscard:Lookahead$ java Example
&lt;br&gt;abc
&lt;br&gt;Exception in thread &amp;quot;main&amp;quot; ParseException: Encountered &amp;quot;&amp;lt;EOF&amp;gt;&amp;quot; at line 
&lt;br&gt;1, column 4.
&lt;br&gt;Was expecting:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;quot;c&amp;quot; ...
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at Example.generateParseException(Example.java:206)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at Example.jj_consume_token(Example.java:144)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at Example.Input(Example.java:12)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at Example.main(Example.java:6)
&lt;br&gt;riadh@giscard:Lookahead$
&lt;br&gt;&lt;br&gt;Can you help me to understand why &amp;quot;abc&amp;quot; is not accepted?
&lt;br&gt;&lt;br&gt;Best regards,
&lt;br&gt;&lt;br&gt;Riadh.
&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=25981307&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=25981307&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-tp25981307p25981307.html" />
</entry>

</feed>
