Hide

Problem F
En enkel syntax

En enkel molekyl kan beskrivas med ett atomnamn, eventuellt följt av antalet atomer, till exempel Xe, H2 eller

Cr12.

Du ska skriva ett program som kontrollerar om en inmatad molekyl följer följande syntax:


      <molekyl> ::= <atom> | <atom><num>
      <atom>  ::= <LETTER> | <LETTER><letter>
      <LETTER>::= A | B | C | ... | Z
      <letter>::= a | b | c | ... | z
      <num>   ::= 2 | 3 | 4 | ...

Du ska inte kontrollera att bokstäverna bildar ett verkligt atomnamn, inte heller ska du undersöka om molekylen är rimlig kemiskt sett.

Input

Programmet ska läsa in en eller flera rader från standard input. Varje rad ska representera en (korrekt eller inkorrekt) molekyl. Inläsningen ska avslutas då tecknet # hittas.

Output

För varje rad programmet har läst in (utom raden med #) ska programmet skriva ut:

  • antingen ”Formeln är syntaktiskt korrekt”

  • eller en av följande felutskrifter: ”Saknad stor bokstav vid radslutet” och ”För litet tal vid radslutet” följt av en utskrift av den del av inmatningen som är kvar efter det tecken där felet påträffades.

Om formeln innehöll flera fel ska bara det första påträffade felet skrivas ut. Var noga med att skriva output på exakt samma format som visas i exemplet nedan.

Sample Input 1 Sample Output 1
N
Au
H2
P21
Ag3
Fe12
Xx5
#
Formeln är syntaktiskt korrekt
Formeln är syntaktiskt korrekt
Formeln är syntaktiskt korrekt
Formeln är syntaktiskt korrekt
Formeln är syntaktiskt korrekt
Formeln är syntaktiskt korrekt
Formeln är syntaktiskt korrekt
Sample Input 2 Sample Output 2
oa
cr12
8
Cr0
Pb1
#
Saknad stor bokstav vid radslutet oa
Saknad stor bokstav vid radslutet cr12
Saknad stor bokstav vid radslutet 8
För litet tal vid radslutet 
För litet tal vid radslutet 
CPU Time limit 1 second
Memory limit 1024 MB
Statistics Show
Source KTH
License Creative Commons License (cc by-sa)

Please log in to submit a solution to this problem

Log in