JavaCC to create my only syntax

wangpeng

Neues Mitglied
Hello everyone,

I am a new with JavaCC. I have got a jj file. It works. But i don't unterstand 100%.

The jj file is :

options {
STATIC = false ;
FORCE_LA_CHECK = true;
IGNORE_CASE = true;
}

PARSER_BEGIN(ClassSYSCamosConverter)
package com.schaeffler.classification;

import java.io.StringReader;
import java.util.Set;
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;


public class ClassSYSCamosConverter extends SapDependencyCamosBase {

}
PARSER_END(ClassSYSCamosConverter)

SKIP : /* WHITE SPACE */
{
" "
| "\t"
| "\n"
| "\r"
| "\f"
}

TOKEN : { < IN : "in" | "IN" > }
TOKEN : { < AND : "and" | "AND" > }
TOKEN : { < OR : "or" | "OR" > }
TOKEN : { < NOT : "not" | "NOT" > }
TOKEN : { < LE : "<=" | "=<" > }
TOKEN : { < GE : ">=" | "=>" > }
TOKEN : { < NE : "<>" | "><" > }
TOKEN : { < LT : "<" > }
TOKEN : { < EQ : "==" > }
TOKEN : { < GT : ">" > }
TOKEN : { < TABLE : "table" > }
TOKEN : { < IF : "IF" | "if" > }

TOKEN : {
<IDENTIFIER: <LETTER> (<LETTER> | <DIGIT>)*>
| <#LETTER: ["$","A"-"Z","_","a"-"z"]>
| <#DIGIT: ["0"-"9"]>
}

