View difference between Paste ID: bk0ystef and CpZp1Wst
SHOW: | | - or go back to the newest paste.
1
PARSER_BEGIN(Karloff)
2
3
import java.io.*;
4
5
public class Karloff {
6
7
    public static void main(String args[]) throws ParseException, IOException {
8
        // javacc -NOSTATIC Karloff.jj
9
        // pasta dos trabalhos: https://drive.google.com/drive/folders/1WRvFKckGv7ciZ9fAlITJIOxZzMp0Jcln?usp=sharing
10
        Karloff parser = new Karloff(new FileReader(args[0]));
11
        parser.KarloffLexicon();
12
        parser = new Karloff(new FileReader(args[0]));
13
        parser.Karloff();
14
    }
15
16
}
17
18
PARSER_END(Karloff)
19
20
SKIP:{
21
  " "
22
| "\t"
23
| "\n"
24
| "\r"}
25
26
TOKEN:{
27
  <MAIN:"main">
28
| <ACHAVES:"{">
29
| <FCHAVES:"}">
30
| <APAREN:"(">
31
| <FPAREN:")">
32
| <SEMIC:";">
33
| <COMMA:",">
34
| <FUNC:"func">
35
| <TVOID:"void">
36
| <NEWVAR:"newVar">
37
| <TINT:"int">
38
| <TBOOL:"bool">
39
| <IF:"if">
40
| <THEN:"then">
41
| <WHILE:"while">
42
| <REPEAT:"repeat">
43
| <UNTIL:"until">
44
| <RETURN:"return">
45
| <TRUE:"true">
46
| <FALSE:"false">
47
| <OUTPUT:"System.output">
48
| <INPUT:"System.input">
49
| <PLUS:"+">
50
| <MINUS:"-">
51
| <ASTERISK:"*">
52
| <SLASH:"/">
53
| <AMP:"&">
54
| <VERBAR:"|">
55
| <LESS:"<">
56
| <GREATER:">">
57
| <ASSIGN:"=">
58
| <EQUAL:"==">
59
60
}
61
62
TOKEN:{
63
  <NUM: (["0"-"9"] | ["1"-"9"] (["0"-"9"])*) ("." (["0"-"9"])* ["1"-"9"])? ("E" (["+","-"])? ["1"-"9"] (["0"-"9"])* )?>
64
| <ID: ["a"-"z","A"-"Z"] (("_")?["a"-"z","A"-"Z","0"-"9"])* >
65
66
}
67
68
void Karloff () :
69
{Token t;}
70-
    Main() ( Func() )? <EOF> {System.out.println("Succesful!");}
70+
71
    Main() Func() <EOF> {System.out.println("Succesful!");}
