MODULE nanoPascal2C
nanoPascal2C= program -> program_.
program = block '.' -> '#include <stdio.h>\n' block_ .
block = ['VAR' ident {',' ident[i]} ';']
'BEGIN' statement {/..c/';' statement[i] } 'END'
-> ['int ' ident_ {',' ident_[i]} ';\n']
'main() \n{\n'
statement_ {/..c/ '\n' statement_[i] }
'}\n'.
statement = 'WRITE' expression |
'READ' ident|
'BEGIN' statement[1] {';' statement[i+1] } 'END' |
'IF' expression 'THEN' st:statement ['ELSE' ste:statement] |
'WHILE' expression 'DO' st:statement |
ident ':=' expression |
-> 'printf("%d",' expression_ ');' |
'scanf("%d", &' ident_ ');' |
'{' {/..N+1/ statement_[i] '\n' } '}' |
'if (' expression_ ') ' st_ ['else ' ste_ ]|
'while (' expression_ ') ' st_ |
ident_ '=' expression_ ';'| .
expression = simpleExpr
[('='|'<='|'>='|'<>'|'<'|'>') sE: simpleExpr ]
-> simpleExpr_
[('=='|'<='|'>='|'!='|'<'|'>') sE_ ].
simpleExpr =
VAR op: FLEX OF INT;
['+'|'-'] term
{(/op[i]/'+'|'-'|'OR') term[i] }
-> ['+'|'-'] term_
{(/op[i]/'+'|'-'|'||') term_[i] }.
term =
VAR op: FLEX OF INT;
factor {(/op[i]/'*'|'DIV'|'AND') f2:factor[i]}
-> factor_ {(/op[i]/ '*'|'/'|'&&') f2_[i]}.
factor = num | '(' expression ')'| 'NOT' factor | ident
-> num_ |'(' expression_ ')'|'!' factor_ | ident_ .
END nanoPascal2C.
There is no configuration file: Depot4.cfg
Depot4: Ml4/Java - Translator 1.9.2 / (c) jl 27.02.2003
Module nanoPascal2C
translating nanoPascal2C
translating program
translating block
translating statement
translating expression
translating simpleExpr
translating term
translating factor
javac -d . -classpath .;C:\j2sdk1.4.1_01\jre\lib\...\j2sdk1.4.1_01\lib\tools.jar;C:\work tmp\src\nanoPascal2C.java
done
2.422 sec.
Remark: To simplify it, all rules have been packed into one module. In a next step, one can build the translator rule by rule. For this just copy only a single rule into the Translate text area or mark it there selected and then excute the Selected action from the Translate menu.
nanoPascal2C into the root labelled textbox.
You are now ready for using the newly created translator.
VAR X, Y, H, GGT;
BEGIN
READ X;
READ Y;
WHILE X<>0 DO
BEGIN
IF X<Y THEN BEGIN
H:= X; X:= Y; Y:= H
END;
X:= X-Y;
WHILE X<Y DO
X:= X-Y
END;
GGT:= Y;
WRITE GGT
END.
You should then see some C code in the right text area.