Skip to content

Commit 957458d

Browse files
committed
ss
0 parents  commit 957458d

File tree

123 files changed

+19810
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

123 files changed

+19810
-0
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/*/target/
2+
/*/*.iml
3+
/*.iml
4+
/.idea/

bcomp-assembler/pom.xml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?xml version="1.0"?>
2+
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<groupId>ru.ifmo.cs</groupId>
7+
<artifactId>BasicComputer</artifactId>
8+
<version>2</version>
9+
</parent>
10+
<groupId>ru.ifmo.cs</groupId>
11+
<artifactId>bcomp-assembler</artifactId>
12+
<version>1</version>
13+
<name>bcomp-assembler</name>
14+
<url>http://maven.apache.org</url>
15+
<properties>
16+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
17+
<antlr4.visitor>true</antlr4.visitor>
18+
<antlr4.listener>true</antlr4.listener>
19+
</properties>
20+
<dependencies>
21+
<dependency>
22+
<groupId>junit</groupId>
23+
<artifactId>junit</artifactId>
24+
<version>4.10</version>
25+
<scope>test</scope>
26+
</dependency>
27+
<dependency>
28+
<groupId>org.antlr</groupId>
29+
<artifactId>antlr4-runtime</artifactId>
30+
<version>4.7.2</version>
31+
</dependency>
32+
</dependencies>
33+
<build>
34+
<plugins>
35+
<plugin>
36+
<groupId>org.antlr</groupId>
37+
<artifactId>antlr4-maven-plugin</artifactId>
38+
<version>4.7.2</version>
39+
<configuration>
40+
<source>1.6</source>
41+
<target>1.6</target>
42+
</configuration>
43+
<executions>
44+
<execution>
45+
<id>antlr</id>
46+
<goals>
47+
<goal>antlr4</goal>
48+
</goals>
49+
</execution>
50+
</executions>
51+
</plugin>
52+
</plugins>
53+
</build>
54+
</project>
Lines changed: 295 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,295 @@
1+
grammar BCompNG;
2+
3+
prog
4+
: (line? EOL)*
5+
;
6+
7+
line
8+
: comment
9+
| instructionLine
10+
| directive
11+
| lbl
12+
;
13+
14+
instructionLine
15+
: lbl? instruction comment?
16+
;
17+
18+
instruction
19+
: addr operand
20+
| nonaddr
21+
| branch label
22+
| io dev
23+
;
24+
25+
directive
26+
: org orgAddress comment?
27+
| wordDirective
28+
| end comment?
29+
;
30+
31+
orgAddress
32+
: address
33+
;
34+
35+
wordDirective
36+
: lbl? word wordArguments comment?
37+
;
38+
39+
wordArguments
40+
: wordArgument ( ',' wordArgument )*
41+
;
42+
43+
wordArgument
44+
: number
45+
| '$' label
46+
;
47+
48+
lbl
49+
: label ':'
50+
;
51+
52+
label
53+
: name
54+
;
55+
56+
dev
57+
: number
58+
;
59+
60+
operand
61+
: directAbsolute
62+
| indirect
63+
| postIncrement
64+
| preDecrement
65+
| displacementSP
66+
| directRelative
67+
| directLoad
68+
;
69+
70+
directAbsolute
71+
: address
72+
| '$' label
73+
;
74+
75+
indirect
76+
: '(' label ')'
77+
;
78+
79+
postIncrement
80+
: '(' label ')' '+'
81+
;
82+
83+
preDecrement
84+
: '-' '(' label ')'
85+
;
86+
87+
displacementSP
88+
: '&' number
89+
| '(' sp '+' number ')'
90+
;
91+
92+
directRelative
93+
: label
94+
;
95+
96+
directLoad
97+
: '#' number
98+
;
99+
100+
address
101+
: number
102+
;
103+
104+
string
105+
: STRING
106+
;
107+
108+
name
109+
: NAME
110+
;
111+
112+
number
113+
: DECIMAL
114+
| HEX
115+
;
116+
117+
comment
118+
: COMMENT
119+
;
120+
121+
addr: AND | OR | ADD | ADC | SUB | CMP | LOOP | LD | SWAM | JUMP | CALL | ST;
122+
nonaddr: NOP | HLT | CLA | NOT | CLC | CMC | ROL | ROR | ASL | ASR | SXTB | SWAB |
123+
INC | DEC | NEG | POP | POPF | RET | IRET | PUSH | PUSHF | SWAP;
124+
branch: BEQ | BNE | BMI | BPL | BCS | BCC | BVS | BVC | BLT | BGE | BR;
125+
io: CLF | TSF | IN | OUT;
126+
127+
sp: SP;
128+
ip: IP;
129+
130+
org: ORG;
131+
word: WORD;
132+
end: END;
133+
134+
fragment A : ('a' | 'A');
135+
fragment B : ('b' | 'B');
136+
fragment C : ('c' | 'C');
137+
fragment D : ('d' | 'D');
138+
fragment E : ('e' | 'E');
139+
fragment F : ('f' | 'F');
140+
fragment G : ('g' | 'G');
141+
fragment H : ('h' | 'H');
142+
fragment I : ('i' | 'I');
143+
fragment J : ('j' | 'J');
144+
fragment K : ('k' | 'K');
145+
fragment L : ('l' | 'L');
146+
fragment M : ('m' | 'M');
147+
fragment N : ('n' | 'N');
148+
fragment O : ('o' | 'O');
149+
fragment P : ('p' | 'P');
150+
fragment Q : ('q' | 'Q');
151+
fragment R : ('r' | 'R');
152+
fragment S : ('s' | 'S');
153+
fragment T : ('t' | 'T');
154+
fragment U : ('u' | 'U');
155+
fragment V : ('v' | 'V');
156+
fragment W : ('w' | 'W');
157+
fragment X : ('x' | 'X');
158+
fragment Y : ('y' | 'Y');
159+
fragment Z : ('z' | 'Z');
160+
161+
fragment RA : ('а' | 'А');
162+
fragment RB : ('б' | 'Б');
163+
fragment RV : ('в' | 'В');
164+
fragment RG : ('г' | 'Г');
165+
fragment RD : ('д' | 'Д');
166+
fragment RE : ('е' | 'Е');
167+
fragment RYO : ('ё' | 'Ё');
168+
fragment RZH : ('ж' | 'Ж');
169+
fragment RZ : ('з' | 'З');
170+
fragment RI : ('и' | 'И');
171+
fragment RK : ('к' | 'К');
172+
fragment RL : ('л' | 'Л');
173+
fragment RM : ('м' | 'М');
174+
fragment RN : ('н' | 'Н');
175+
fragment RO : ('о' | 'О');
176+
fragment RP : ('п' | 'П');
177+
fragment RR : ('р' | 'Р');
178+
fragment RS : ('с' | 'С');
179+
fragment RT : ('т' | 'Т');
180+
fragment RU : ('у' | 'У');
181+
fragment RF : ('ф' | 'Ф');
182+
fragment RKH : ('х' | 'Х');
183+
fragment RTSC : ('ц' | 'Ц');
184+
fragment RCH : ('ч' | 'Ч');
185+
fragment RSH : ('ш' | 'Ш');
186+
fragment RHSIGN : ('ъ' | 'Ъ');
187+
fragment RII : ('ы' | 'Ы');
188+
fragment RSSIGN : ('ь' | 'Ь');
189+
fragment RYE : ('э' | 'Э');
190+
fragment RYU : ('ю' | 'Ю');
191+
fragment RYA : ('я' | 'Я');
192+
193+
fragment HEXDIGIT : [0-9a-fA-F] ;
194+
fragment DECDIGIT : [0-9] ;
195+
fragment P0X : '0' X ;
196+
fragment P0D : '0' D ;
197+
198+
/*
199+
* Assembler Instruction
200+
*/
201+
ORG: O R G;
202+
WORD: W O R D;
203+
END: E N D;
204+
205+
/*
206+
* opcodes
207+
*/
208+
209+
AND: ( A N D ) | ( RI );
210+
OR: ( O R ) | ( RI RL RI );
211+
ADD: ( A D D ) | ( RP RL RYU RS );
212+
ADC: ( A D C ) | ( RP RL RYU RS RS );
213+
SUB: ( S U B ) | ( RM RI RN RU RS );
214+
CMP: ( C M P ) | ( RS RR RA RV );
215+
LOOP: ( L O O P ) | ( RK RR RU RG );
216+
LD: ( L D ) | ( RN RYA RM );
217+
SWAM: ( S W A M );
218+
JUMP: ( J U M P ) | ( RP RR RII RG );
219+
CALL: ( C A L L ) | ( RV RZH RU RKH );
220+
ST: ( S T ) | ( RT RSSIGN RF RU );
221+
222+
NOP: ( N O P );
223+
HLT: ( H L T );
224+
CLA: ( C L A );
225+
NOT: ( N O T ) | ( C M A ) | ( C O M ) | ( RN RE ) | ( RS RB RA );
226+
CLC: ( C L C ) ;
227+
CMC: ( C M C ) ;
228+
ROL: ( R O L ) ;
229+
ROR: ( R O R ) ;
230+
ASL: ( A S L ) ;
231+
ASR: ( A S R ) ;
232+
SXTB: ( S X T B ) ;
233+
SWAB: ( S W A B ) ;
234+
INC: ( I N C ) ;
235+
DEC: ( D E C ) ;
236+
NEG: ( N E G ) ;
237+
POP: ( P O P ) ;
238+
POPF: ( P O P F ) ;
239+
RET: ( R E T ) ;
240+
IRET: ( I R E T ) ;
241+
PUSH: ( P U S H ) ;
242+
PUSHF: ( P U S H F );
243+
SWAP: ( S W A P ) ;
244+
245+
BEQ: ( B E Q ) | ( B Z S );
246+
BNE: ( B N E ) | ( B Z C );
247+
BMI: ( B M I ) | ( B N S );
248+
BPL: ( B P L ) | ( B N C );
249+
BCS: ( B C S ) | ( B L O );
250+
BCC: ( B C C ) | ( B H I S );
251+
BVS: ( B V C ) ;
252+
BVC: ( B V C ) ;
253+
BLT: ( B L T ) ;
254+
BGE: ( B G E ) ;
255+
BR: ( B R ) ; //syntetic insturction, jump with direct relative addressing mode
256+
257+
258+
CLF: ( C L F ) ;
259+
TSF: ( T S F ) ;
260+
IN: ( I N ) ;
261+
OUT: ( O U T ) ;
262+
263+
SP: ( S P ) ;
264+
IP: ( I P ) ;
265+
266+
NAME
267+
: [a-zA-Zа-яА-Я] [a-zA-Zа-яА-Я0-9."]*
268+
;
269+
270+
DECIMAL
271+
: P0D? DECDIGIT+
272+
;
273+
274+
HEX
275+
: HEXDIGIT+ | (P0X HEXDIGIT+ ) | ( HEXDIGIT+ H )
276+
;
277+
278+
COMMENT
279+
: ';' ~ [\r\n]* -> skip
280+
;
281+
282+
283+
STRING
284+
: '"' ~ ["]* '"'
285+
;
286+
287+
288+
EOL
289+
: [\r\n] +
290+
;
291+
292+
293+
WS
294+
: [ \t] -> skip
295+
;

0 commit comments

Comments
 (0)