TOKEN : {
<INTEGER_LITERAL: (["1"-"9"] (["0"-"9"])*) | "0">
| <FLOATING_POINT_LITERAL: (["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)? (["f","F","d","D"])? | "." (["0"-"9"])+ (<EXPONENT>)? (["f","F","d","D"])? | (["0"-"9"])+ <EXPONENT> (["f","F","d","D"])? | (["0"-"9"])+ (<EXPONENT>)? ["f","F","d","D"]>
| <#EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+>
| <STRING_LITERAL: "'" (~["'"])* "'">
}



TOKEN : { < KLAMMERAUF : "(" | "[" > }
TOKEN : { < KLAMMERZU : ")" | "]" > }
TOKEN : { < MINUS : "-" > }
TOKEN : { < PLUS : "+" > }
TOKEN : { < DIVIDE : "/" > }
TOKEN : { < MULTIPLY : "*" > }
TOKEN : { < KOMMA : "," > }
TOKEN : { < SELF : "$SELF." > }

void evaluate() :
{
Token t;
}
{
[
Expression()
|
Procedure()
( <KOMMA> Procedure())*
]
<EOF>
}

void Procedure() :
{
Token t;
Procedure procedure = new Procedure();
}
{
<SELF>
Identifier()
<EQ>
Expression()
{
procedure.action = code.toString();
code.setLength(0);
}
{procedures.add(procedure);}
}

void Expression():
{}
{
Or()
}

void Or() :
{}
{
And()
(
{code.append(" or ");}
<OR>
And()
)*
}

void And() :
{}
{
Not()
(
{code.append(" and ");}
<AND>
Not()
)*
}

void Not() :
{}
{
[
{code.append("not ");}
<NOT>
]
EqualityExpression()
}

void EqualityExpression() :
{}
{
RelationalExpression()
[
{code.append(" = ");}
<EQ>
RelationalExpression()
|
{code.append(" <> ");}
<NE>
RelationalExpression()
]
}

void RelationalExpression() :
{}
{
AdditiveExpression()
[
{code.append(" <= ");}
<LE>
AdditiveExpression()
|
{code.append(" >= ");}
<GE>
AdditiveExpression()
|
{code.append(" < ");}
<LT>
AdditiveExpression()
|
{code.append(" > ");}
<GT>
AdditiveExpression()
]
}

void AdditiveExpression() :
{}
{
MultiplicativeExpression()
(
{code.append(" + ");}
<PLUS>
MultiplicativeExpression()
|
{code.append(" - ");}
<MINUS>
MultiplicativeExpression()
)*
}

void MultiplicativeExpression() :
{}
{
InExpression()
(
{code.append(" * ");}
<MULTIPLY>
InExpression()
|
{code.append(" / ");}
<DIVIDE>
InExpression()
)*
}

void InExpression() :
{}
{
PrimaryExpression()
[


[
{code.append(" not ");}
<NOT>
]


{code.append(" in ");}
<IN>
ArrayExpression()
]
}

void ArrayExpression() :
{}
{
{code.append("(");}
<KLAMMERAUF>
RangeExpression()
(
{code.append(", ");}
<KOMMA>
RangeExpression()
)*
{code.append(")");}
<KLAMMERZU>
}

void RangeExpression() :
{}
{
PrimaryExpression()
[
{code.append(" - ");}
<MINUS>
PrimaryExpression()
]
}


void PrimaryExpression() :
{}
{
(
Identifier()
|
<TABLE>
Identifier()
<KLAMMERAUF>
Identifier()
<EQ>
Identifier()
<KLAMMERZU>
|
Constant()
|
{code.append("(");}
<KLAMMERAUF> Expression() <KLAMMERZU>
{code.append(")");}
)
}

void Identifier() :
{
Token t;
}
{
(
t = <IDENTIFIER>
{code.append(t.image);}
{featureList.add(t.image);}
)
}

void Constant() :
{
Token t;
}
{
(
t = <INTEGER_LITERAL>
{code.append(t.image);}
|
t = <FLOATING_POINT_LITERAL>
{code.append(t.image);}
|
t = <STRING_LITERAL>
{code.append(t.image);}
)
}

To test:

my input String is :

MMTAA524 in ('N','W') and MMTAA540 == 'g4' and MMTAA540 == ANYVALUE and MMTAA540 == NOVALUE AND MMTQQ = S45 AND MMTQW = blabla and MMPAA145


Syntax check is correct.

But i expect some errors.

MMTAA540 == ANYVALUE and MMTAA540 == NOVALUE AND MMTQQ = S45 AND MMTQW = blabla and MMPAA145

should output some errors.

How can i get some errors?

MMTAA540 == ANYVALUE and MMTAA540 == NOVALUE should be correct.

MMTAA540 == 'asdfasdfsd' should be correct

MMTAA540 == asdfasdfsd should be incorrect (error)

MMPAA540 hat no operation should be incorrect (error).

Some tipps for me!

Thank you very much!
 

knilch

Bekanntes Mitglied
Hi there,
wow, that looks very strange. Please format your source between java-tags. (see the RED sentence on top of editor...)
so it's better visible what you mean.
You wrote, that your'e new in java. In a short overwiew this code doesn't look like a code for a beginner :noe:
 
Zuletzt bearbeitet:

wangpeng

Neues Mitglied
[WR]options {
STATIC = false ;
FORCE_LA_CHECK = true;
IGNORE_CASE = true;
}

PARSER_BEGIN(ClassSYSCamosConverter)
package com.schaeffler.classification;

import java.io.StringReader;
import java.util.Set;
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;


public class ClassSYSCamosConverter extends SapDependencyCamosBase {

}
PARSER_END(ClassSYSCamosConverter)

SKIP : /* WHITE SPACE */
{
" "
| "\t"
| "\n"
| "\r"
| "\f"
}

TOKEN : { < IN : "in" | "IN" > }
TOKEN : { < AND : "and" | "AND" > }
TOKEN : { < OR : "or" | "OR" > }
TOKEN : { < NOT : "not" | "NOT" > }
TOKEN : { < LE : "<=" | "=<" > }
TOKEN : { < GE : ">=" | "=>" > }
TOKEN : { < NE : "<>" | "><" > }
TOKEN : { < LT : "<" > }
TOKEN : { < EQ : "==" > }
TOKEN : { < GT : ">" > }
TOKEN : { < TABLE : "table" > }
TOKEN : { < IF : "IF" | "if" > }

TOKEN : {
<IDENTIFIER: <LETTER> (<LETTER> | <DIGIT>)*>
| <#LETTER: ["$","A"-"Z","_","a"-"z"]>
| <#DIGIT: ["0"-"9"]>
}

TOKEN : {
<INTEGER_LITERAL: (["1"-"9"] (["0"-"9"])*) | "0">
| <FLOATING_POINT_LITERAL: (["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)? (["f","F","d","D"])? | "." (["0"-"9"])+ (<EXPONENT>)? (["f","F","d","D"])? | (["0"-"9"])+ <EXPONENT> (["f","F","d","D"])? | (["0"-"9"])+ (<EXPONENT>)? ["f","F","d","D"]>
| <#EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+>
| <STRING_LITERAL: "'" (~["'"])* "'">
}



TOKEN : { < KLAMMERAUF : "(" | "[" > }
TOKEN : { < KLAMMERZU : ")" | "]" > }
TOKEN : { < MINUS : "-" > }
TOKEN : { < PLUS : "+" > }
TOKEN : { < DIVIDE : "/" > }
TOKEN : { < MULTIPLY : "*" > }
TOKEN : { < KOMMA : "," > }
TOKEN : { < SELF : "$SELF." > }

void evaluate() :
{
Token t;
}
{
[
Expression()
|
Procedure()
( <KOMMA> Procedure())*
]
<EOF>
}

void Procedure() :
{
Token t;
Procedure procedure = new Procedure();
}
{
<SELF>
Identifier()
<EQ>
Expression()
{
procedure.action = code.toString();
code.setLength(0);
}
{procedures.add(procedure);}
}

void Expression():
{}
{
Or()
}

void Or() :
{}
{
And()
(
{code.append(" or ");}
<OR>
And()
)*
}

void And() :
{}
{
Not()
(
{code.append(" and ");}
<AND>
Not()
)*
}

void Not() :
{}
{
[
{code.append("not ");}
<NOT>
]
EqualityExpression()
}

void EqualityExpression() :
{}
{
RelationalExpression()
[
{code.append(" = ");}
<EQ>
RelationalExpression()
|
{code.append(" <> ");}
<NE>
RelationalExpression()
]
}

void RelationalExpression() :
{}
{
AdditiveExpression()
[
{code.append(" <= ");}
<LE>
AdditiveExpression()
|
{code.append(" >= ");}
<GE>
AdditiveExpression()
|
{code.append(" < ");}
<LT>
AdditiveExpression()
|
{code.append(" > ");}
<GT>
AdditiveExpression()
]
}

void AdditiveExpression() :
{}
{
MultiplicativeExpression()
(
{code.append(" + ");}
<PLUS>
MultiplicativeExpression()
|
{code.append(" - ");}
<MINUS>
MultiplicativeExpression()
)*
}

void MultiplicativeExpression() :
{}
{
InExpression()
(
{code.append(" * ");}
<MULTIPLY>
InExpression()
|
{code.append(" / ");}
<DIVIDE>
InExpression()
)*
}

void InExpression() :
{}
{
PrimaryExpression()
[


[
{code.append(" not ");}
<NOT>
]


{code.append(" in ");}
<IN>
ArrayExpression()
]
}

void ArrayExpression() :
{}
{
{code.append("(");}
<KLAMMERAUF>
RangeExpression()
(
{code.append(", ");}
<KOMMA>
RangeExpression()
)*
{code.append(")");}
<KLAMMERZU>
}

void RangeExpression() :
{}
{
PrimaryExpression()
[
{code.append(" - ");}
<MINUS>
PrimaryExpression()
]
}


void PrimaryExpression() :
{}
{
(
Identifier()
|
<TABLE>
Identifier()
<KLAMMERAUF>
Identifier()
<EQ>
Identifier()
<KLAMMERZU>
|
Constant()
|
{code.append("(");}
<KLAMMERAUF> Expression() <KLAMMERZU>
{code.append(")");}
)
}

void Identifier() :
{
Token t;
}
{
(
t = <IDENTIFIER>
{code.append(t.image);}
{featureList.add(t.image);}
)
}

void Constant() :
{
Token t;
}
{
(
t = <INTEGER_LITERAL>
{code.append(t.image);}
|
t = <FLOATING_POINT_LITERAL>
{code.append(t.image);}
|
t = <STRING_LITERAL>
{code.append(t.image);}
)
}

[/WR]


To test:

my input String is :

MMTAA524 in ('N','W') and MMTAA540 == 'g4' and MMTAA540 == ANYVALUE and MMTAA540 == NOVALUE AND MMTQQ = S45 AND MMTQW = blabla and MMPAA145


Syntax check is correct.

But i expect some errors.

MMTAA540 == ANYVALUE and MMTAA540 == NOVALUE AND MMTQQ = S45 AND MMTQW = blabla and MMPAA145

should output some errors.

How can i get some errors?

MMTAA540 == ANYVALUE and MMTAA540 == NOVALUE should be correct.

MMTAA540 == 'asdfasdfsd' should be correct

MMTAA540 == asdfasdfsd should be incorrect (error)

MMPAA540 hat no operation should be incorrect (error).

Now i input the java code with the correct format. @Knilch: some tipps for me! thank you very much.
 

Joose

Top Contributor
Das sind keine Java-Tags und somit ist das Ganze immer noch unlesbar.
Thats not Java-Tag. But your Problem is, that you don't difference between Uppercase and Lowercase Letters. Lowercase must be between ' , Uppercase not
 

lawila

Gesperrter Benutzer
warum wird mich der gedanke nicht los das TO deutsch ist und der post einfach copy'n'paste aus z.b. java-ranch ist ?
 

Neaera

Mitglied
[OT]@lawila: Vielleicht deswegen, weil (mal abgesehen vom Titel) der einzige Satz den der TO geschrieben hat grammatikalisch ehere Denglisch als Englisch ist? [/OT]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H javacc Stringzerlegung Allgemeine Java-Themen 4
S Suche Tipps für Einstieg in JavaCC Allgemeine Java-Themen 2
K JavaCC Tokens Allgemeine Java-Themen 4
S JavaCC : SKIP Token nur für bestimmten Bereich ?? Allgemeine Java-Themen 2
B Recordbasiertes File mit javacc einlesen Allgemeine Java-Themen 2
A JavaCC: Variablen zaehlen Allgemeine Java-Themen 12
P triviale JavaCC Grammatik inkorrekt Allgemeine Java-Themen 6
P JavaCC 4.0 unter Eclipse 3.2.2 instalieren, wie ? Allgemeine Java-Themen 2
berserkerdq2 How can I use a 4 bit adder and 4 bit identity to create a 4 bit multiplier that multiplies two 4 bit numbers? Allgemeine Java-Themen 45
V Scheinbar zufällig hin und wieder: Can't create an ImageOutputStream! Allgemeine Java-Themen 8
F Create Befehl mit variierender Spaltenanzahl/Spaltenname Allgemeine Java-Themen 5
M Cannot create a generic array of T Allgemeine Java-Themen 5
J Post: #1could not create the java virtual machine etc Allgemeine Java-Themen 6
S could not create the java virtual machine Allgemeine Java-Themen 3
F ImageIO cant create InputStream Allgemeine Java-Themen 9
K Could not create the Java Virtual Machine Allgemeine Java-Themen 1
T Wie lookup-and-create-on-demand umsetzen? Allgemeine Java-Themen 6
M unable to create new native thread Allgemeine Java-Themen 6
D unable to create new native thread Allgemeine Java-Themen 1
Tommy135 Syntax Highlighting Allgemeine Java-Themen 3
Elyt Compiler-Fehler Datei kann nicht erstellt werden. Die Syntax für den Dateinamen etc. ist falsch. Allgemeine Java-Themen 2
B Syntax-Erkennungs Problem Allgemeine Java-Themen 2
H Syntax ProcessBuilder Allgemeine Java-Themen 7
B Syntax-Highlighting abspeichern Allgemeine Java-Themen 7
T Parseerror bei richtiger Syntax Allgemeine Java-Themen 5
M Syntax Highlighter für MS Word? Allgemeine Java-Themen 2
H Pattern.compile Syntax Allgemeine Java-Themen 15
S Mail Adressen Syntax prüfen Allgemeine Java-Themen 22
C Syntax printf Allgemeine Java-Themen 5
S Eine Collection von Objekten mit LDAP Syntax filtern Allgemeine Java-Themen 5
P JTextPane mit Java (eclipse) Syntax Highlighting Allgemeine Java-Themen 4
D Kompakte Syntax für Funktionen Allgemeine Java-Themen 7
G Syntax für den Dateinamen Allgemeine Java-Themen 1
R Syntax Error, der keiner sein sollte Allgemeine Java-Themen 12
G Java Syntax Allgemeine Java-Themen 7
T Syntax Error Allgemeine Java-Themen 9
F Plugin damit M$ Word Java syntax versteht? Allgemeine Java-Themen 12
D Die <> Syntax Allgemeine Java-Themen 8
W Syntax - Frage Allgemeine Java-Themen 6
padde479 jEdit Syntax Highlighting Allgemeine Java-Themen 3
G Syntax-Fehler beim aufrufen von generischen Klassenmethoden Allgemeine Java-Themen 4
V syntax problem Allgemeine Java-Themen 6
S Syntax Error, insert "AssignmentOperator Expression&amp Allgemeine Java-Themen 3
F log4j XML-Syntax Allgemeine Java-Themen 4
B Syntax error on token ,VariableDeclaratorId expected after. Allgemeine Java-Themen 3
G Syntax Übersicht Suche Allgemeine Java-Themen 7
A gültige syntax einer ip-adresse? Allgemeine Java-Themen 2
S java syntax zusammenfassung Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben