[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

SV: Language with multiple statements on one line



Seems like I can answer my own question.. :-) I figured it out.. (maybe someone else want to know it also)

Fixed grammar:

Helpers
  letter = ['A'..'Z'] | ['a'..'z'];
  digit = ['0'..'9'];
  cr = 13;
  lf = 10;
  tab = 9;
  not_cr_lf = [tab + [[32..127] - [cr + lf]]];
  nl = lf | cr | cr lf;
  colon = ':';
  space = ' ';
  underscore = '_';

Tokens
  assign = '=';

  identifier = letter (letter | digit)*;
  number = digit+;

  separator = colon;
  new_line = nl;
  blank = (tab | space)*;

Ignored Tokens
  blank;

Productions
  lines =
    {program} statements new_line lines |
    {line} statements new_line;

  statements =
    {list}  statement separator statements |
    {single} statement |
    {empty};

  statement = 
    {assignment} identifier assign expression;

  expression =
    {value} value;

  value =
    {constant}   number |
    {identifier} identifier;



-----Opprinnelig melding-----
Fra: owner-sablecc-list@sable.mcgill.ca
[mailto:owner-sablecc-list@sable.mcgill.ca]På; vegne av Jørgensen Paul
Rene (Networks)
Sendt: 7. januar 2004 13:31
Til: sablecc-list@sable.mcgill.ca
Emne: Language with multiple statements on one line


Hi,

I'm trying to write a language grammar that supports multiple statements on one line separated by a colon (like good old Basic).

Example program

### BEGIN
<nl>
A=4 : B=5<nl>
<nl>
<nl>
A=A+B<nl>
<nl>
B=1 : C=1<nl>
<nl>
### END

I can't make this to work... I want full flexibility to insert as many nl's as I want anywhere in between, at the top and so on. (I've inserted <nl>'s to indicate a line feed.

Please help..

This is my current grammar that try to use:
 
Package org.learn;

Helpers
  letter = ['A'..'Z'] | ['a'..'z'];
  digit = ['0'..'9'];
  cr = 13;
  lf = 10;
  tab = 9;
  not_cr_lf = [tab + [[32..127] - [cr + lf]]];
  nl = lf | cr | cr lf;
  colon = ':';
  space = ' ';

Tokens
  assign = '=';

  identifier = letter (letter | digit)*;
  number = digit+;

  separator = (nl+ | colon);
  blank = (tab | space)*;

Ignored Tokens
  blank;

Productions
  statements =
    {list}  statement statements | 
    {empty} ;

  statement = 
    {assignment} identifier assign expression separator;

  expression =
    {value} value;

  value =
    {constant}   number |
    {identifier} identifier;