Ik heb een een lex/yacc parser in C (onder solaris) welke een linenummer bij houdt.
Deze leest een lijst met naam, nummer in voor instellingen:
vb:
Er kan ook commentaar gebruikt worden:
Tijdens het parser wil ik het commentaar van dezelfde regel weten, dus van AA -> "instellingen van 'AA'"
Dit doe ik door regelnummers bij te houden: na het parsen van een instellingen wordt een variabele met het laatste regelnummer geupdate emt yylineno. Zodra er een stuk commentaar gelezen wordt wordt de huidige met de laatste vergeleken, indien hetzelfde is het op dezelfde regel.
Echter haalt lex de whitespaces weg:
WHITESPACE [ \t\f\b\r\n]+
(en gaan naar /dev/null
)
Als ik de file van hierboven inleest, blijkt dat 'TEST 2' op regel 4 staat, ipv 2. Deze wordt dus bij het volgende stukje geplakt. Het commentaar staat ook op regel 4, dus worden deze gekoppelt.
Hoe kan ik er voor zorgen dat 'TEST 2' als regel 2 verschijnt en niet als de regel met de volgende installingen/commentaar?
Deze leest een lijst met naam, nummer in voor instellingen:
vb:
code:
1
2
3
| AA 1 TEST 2 IKKE 3 |
Er kan ook commentaar gebruikt worden:
code:
1
2
3
4
5
| AA 1 # instellingen van 'AA' TEST 2 # test commentaar IKKE 3 |
Tijdens het parser wil ik het commentaar van dezelfde regel weten, dus van AA -> "instellingen van 'AA'"
Dit doe ik door regelnummers bij te houden: na het parsen van een instellingen wordt een variabele met het laatste regelnummer geupdate emt yylineno. Zodra er een stuk commentaar gelezen wordt wordt de huidige met de laatste vergeleken, indien hetzelfde is het op dezelfde regel.
Echter haalt lex de whitespaces weg:
WHITESPACE [ \t\f\b\r\n]+
(en gaan naar /dev/null
Als ik de file van hierboven inleest, blijkt dat 'TEST 2' op regel 4 staat, ipv 2. Deze wordt dus bij het volgende stukje geplakt. Het commentaar staat ook op regel 4, dus worden deze gekoppelt.
Hoe kan ik er voor zorgen dat 'TEST 2' als regel 2 verschijnt en niet als de regel met de volgende installingen/commentaar?
if broken it is, fix it you should