style: java: get closer to the Java style

* examples/java/calc/Calc.y, examples/java/simple/Calc.y: here.
This commit is contained in:
Akim Demaille
2020-04-13 15:39:34 +02:00
parent 42ab6c1e44
commit 9a33570493
2 changed files with 125 additions and 143 deletions

View File

@@ -19,19 +19,17 @@
} }
%code { %code {
public static void main(String[] args) throws IOException public static void main(String[] args) throws IOException {
{ CalcLexer l = new CalcLexer(System.in);
CalcLexer l = new CalcLexer (System.in); Calc p = new Calc(l);
Calc p = new Calc (l);
for (String arg : args) for (String arg : args)
if (arg.equals ("-p")) if (arg.equals("-p"))
p.setDebugLevel (1); p.setDebugLevel(1);
if (!p.parse ()) if (!p.parse())
System.exit (1); System.exit(1);
} }
static String i18n(String s) static String i18n(String s) {
{
return s; return s;
} }
} }
@@ -67,7 +65,7 @@ input:
line: line:
EOL EOL
| exp EOL { System.out.println ($exp); } | exp EOL { System.out.println($exp); }
| error EOL | error EOL
; ;
@@ -75,15 +73,15 @@ exp:
NUM { $$ = $1; } NUM { $$ = $1; }
| exp "=" exp | exp "=" exp
{ {
if ($1.intValue () != $3.intValue ()) if ($1.intValue() != $3.intValue())
yyerror (@$, "calc: error: " + $1 + " != " + $3); yyerror(@$, "calc: error: " + $1 + " != " + $3);
} }
| exp "+" exp { $$ = $1 + $3; } | exp "+" exp { $$ = $1 + $3; }
| exp "-" exp { $$ = $1 - $3; } | exp "-" exp { $$ = $1 - $3; }
| exp "*" exp { $$ = $1 * $3; } | exp "*" exp { $$ = $1 * $3; }
| exp "/" exp { $$ = $1 / $3; } | exp "/" exp { $$ = $1 / $3; }
| "-" exp %prec NEG { $$ = -$2; } | "-" exp %prec NEG { $$ = -$2; }
| exp "^" exp { $$ = (int) Math.pow ($1, $3); } | exp "^" exp { $$ = (int) Math.pow($1, $3); }
| "(" exp ")" { $$ = $2; } | "(" exp ")" { $$ = $2; }
| "(" error ")" { $$ = 1111; } | "(" error ")" { $$ = 1111; }
| "!" { $$ = 0; return YYERROR; } | "!" { $$ = 0; return YYERROR; }
@@ -96,98 +94,94 @@ class CalcLexer implements Calc.Lexer {
StreamTokenizer st; StreamTokenizer st;
PositionReader reader; PositionReader reader;
public CalcLexer (InputStream is) public CalcLexer(InputStream is) {
{ reader = new PositionReader(new InputStreamReader(is));
reader = new PositionReader (new InputStreamReader (is)); st = new StreamTokenizer(reader);
st = new StreamTokenizer (reader); st.resetSyntax();
st.resetSyntax (); st.eolIsSignificant(true);
st.eolIsSignificant (true); st.wordChars('0', '9');
st.wordChars ('0', '9');
} }
Position start = new Position (1, 0); Position start = new Position(1, 0);
Position end = new Position (1, 0); Position end = new Position(1, 0);
public Position getStartPos () { public Position getStartPos() {
return new Position (start); return new Position(start);
} }
public Position getEndPos () { public Position getEndPos() {
return new Position (end); return new Position(end);
} }
public void reportSyntaxError (Calc.Context ctx) public void reportSyntaxError(Calc.Context ctx) {
{ System.err.print(ctx.getLocation() + ": syntax error");
System.err.print (ctx.getLocation () + ": syntax error");
{ {
final int TOKENMAX = 10; final int TOKENMAX = 10;
Calc.SymbolKind[] arg = new Calc.SymbolKind[TOKENMAX]; Calc.SymbolKind[] arg = new Calc.SymbolKind[TOKENMAX];
int n = ctx.getExpectedTokens (arg, TOKENMAX); int n = ctx.getExpectedTokens(arg, TOKENMAX);
for (int i = 0; i < n; ++i) for (int i = 0; i < n; ++i)
System.err.print ((i == 0 ? ": expected " : " or ") System.err.print((i == 0 ? ": expected " : " or ")
+ ctx.yysymbolName (arg[i])); + ctx.yysymbolName(arg[i]));
} }
{ {
Calc.SymbolKind lookahead = ctx.getToken (); Calc.SymbolKind lookahead = ctx.getToken();
if (lookahead != null) if (lookahead != null)
System.err.print (" before " + ctx.yysymbolName (lookahead)); System.err.print(" before " + ctx.yysymbolName(lookahead));
} }
System.err.println (""); System.err.println("");
} }
public void yyerror (Calc.Location l, String s) public void yyerror(Calc.Location l, String s) {
{
if (l == null) if (l == null)
System.err.println (s); System.err.println(s);
else else
System.err.println (l + ": " + s); System.err.println(l + ": " + s);
} }
Integer yylval; Integer yylval;
public Object getLVal () { public Object getLVal() {
return yylval; return yylval;
} }
public int yylex () throws IOException { public int yylex() throws IOException {
start.set (reader.getPosition ()); start.set(reader.getPosition());
int ttype = st.nextToken (); int ttype = st.nextToken();
end.set (reader.getPosition ()); end.set(reader.getPosition());
switch (ttype) switch (ttype) {
{ case StreamTokenizer.TT_EOF:
case StreamTokenizer.TT_EOF: return EOF;
return EOF; case StreamTokenizer.TT_EOL:
case StreamTokenizer.TT_EOL: end.line += 1;
end.line += 1; end.column = 0;
end.column = 0; return EOL;
return EOL; case StreamTokenizer.TT_WORD:
case StreamTokenizer.TT_WORD: yylval = new Integer(st.sval);
yylval = new Integer (st.sval); end.set(reader.getPreviousPosition());
end.set (reader.getPreviousPosition ()); return NUM;
return NUM; case ' ': case '\t':
case ' ': case '\t': return yylex();
return yylex (); case '!':
case '!': return BANG;
return BANG; case '+':
case '+': return PLUS;
return PLUS; case '-':
case '-': return MINUS;
return MINUS; case '*':
case '*': return STAR;
return STAR; case '/':
case '/': return SLASH;
return SLASH; case '^':
case '^': return CARET;
return CARET; case '(':
case '(': return LPAREN;
return LPAREN; case ')':
case ')': return RPAREN;
return RPAREN; case '=':
case '=': return EQUAL;
return EQUAL; default:
default: throw new AssertionError("invalid character: " + ttype);
throw new AssertionError ("invalid character: " + ttype); }
}
} }
} }
@@ -196,67 +190,59 @@ class Position {
public int line = 1; public int line = 1;
public int column = 1; public int column = 1;
public Position () public Position() {
{
line = 1; line = 1;
column = 1; column = 1;
} }
public Position (int l, int t) public Position(int l, int t) {
{
line = l; line = l;
column = t; column = t;
} }
public Position (Position p) public Position(Position p) {
{
line = p.line; line = p.line;
column = p.column; column = p.column;
} }
public void set (Position p) public void set(Position p) {
{
line = p.line; line = p.line;
column = p.column; column = p.column;
} }
public boolean equals (Position l) public boolean equals(Position l) {
{
return l.line == line && l.column == column; return l.line == line && l.column == column;
} }
public String toString () public String toString() {
{ return Integer.toString(line) + "." + Integer.toString(column);
return Integer.toString (line) + "." + Integer.toString (column);
} }
public int line () public int line() {
{
return line; return line;
} }
public int column () public int column() {
{
return column; return column;
} }
} }
class PositionReader extends BufferedReader { class PositionReader extends BufferedReader {
private Position position = new Position (); private Position position = new Position();
// Position before the latest call to "read", i.e. position // Position before the latest call to "read", i.e. position
// of the last character of the current token. // of the last character of the current token.
private Position previousPosition = new Position (); private Position previousPosition = new Position();
public PositionReader (Reader reader) { public PositionReader(Reader reader) {
super (reader); super(reader);
} }
public int read () throws IOException { public int read() throws IOException {
previousPosition.set (position); previousPosition.set(position);
int res = super.read (); int res = super.read();
if (res > -1) { if (res > -1) {
char c = (char)res; char c = (char) res;
if (c == '\r' || c == '\n') { if (c == '\r' || c == '\n') {
position.line += 1; position.line += 1;
position.column = 1; position.column = 1;
@@ -267,11 +253,11 @@ class PositionReader extends BufferedReader {
return res; return res;
} }
public Position getPosition () { public Position getPosition() {
return position; return position;
} }
public Position getPreviousPosition () { public Position getPreviousPosition() {
return previousPosition; return previousPosition;
} }
} }

View File

@@ -14,12 +14,11 @@
} }
%code { %code {
public static void main (String[] args) throws IOException public static void main(String[] args) throws IOException {
{ CalcLexer l = new CalcLexer(System.in);
CalcLexer l = new CalcLexer (System.in); Calc p = new Calc(l);
Calc p = new Calc (l); if (!p.parse())
if (!p.parse ()) System.exit(1);
System.exit (1);
} }
} }
@@ -42,7 +41,7 @@ input:
line: line:
'\n' '\n'
| exp '\n' { System.out.println ($exp); } | exp '\n' { System.out.println($exp); }
| error '\n' | error '\n'
; ;
@@ -50,15 +49,15 @@ exp:
NUM { $$ = $1; } NUM { $$ = $1; }
| exp '=' exp | exp '=' exp
{ {
if ($1.intValue () != $3.intValue ()) if ($1.intValue() != $3.intValue())
yyerror ("calc: error: " + $1 + " != " + $3); yyerror("calc: error: " + $1 + " != " + $3);
} }
| exp '+' exp { $$ = $1 + $3; } | exp '+' exp { $$ = $1 + $3; }
| exp '-' exp { $$ = $1 - $3; } | exp '-' exp { $$ = $1 - $3; }
| exp '*' exp { $$ = $1 * $3; } | exp '*' exp { $$ = $1 * $3; }
| exp '/' exp { $$ = $1 / $3; } | exp '/' exp { $$ = $1 / $3; }
| '-' exp %prec NEG { $$ = -$2; } | '-' exp %prec NEG { $$ = -$2; }
| exp '^' exp { $$ = (int) Math.pow ($1, $3); } | exp '^' exp { $$ = (int) Math.pow($1, $3); }
| '(' exp ')' { $$ = $2; } | '(' exp ')' { $$ = $2; }
| '(' error ')' { $$ = 1111; } | '(' error ')' { $$ = 1111; }
| '!' { $$ = 0; return YYERROR; } | '!' { $$ = 0; return YYERROR; }
@@ -71,40 +70,37 @@ class CalcLexer implements Calc.Lexer {
StreamTokenizer st; StreamTokenizer st;
public CalcLexer (InputStream is) public CalcLexer(InputStream is) {
{ st = new StreamTokenizer(new InputStreamReader(is));
st = new StreamTokenizer (new InputStreamReader (is)); st.resetSyntax();
st.resetSyntax (); st.eolIsSignificant(true);
st.eolIsSignificant (true); st.whitespaceChars('\t', '\t');
st.whitespaceChars ('\t', '\t'); st.whitespaceChars(' ', ' ');
st.whitespaceChars (' ', ' '); st.wordChars('0', '9');
st.wordChars ('0', '9');
} }
public void yyerror (String s) public void yyerror(String s) {
{ System.err.println(s);
System.err.println (s);
} }
Integer yylval; Integer yylval;
public Object getLVal () { public Object getLVal() {
return yylval; return yylval;
} }
public int yylex () throws IOException { public int yylex() throws IOException {
int ttype = st.nextToken (); int ttype = st.nextToken();
switch (ttype) switch (ttype) {
{ case StreamTokenizer.TT_EOF:
case StreamTokenizer.TT_EOF: return EOF;
return EOF; case StreamTokenizer.TT_EOL:
case StreamTokenizer.TT_EOL: return (int) '\n';
return (int) '\n'; case StreamTokenizer.TT_WORD:
case StreamTokenizer.TT_WORD: yylval = new Integer(st.sval);
yylval = new Integer (st.sval); return NUM;
return NUM; default:
default: return ttype;
return ttype; }
}
} }
} }