|
|
@ -33,7 +33,7 @@ import java.util.ArrayList;
|
|
|
|
/** Producer of token-related values for the parser. */
|
|
|
|
/** Producer of token-related values for the parser. */
|
|
|
|
final ComplexSymbolFactory symbolFactory = new ComplexSymbolFactory();
|
|
|
|
final ComplexSymbolFactory symbolFactory = new ComplexSymbolFactory();
|
|
|
|
private int currIndent = 0; //Current Indentation Level
|
|
|
|
private int currIndent = 0; //Current Indentation Level
|
|
|
|
private int currString = "";
|
|
|
|
private String currString = "";
|
|
|
|
/*A stack that keeps track of the spaces in each Indentation Level*/
|
|
|
|
/*A stack that keeps track of the spaces in each Indentation Level*/
|
|
|
|
private ArrayList<Integer> stack = new ArrayList<Integer>(20);
|
|
|
|
private ArrayList<Integer> stack = new ArrayList<Integer>(20);
|
|
|
|
/** Return a terminal symbol of syntactic category TYPE and no
|
|
|
|
/** Return a terminal symbol of syntactic category TYPE and no
|
|
|
@ -70,7 +70,7 @@ WhiteSpace = [ \t]
|
|
|
|
LineBreak = \r|\n|\r\n
|
|
|
|
LineBreak = \r|\n|\r\n
|
|
|
|
|
|
|
|
|
|
|
|
IntegerLiteral = 0|[1-9][0-9]* // Accroding to the manual, 00+ is illeagal
|
|
|
|
IntegerLiteral = 0|[1-9][0-9]* // Accroding to the manual, 00+ is illeagal
|
|
|
|
StringLiteral = ([^\"\\]|(\\\")|(\\t)|(\\r)|(\\n)|(\\\\))* // \n, \r, \t, \\, \" and Anything except \ and "
|
|
|
|
StringLiteral = ([^\"\\]|(\\\")|(\\t)|(\\r)|(\\n)|(\\\\))+ // \n, \r, \t, \\, \" and Anything except \ and "
|
|
|
|
Identifiers = (_|[a-z]|[A-Z])(_|[a-z]|[A-Z][0-9])*
|
|
|
|
Identifiers = (_|[a-z]|[A-Z])(_|[a-z]|[A-Z][0-9])*
|
|
|
|
Comments = #[^\r\n]*
|
|
|
|
Comments = #[^\r\n]*
|
|
|
|
%%
|
|
|
|
%%
|
|
|
@ -138,7 +138,7 @@ if True:
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/*Otherwise, we will start dealing with the rest
|
|
|
|
/*Otherwise, we will start dealing with the rest
|
|
|
|
of the line after indentation in AFTER state. */
|
|
|
|
of the line after indentation in AFTER state. */
|
|
|
|
yystart(AFTER);
|
|
|
|
yybegin(AFTER);
|
|
|
|
if(top()< currIndent)
|
|
|
|
if(top()< currIndent)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
/*
|
|
|
@ -160,7 +160,7 @@ if True:
|
|
|
|
/* Literals. */
|
|
|
|
/* Literals. */
|
|
|
|
{IntegerLiteral} { return symbol(ChocoPyTokens.NUMBER,
|
|
|
|
{IntegerLiteral} { return symbol(ChocoPyTokens.NUMBER,
|
|
|
|
Integer.parseInt(yytext())); }
|
|
|
|
Integer.parseInt(yytext())); }
|
|
|
|
"\"" {yystart(STR); currString = "";} //Start taking a string when see a "
|
|
|
|
"\"" {yybegin(STR); currString = "";} //Start taking a string when see a "
|
|
|
|
"False" { return symbol(ChocoPyTokens.BOOL, false); }
|
|
|
|
"False" { return symbol(ChocoPyTokens.BOOL, false); }
|
|
|
|
"True" { return symbol(ChocoPyTokens.BOOL, true); }
|
|
|
|
"True" { return symbol(ChocoPyTokens.BOOL, true); }
|
|
|
|
"None" { return symbol(ChocoPyTokens.NONE); }
|
|
|
|
"None" { return symbol(ChocoPyTokens.NONE); }
|
|
|
|