2017-08-17 3 views
0

Ich habe das folgende Programm mit pycparser und pycparserext geschrieben:generator.visit von pycparser Anzeige falsche Ausgabe in Ubuntu 16.04.3

from pycparser import parse_file,c_parser, c_ast, c_generator 
from pycparserext.ext_c_parser import GnuCParser 


content="int main() { int x = 1; int y = 0; while (y < 1000 && __VERIFIER_nondet_int()) { x = x + y; y = y + 1; } __VERIFIER_assert(x >= y); return 0;}" 

text = r""" """+content 
parser = GnuCParser() 
ast = parser.parse(text) 
generator = c_generator.CGenerator() 
print str(generator.visit(ast)) 

Wenn ich den Code in Mac laufen gibt es die richtige Ausgabe. Aber wenn ich den gleichen Code in Ubuntu 16.04.3 laufen gibt es die folgende falsche Ausgabe (dh den ‚main()‘ fehlt:

int{ 
    int x = 1; 
    int y = 0; 
    while ((y < 1000) && __VERIFIER_nondet_int()) 
    { 
    x = x + y; 
    y = y + 1; 
    } 

    __VERIFIER_assert(x >= y); 
    return 0; 
} 

Was diese fehlerhafte Ausgabe verursacht

+0

Nur um klar zu sein: ist das Problem, dass es die main() in der Ausgabe fallen gelassen hat? – Foon

+0

ja. main() und jede andere Funktion – Tom

Antwort

1

Dies ist wahrscheinlich . ein Problem mit pycparserext Vanille pycparser Verwendung von Github frisch geklont, bekomme ich (aus dem Haupt pycparser Verzeichnis ausgeführt wird):

$ cat /tmp/2.c 
int main() { int x = 1; int y = 0; while (y < 1000 && __VERIFIER_nondet_int()) { x = x + y; y = y + 1; } __VERIFIER_assert(x >= y); return 0;} 

$ PYTHONPATH=. python examples/c-to-c.py /tmp/2.c 
int main() 
{ 
    int x = 1; 
    int y = 0; 
    while ((y < 1000) && __VERIFIER_nondet_int()) 
    { 
    x = x + y; 
    y = y + 1; 
    } 

    __VERIFIER_assert(x >= y); 
    return 0; 
} 

Deshalb schlage ich vor Sie öffnen eine issue for pycparserext