[antlr-interest] How to Creating an end of file rule for **-| DFHMSD TYPE=FINAL END as per my BMS
din_wins
din_wins at yahoo.com
Sun Aug 29 21:40:09 PDT 2004
Dear Friends,
I am writing grammar for BMS Mainframe. I am struck with the
following issues.
1) Spaces inside of a quoted string
2) Creating an end of file rule for **-| DFHMSD TYPE=FINAL END
3) The actual non-readable character at he the end of file
4) The header should also include | IDENTIFIER IDENTIFIER
assign. Once
this is fixed it may actually correct #2 as well.
below is my grammar file.
=========================================================
options {
language = "CSharp";
namespace = "Worksoft.Parsers";
}
class BMSLexer extends Lexer;
options
{
k = 2;
}
IDENTIFIER
:
( 'a'..'z'
|'A'..'Z'
|'0'..'9'
|'.'|'/'
|'~'|'`'|'!'|'@'|'#'|'$'|'%'|'^'|'&'|'*'|'-'|'_'|'+'
|'['|']'|'{'|'}'|'\\'|'|'
)+
;
/*
NEWLINE : '\r' '\n' | '\n'
;
*/
QUOTATION : '\"'
;
TICK : '\''
;
COMMA : ','
;
EQUAL : '='
;
LPAREN : '('
;
RPAREN : ')'
;
WS : ( ' '
| '\t'
| '\r' '\n'
| '\n')
{ $setType(Token.SKIP); }
;
class BMSParser extends Parser;
options
{
k = 3;
}
{
private ParserHelper _parserHelper = new ParserHelper();
}
main returns [string xml = string.Empty]
:
(
file
)
{
xml = _parserHelper.ToString();
}
;
file :
{
_parserHelper.Start();
Console.WriteLine("Start file");
}
(head body EOF)
{
Console.WriteLine("End file");
_parserHelper.End();
}
;
head :
{
Console.WriteLine("start head");
}
(a:IDENTIFIER b:IDENTIFIER assigngroup)
{
Console.WriteLine("End head - " + a.getText() + " - " + b.getText
());
}
;
body :
{
Console.WriteLine("Start body");
}
(parent)*
{
Console.WriteLine("End body");
}
;
assigngroup :
{
Console.WriteLine("Start assigngroup");
}
(assign (COMMA a:IDENTIFIER assign)*)+
{
Console.WriteLine("End assigngroup = " + a.getText());
}
;
assign :
{
Console.WriteLine("Start assign");
}
a:IDENTIFIER EQUAL value
{
Console.WriteLine("End assign - " + a.getText());
}
|
b:IDENTIFIER EQUAL valuegroup
{
Console.WriteLine("End assign - " + b.getText());
}
;
valuegroup :
{
Console.WriteLine("Start valuegroup");
}
LPAREN value (COMMA value)* RPAREN
{
Console.WriteLine("End valuegroup");
}
;
value :
{
Console.WriteLine("Start value");
}
a:IDENTIFIER
{
Console.WriteLine("End value = " + a.getText());
}
|
TICK b:IDENTIFIER TICK
{
Console.WriteLine("End value = '" + b.getText() + "'");
}
;
parent :
{
Console.WriteLine("Start parent");
}
a:IDENTIFIER (obj)+
{
Console.WriteLine("End parent - " + a.getText());
}
;
obj :
{
Console.WriteLine("Start obj");
}
a:IDENTIFIER assigngroup
{
Console.WriteLine("End obj - " + a.getText());
}
;
========================
below is my .bms file.
==========================
CHCM001 DFHMSD
TYPE=MAP, X
MODE=INOUT, x
LANG=COBOL, x
CTRL=FREEKB, X
STORAGE=AUTO, x
TERM=3270, x
TIOAPFX=YES
CHCM001 DFHMDI MAPATTS=
(COLOR,PS,HILIGHT,VALIDN), x
DSATTS=
(COLOR,PS,HILIGHT,VALIDN), X
SIZE=(24,80)
DFHMDF POS=
(1,1), x
LENGTH=007, x
COLOR=YELLOW, X
ATTRB=ASKIP, x
INITIAL='CHCM001'
DFHMDF POS=
(1,29), x
LENGTH=022, x
COLOR=YELLOW, X
ATTRB=ASKIP, x
INITIAL='CHC PERSONNEL TRACKING'
SYSDATE DFHMDF POS=
(1,71), x
LENGTH=008, x
COLOR=YELLOW, X
ATTRB=(ASKIP,BRT)
DFHMDF POS=
(4,26), x
LENGTH=031, x
COLOR=YELLOW, X
ATTRB=ASKIP, x
INITIAL='1. PERSONNEL LISTING'
DFHMDF POS=
(6,26), x
LENGTH=031, x
COLOR=YELLOW, X
ATTRB=ASKIP, x
INITIAL='2. PERSONNEL INQUIRY'
DFHMDF POS=
(8,26), x
LENGTH=031, x
COLOR=YELLOW, X
ATTRB=ASKIP, x
INITIAL='3. PERSONNEL MAINTENANCE'
DFHMDF POS=
(10,26), x
LENGTH=031, x
COLOR=YELLOW, X
ATTRB=ASKIP, x
INITIAL='4. PERFORMANCE INQUIRY'
DFHMDF POS=
(12,26), x
LENGTH=031, x
COLOR=YELLOW, X
ATTRB=ASKIP, x
INITIAL='5. PERFORMANCE MAINTENANCE'
DFHMDF POS=
(14,26), x
LENGTH=031, x
COLOR=YELLOW, X
ATTRB=ASKIP, x
INITIAL='6. PERFORMANCE HISTORY'
DFHMDF POS=
(18,26), x
LENGTH=031, x
COLOR=YELLOW, X
ATTRB=ASKIP, x
INITIAL='12. PREVIOUS MENU/EXIT FUNCTION'
MSG DFHMDF POS=
(24,1), x
LENGTH=079, x
ATTRB=
(ASKIP,IC,BRT), X
COLOR=RED, X
INITIAL='HIT PFKEY FOR CORRESPONDING MENU SELECTION'
**-|
DFHMSD TYPE=FINAL
END
============
Regards,
P.Srinivasa Dinesh.
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/antlr-interest/
<*> To unsubscribe from this group, send an email to:
antlr-interest-unsubscribe at yahoogroups.com
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list