Problem H
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 |