1596 - Bug Hunt

来源:互联网 发布:强制竖屏软件 编辑:程序博客网 时间:2024/05/17 04:08

In this problem, we consider a simpleprogramming language that has only declarations of onedimensional integerarrays and assignment statements. The problem is to find a bug in the givenprogram.

The syntax of this language is given in BNFas follows:

 

program

::=

declaration|programdeclaration|programassignment

declaration

::=

array [ number ] new

assignment

::=

array [ expression ]= expressionnewline

expression

::=

number|array [ expression ]

number

::=

digit|digitdigit

digit

::=

digit|digitdigit

digit

::=

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

digit

::=

0 | digit

array

::=

a | b | c | d | e | f | g | h | i | j | k | l | m |

n | o | p | q | r | s | t | u | v | w | x | y | z |

A | B | C | D | E | F | G | H | I | J | K | L | M |

N | O | P | Q | R | S | T | U | V | W | X | Y | Z


where new denotes a newline character (LF).

Characters used in a program arealphabetical letters, decimal digits, =, [, ] and new linecharacters. No other characters appear in a program.

A declaration declares an array andspecifies its length. Valid indices of an array of lengthn areintegers between 0 and n - 1 , inclusive. Note that thearray names are case sensitive, i.e. array a and array A aredifferent arrays. The initial value of each element in the declared array isundefined.

For example, array a of length 10and array b of length 5 are declared respectively as follows.

 

a[10]

b[5]


An expression evaluates to a non-negative integer. A number is interpretedas a decimal integer. An array [ expression ] evaluatesto the value of the expression -th element ofthe array. An assignment assigns the value denoted by the right hand side tothe array element specified by the left hand side.

Examples of assignments are as follows.

 

a[0]=3

a[1]=0

a[2]=a[a[1]]

a[a[0]]=a[1]


A program is executed from the first line, line by line. You can assume that anarray is declared once and only once before any of its element is assigned orreferred to.

Given a program, you are requested to findthe following bugs.

  • An index of an array is invalid.
  • An array element that has not been assigned before is referred to in an assignment as an index of array or as the value to be assigned.

You can assume that other bugs, such assyntax errors, do not appear. You can also assume that integers representedby number s are between 0and 231 - 1(= 2147483647) , inclusive.

Input 

The input consists of multiple datasetsfollowed by a line which contains only a single `.' (period).

Each dataset consists of a program alsofollowed by a line which contains only a single `.' (period).

A program does not exceed 1000 lines. Anyline does not exceed 80 characters excluding a new line character.

Output 

For each program in the input, you shouldanswer the line number of the assignment in which the first bug appears. Theline numbers start with 1 for each program. If the program does not have a bug,you should answer zero. The output should not contain extra characters such asspaces.

SampleInput 

a[3]

a[0]=a[1]

.

x[1]

x[0]=x[0]

.

a[0]

a[0]=1

.

b[2]

b[0]=2

b[1]=b[b[0]]

b[0]=b[1]

.

g[2]

G[10]

g[0]=0

g[1]=G[0]

.

a[2147483647]

a[0]=1

B[2]

B[a[0]]=2

a[B[a[0]]]=3

a[2147483646]=a[2]

.

.

SampleOutput 

2

2

2

3

4

0

 

0 0
原创粉丝点击