All pastes #2108959 Raw Edit

Miscellany

public text v1 · immutable
#2108959 ·published 2012-02-02 08:53 UTC
rendered paste body
PARSER_BEGIN(MiniSParser)
package parser;
public class MiniSParser {}
PARSER_END(MiniSParser)

/* SCANNER */

/* Skip whitespace */
SKIP : { " " | "\t" | "\n" | "\r" }

/* Reserved words */
TOKEN: {
  < FOR: "for">
| < IF: "if">
| < FI: "fi">
| < DO: "do">
| < OD: "od">
| < UNTIL: "until">
| < NOT: "not">
| < THEN: "then">
}

/* Numerals */
TOKEN: {
  < NUMERAL: (["0"-"9"])+ "." (["0"-"9"])+ >   
}

/* Operators */
TOKEN: {
  < ASSIGN: "=" >
}

/* Identifiers */
TOKEN: {
  < ID: ["A"-"Z", "a"-"z"](["0"-"9"]|["a"-"z"]|["A"-"Z"])* >
}

/* Illegal */

TOKEN: {
  < ERROR: ~[] >
}

/* PARSER */

Prgram start() : {}
{
  stmt() <EOF>
  { return jjtThis; }
}

void stmt() : {} 
{
  forStmt()
| ifStmt()
| assignment()
}

void forStmt() : {}  
{
  <FOR> ID "=" expr() <UNTIL> expr() <DO> stmt() <OD>
}

void ifStmt() : {} 
{
  <IF> expr() <THEN> stmt() <FI>
}

void assignment() : {}          
{
 ID "=" expr()
}

void expr() : {} 
{
  ID
| NUMERAL
| <NOT> expr()
}