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

Re: getting [1,1] expecting: EOF no matter what



Hi Jorge,

I've tested with the following files, and it works fine.

$ java -jar sablecc.jar grammar.sablecc
$ javac Main.java
$ java Main test.txt

Can you try with the attached files?

Etienne

Jorge Mario G. Mazo wrote:
> evey grammar I have tried I awlays get
> [1,1] expecting: EOF, if I move the first caracter of the example file
> ...

-- 
Etienne M. Gagnon, Ph.D.            http://www.info2.uqam.ca/~egagnon/
SableVM:                                       http://www.sablevm.org/
SableCC:                                       http://www.sablecc.org/
import java.io.FileReader;
import java.io.PushbackReader;
import org.sablecc.baba.lexer.*;
import org.sablecc.baba.node.*;
import org.sablecc.baba.parser.*;
import java.io.*;

public class Main {
   public static void main(String args[]) {
   if (args.length < 1) {
       System.out.println("Usage:");
       System.out.println("java Main <filename>");
   }

   try {
       Lexer lexer = new Lexer(new PushbackReader(new
BufferedReader(new FileReader(args[0])),1024));

       Parser parser = new Parser(lexer);

       Start ast = parser.parse();
   }
   catch (Exception e) {
       System.out.println(e.toString());
   }
   }
}
Package org.sablecc.baba;

Helpers
  digitos    = ['0'..'9'];
  letras     = ['A'..'Z']|['a'..'z'];
  caracteres = ' '|digitos|letras;
  lf         = 10;
  cr         = 13;
  eol        = cr lf | cr | lf;
  blank      = 10 | 10 13 | 9 | ' ';

Tokens
  if    = 'if';
  then  = 'then';
  else  = 'else';
  while = 'while';
  for   = 'for';
  end   = 'end';
  do    = 'do';

  numero   = digitos+;
  variable = letras(letras|digitos)*;

  endofline  = eol;
  blanktoken = blank+;

Ignored Tokens
  endofline,
  blanktoken;

Productions
  programa =
    lista_decl;

  lista_decl =
    decl*;

  decl =
    variable;

  lista_instr =
    instr*;

  instr =
    {declaracion} decl |
    {if}          if variable then lista_instr end |
    {while}       while variable do lista_instr end |
    {for}         for variable do lista_instr end;
ahsh