Реализован простейший язык для тестирования на зацикливания
От: GhostCoders Россия  
Дата: 01.03.09 00:43
Оценка: 4 (1) :))
Здраствуйте!

Реализовал транслятор простейшего языка программирования.
Для целей тестирования алгоритма, который определеят зависает ли определенная программа,
и если зависает то на каких наборах данных.

Вот описание языка:
* This is specification of Simple Language *
* Copyright (c) 2009 PETR PETROV *

* This is an example of comment *

* Please note that indentifiers are case-sentensive *

* now we declares subprogram *
SUBPROGRAM someSubProgram
* now we declares that our subprogram accepts "arg1" as argument and has int8 type (like "char" type in C) *
INPUT arg1 TYPE int8
* output variable *
OUTPUT res1 TYPE int8
* temporary variables (local variables) default values are zeros *
VAR temp0 TYPE int8
VAR temp1 TYPE int8
* subprogram body begins *
BEGIN
* set "temp1" variable to "13" value *
SET temp1 13
* declare label with name *
LABEL abc
* If arg1 == temp1 then goto label abc *
IFEQUAL arg1 temp1 GOTO abc EIF
* arg1 = arg1 — 1 *
DEC arg1
* res1 = res1 + 1 *
INC res1
* res1 = res1 + 1 *
INC res1
* If arg1 == temp0 then goto label end *
IFEQUAL arg1 temp0 GOTO end EIF
* goto abc *
GOTO abc
LABEL end
END

* PROGRAM is similar to SUBPROGRAM but defines the entry point of the application *
* PROGRAM must be single in entire file *
* input variables can be entered by user *

PROGRAM ProgramA
INPUT arg1 TYPE int8
OUTPUT res1 TYPE int8
VAR localVar TYPE int8
BEGIN
CALL someSubProgram arg1 res1
END

* some features of Simple Language *
SUBPROGRAM example
INPUT arg1 TYPE int8
OUTPUT res1 TYPE int8
VAR temp0 TYPE int8
BEGIN
* set the value of variable *
SET temp0 50
* res1 = arg1 *
LET res1 arg1
* if arg1 > arg1 then goto label1 else label2 *
IFGREAT arg1 arg2 GOTO label1 ELSE label2
* if arg1 < arg1 then goto label1 else label2 *
IFLESS arg1 arg2 GOTO label1 ELSE label2
* res1 = arg1 / temp0 *
DIV res1 arg1 temp0
* res1 = arg1 & temp0 *
MOD res1 arg1 temp0
* res1 = arg1 x temp0 *
MUL res1 arg1 temp0
* res1 = arg1 + temp0 *
ADD res1 arg1 temp0
* res1 = arg1 — temp0 *
SUB res1 arg1 temp0

* calling a subprogram someSubProgram(temp0,res1) *
CALL someSubProgram temp0 res1

END

Реализовал также и сам анализатор, который определяет зацикливается ли входной алгоритм или нет.

С Уважением,
Петр




01.03.09 15:35: Перенесено из 'Shareware и бизнес'
Третий Рим должен пасть!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.