Closed p2mate closed 5 years ago
The following simple program using K&R function definitions results in an error using lang-c. It compiles fine with gcc however.
extern int puts(char *); int main(argc, argv) int argc; char **argv; { puts("Hello!"); return 0; }
Rust test program:
/* Test program to show bug in K&R parsing. * * Input program: * * extern int puts(char *); * * int main(argc, argv) * int argc; * char **argv; * { * puts("Hello!"); * * return 0; * } * * Output: * Err(SyntaxError(SyntaxError { source: "# 1 \"kr.c\"\n# 1 \"<built-in>\"\n# 1 \"<command-line>\"\n# 31 \"<command-line>\"\n# 1 \"/usr/include/stdc-predef.h\" 1 3 4\n# 32 \"<command-line>\" 2\n# 1 \"kr.c\"\nextern int puts(char *);\n\nint main(argc, argv)\nint argc;\nchar **argv;\n{\n puts(\"Hello!\");\n\n return 0;\n}\n", line: 10, column: 14, offset: 184, expected: {"[_a-zA-Z]", "[_a-zA-Z0-9]", ")"} })) * */ extern crate lang_c; use lang_c::driver::{Config, parse}; fn main() { let config = Config::default(); println!("{:?}", parse(&config, "kr.c")); }
Output:
Err(SyntaxError(SyntaxError { source: "# 1 \"kr.c\"\n# 1 \"\"\n# 1 \"\"\n# 31 \"\"\n# 1 \"/usr/include/stdc-predef.h\" 1 3 4\n# 32 \"\" 2\n# 1 \"kr.c\"\nextern int puts(char *);\n\nint main(argc, argv)\nint argc;\nchar **argv;\n{\n puts(\"Hello!\");\n\n return 0;\n}\n", line: 10, column: 14, offset: 184, expected: {"[_a-zA-Z]", "[_a-zA-Z0-9]", ")"} }))
Thanks!
The following simple program using K&R function definitions results in an error using lang-c. It compiles fine with gcc however.
Rust test program:
Output:
Err(SyntaxError(SyntaxError { source: "# 1 \"kr.c\"\n# 1 \"\"\n# 1 \"\"\n# 31 \"\"\n# 1 \"/usr/include/stdc-predef.h\" 1 3 4\n# 32 \"\" 2\n# 1 \"kr.c\"\nextern int puts(char *);\n\nint main(argc, argv)\nint argc;\nchar **argv;\n{\n puts(\"Hello!\");\n\n return 0;\n}\n", line: 10, column: 14, offset: 184, expected: {"[_a-zA-Z]", "[_a-zA-Z0-9]", ")"} }))