aboutsummaryrefslogtreecommitdiff
path: root/src/cljcc/parser.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/cljcc/parser.clj')
-rw-r--r--src/cljcc/parser.clj19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/cljcc/parser.clj b/src/cljcc/parser.clj
index d19ddd1..8852d91 100644
--- a/src/cljcc/parser.clj
+++ b/src/cljcc/parser.clj
@@ -11,10 +11,11 @@
(def c-parser
(insta/parser
"<program> = function+
- function = #'int\\b' identifier <'('> #'void\\b' <')'> <'{'> statement+ <'}'>
+ function = #'int\\b' identifier <'('> #'void\\b' <')'> <'{'> statement <'}'>
statement = #'return\\b' exp <';'>
exp = exp-prime
- <exp-prime> = constant | unop exp-prime | <'('> exp-prime <')'>
+ <exp-prime> = constant | unop-exp | <'('> exp-prime <')'>
+ unop-exp = unop exp
unop = #'-' | #'~'
identifier = #'[a-zA-Z_]\\w*\\b'
constant = #'[0-9]+\\b'
@@ -29,21 +30,17 @@
(comment
- (parse "int main(void) {return 2;}")
+ (parse "int main(void) {return 2;}")
- (parse "
+ (parse "
int main(void) {
return 2;
- return 2;
}")
- (parse "int main(void) {
+ (parse "int main(void) {
return -(((((10)))));
}")
- (parse "int main(void) {
- return --2;
+ (parse "int main(void) {
return -(((((10)))));
- }")
-
- ,)
+ }"))