72
}
73
74
void Main () :
75
{}
76
{
77
    <TVOID> <MAIN> <ACHAVES> Vardecl() Seqcomandos() <FCHAVES>
78
}
79
80
void Vardecl () :
81
{}
82
{
83-
    // ( <NEWVAR> Tipo() <ID> <SEMIC> Vardecl() )?
83+
84
}
85
86-
void Vardecl1 () :
86+
87
{}
88
{
89-
    ( <NEWVAR> Tipo() <ID> <SEMIC> Vardecl1() )?
89+
90
}
91
92
void Seqcomandos () :
93
{}
94
{
95
    (Comando() <SEMIC>)*
96
}
97
98
void Comando () : 
99
{}
100
{
101-
    (Comando() <SEMIC>)+
101+
102-
    // ( Comando() <SEMIC> Seqcomandos() )?
102+
103
| <WHILE> <APAREN> Exp() <FPAREN> <ACHAVES> Seqcomandos() <FCHAVES>
104
| <REPEAT> <ACHAVES> Seqcomandos() <FCHAVES> <UNTIL> <APAREN> Exp() <FPAREN>
105-
void Seqcomandos1 () :
105+
106
| <OUTPUT> <APAREN> Exp() <FPAREN>
107
| <INPUT> <APAREN> Exp() <FPAREN>
108-
    ( Comando() <SEMIC> Seqcomandos1() )?
108+
109
110
void Exp () :
111
{}
112
{
113
    <APAREN> Exp() Op() Exp() <FPAREN>
114
|   Fator()
115
}
116
117
void Fator () :
118
{}
119
{
120
    <ID> ( <APAREN> ( Listaexp() )? <FPAREN> )?
121
|   <NUM>
122
|   <TRUE>
123
|   <FALSE>
124
}
125
126
void Op () :
127
{}
128
{
129
    <PLUS> | <MINUS> | <ASTERISK> | <SLASH>  | <AMP>
130
| <VERBAR> | <LESS>  | <GREATER>  | <ASSIGN> | <EQUAL>
131
}
132
133
void Listaexp () :
134
{}
135
{
136
    Exp() ( <COMMA> Exp() )*
137
}
138
139
void Func () :
140
{}
141
{
142-
    <PLUS> | <MINUS> | <ASTERISK> | <SLASH> | <AMP>
142+
    ( <FUNC> Tipo() <ID> <APAREN> (Listaarg())? <FPAREN> <ACHAVES> Vardecl() Seqcomandos() <FCHAVES> )*
143-
| <VERBAR> | <LESS> | <GREATER> | <ASSIGN>| <EQUAL>
143+
144
145
void Listaarg () :
146
{}
147
{
148
    Tipo() <ID> ( <COMMA> Tipo() <ID> )*
149-
    Exp() Listaexp1()
149+
150
151
void KarloffLexicon () :
152-
void Listaexp1 () :
152+
153
{
154
 
155-
    ( <COMMA> Exp() Listaexp1() )?
155+
156
  <MAIN> { System.out.println("Palavra reservada: main");}
157
| <ACHAVES> { System.out.println("Abre chaves: {");}
158
| <FCHAVES> { System.out.println("Fecha chaves: }");}
159
| <APAREN> { System.out.println("Abre parenteses: (");}
160
| <FPAREN> { System.out.println("Fecha parenteses: )");}
161-
    <FUNC> Tipo() <ID> <APAREN> ( Listaarg() )? <FPAREN> <ACHAVES> Vardecl() Seqcomandos() <FCHAVES> Func1()
161+
162
| <COMMA> { System.out.println("Virgula: ,");}
163
| <FUNC> { System.out.println("Palavra reservada: func");}
164-
void Func1 () :
164+
165
| <NEWVAR> { System.out.println("Palavra reservada: newVar");}
166
| <TINT> { System.out.println("Palavra reservada: int");}
167-
    ( <FUNC> Tipo() <ID> <APAREN> ( Listaarg() )? <FPAREN> <ACHAVES> Vardecl() Seqcomandos() <FCHAVES> Func1() )?
167+
168
| <THEN> { System.out.println("Palavra reservada: then");}
169
| <WHILE> { System.out.println("Palavra reservada: while");}
170
| <REPEAT> { System.out.println("Palavra reservada: repeat");}
171
| <UNTIL> { System.out.println("Palavra reservada: until");}
172
| <RETURN> { System.out.println("Palavra reservada: return");}
173-
    Tipo() <ID> Listaarg1()
173+
174
| <FALSE> { System.out.println("Palavra reservada: false");}
175
| <OUTPUT> { System.out.println("Palavra reservada: System.output");}
176-
void Listaarg1 () :
176+
177
| <PLUS> { System.out.println("Operador 'mais': +");}
178
| <MINUS> { System.out.println("Operador 'menos': -");}
179-
   ( <COMMA> Tipo() <ID> Listaarg1() )?
179+
180
| <SLASH> { System.out.println("Operador 'barra': /");}
181
| <AMP> { System.out.println("Operador 'e comercial': &");}
182
| <VERBAR> { System.out.println("Operador 'pipe': |");}
183
| <LESS> { System.out.println("Operador 'menor': <");}
184
| <GREATER> { System.out.println("Operador 'maior': >");}
185
| <ASSIGN> { System.out.println("Operador 'atribuicao': =");}
186
| <EQUAL> { System.out.println("Operador 'igualdade': ==");}
187
| t=<NUM> { System.out.println("Número: "+ t.image);}
188
| t=<ID> { System.out.println("Identificador: "+ t.image);}
189
)*
190
<EOF>
191
 
192
}