summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-02-20 22:49:13 +0200
committerPaul Buetow <paul@buetow.org>2024-02-20 22:49:13 +0200
commit8d6c94f8681aea43620e2b4eebb6c7b46e2926dc (patch)
tree6b48646e42dd8849e0a5828fd0321dbb8a02dbcc /internal
parent326dfd7fb20ab2257cc064945b64709764a20566 (diff)
minor improvements in the NQC parser
Diffstat (limited to 'internal')
-rw-r--r--internal/generated/nqc.raku22
1 files changed, 8 insertions, 14 deletions
diff --git a/internal/generated/nqc.raku b/internal/generated/nqc.raku
index c59688f..040617f 100644
--- a/internal/generated/nqc.raku
+++ b/internal/generated/nqc.raku
@@ -9,8 +9,8 @@ use v6.d;
# Not quite C
grammar NQC {
rule TOP { <construct>* }
- rule construct { <constant> | <statement> || <comment> }
- rule constant { '#define' <identifier> <number> }
+ rule construct { <constant> | <statement> | <comment> }
+ rule constant { '#define' <identifier> <number> <-[\n]>+ }
rule statement { <struct> ';' }
rule struct { 'struct' <identifier> '{' <member>+ %% ';' '}' }
rule member { <type> <identifier> <arraysize>? }
@@ -26,8 +26,7 @@ grammar NQC {
class NQCToGoActions {
method TOP($/) {
make "// This file was generated - don't change manually!\n" ~
- "package types\n\n" ~
- $<construct>.map(*.made).join('')
+ "package types\n\n" ~ $<construct>.map(*.made).join('')
}
method construct($/) { make $<constant>.made // $<statement>.made // '' }
@@ -35,13 +34,10 @@ class NQCToGoActions {
method constant($/) { make 'const ' ~ $<identifier> ~ ' = ' ~ $<number> ~ "\n" }
method struct($/) {
- make 'type ' ~ $<identifier>.made ~ " struct \{\n\t" ~
- $<member>.map(*.made).join("\n\t") ~ "\n\}"
+ make 'type ' ~ $<identifier>.made ~ " struct \{\n\t" ~ $<member>.map(*.made).join("\n\t") ~ "\n\}"
}
- method member($/) {
- make $<identifier>.made ~ ' ' ~ ($<arraysize> ?? $<arraysize> !! '') ~ $<type>.made
- }
+ method member($/) { make $<identifier>.made ~ ' ' ~ ($<arraysize> // '') ~ $<type>.made }
method type($/) {
make do given ~$/ {
@@ -49,13 +45,11 @@ class NQCToGoActions {
when '__s32' { 'int32' }
when '__u32' { 'uint32' }
when '__u64' { 'uint64' }
- };
+ }
}
- method identifier($/) {
- # Convert identifier from snake_case (C) to CamelCase (Go)
- make $/.Str.split('_').map(*.tc).join('')
- }
+ # Convert identifier from snake_case (C) to CamelCase (Go)
+ method identifier($/) { make $/.Str.split('_').map(*.tc).join('') }
}
say NQC.parse($*IN.slurp, :actions(NQCToGoActions)).made;