From 9d4259d6e3afc3c29010d57204454a85832498de Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Tue, 20 Feb 2024 18:48:48 +0200 Subject: rename to nqc --- internal/generated/Makefile | 2 +- internal/generated/generate.raku | 62 ---------------------------------------- internal/generated/nqc.raku | 60 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 63 deletions(-) delete mode 100644 internal/generated/generate.raku create mode 100644 internal/generated/nqc.raku diff --git a/internal/generated/Makefile b/internal/generated/Makefile index 701d4f8..960c6a4 100644 --- a/internal/generated/Makefile +++ b/internal/generated/Makefile @@ -4,7 +4,7 @@ generate: types tracepoint_list .PHONY: types types: - cat ../c/types.h | raku generate.raku nqctogo | tee types/types.go + cat ../c/types.h | raku nqc.raku | tee types/types.go .PHONY: tracepoint_list tracepoint_list: diff --git a/internal/generated/generate.raku b/internal/generated/generate.raku deleted file mode 100644 index 29c15fa..0000000 --- a/internal/generated/generate.raku +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env raku -# -# This Raku program takes a list of C struct and constant definitions and converts -# it to valid Go code. - -#use Grammar::Debugger; - -# Not quite C -grammar NQC { - rule TOP { * } - rule construct { | || } - rule constant { '#define' } - rule statement { ';' } - rule struct { 'struct' '{' + %% ';' '}' } - rule member { ? } - rule comment { | } - rule single-line-comment { '//' <-[\n]>+ } - rule multi-line-comment { '/*' .*? '*/' } - token arraysize { '[' ']' } - token type { 'char' | '__s32' | '__u32' | '__u64' } - token identifier { <[a..z A..Z 0..9 _]>+ } - token number { \d+ } -} - -class NQCToGoActions { - method TOP($/) { - make "// This file was generated - don't change manually!\n" ~ - "package types\n\n" ~ - $.map(*.made).join('') - } - - method construct($/) { make $.made // $.made // '' } - method statement($/) { make "\n" ~ $.made ~ "\n"; } - method constant($/) { make 'const ' ~ $ ~ ' = ' ~ $ ~ "\n" } - - method struct($/) { - make 'type ' ~ $.made ~ " struct \{\n\t" ~ - $.map(*.made).join("\n\t") ~ "\n\}" - } - - method member($/) { - make $.made ~ ' ' ~ ($ ?? $ !! '') ~ $.made - } - - method type($/) { - make do given ~$/ { - when 'char' { 'byte' } - 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('') - } -} - -multi sub MAIN('nqctogo') { - NQC.parse($*IN.slurp, :actions(NQCToGoActions.new)).made.say; -} diff --git a/internal/generated/nqc.raku b/internal/generated/nqc.raku new file mode 100644 index 0000000..f381faf --- /dev/null +++ b/internal/generated/nqc.raku @@ -0,0 +1,60 @@ +#!/usr/bin/env raku +# +# This Raku program takes a list of C struct and constant definitions and converts +# it to valid Go code. + +#use Grammar::Debugger; + +# Not quite C +grammar NQC { + rule TOP { * } + rule construct { | || } + rule constant { '#define' } + rule statement { ';' } + rule struct { 'struct' '{' + %% ';' '}' } + rule member { ? } + rule comment { | } + rule single-line-comment { '//' <-[\n]>+ } + rule multi-line-comment { '/*' .*? '*/' } + token arraysize { '[' ']' } + token type { 'char' | '__s32' | '__u32' | '__u64' } + token identifier { <[a..z A..Z 0..9 _]>+ } + token number { \d+ } +} + +class NQCToGoActions { + method TOP($/) { + make "// This file was generated - don't change manually!\n" ~ + "package types\n\n" ~ + $.map(*.made).join('') + } + + method construct($/) { make $.made // $.made // '' } + method statement($/) { make "\n" ~ $.made ~ "\n"; } + method constant($/) { make 'const ' ~ $ ~ ' = ' ~ $ ~ "\n" } + + method struct($/) { + make 'type ' ~ $.made ~ " struct \{\n\t" ~ + $.map(*.made).join("\n\t") ~ "\n\}" + } + + method member($/) { + make $.made ~ ' ' ~ ($ ?? $ !! '') ~ $.made + } + + method type($/) { + make do given ~$/ { + when 'char' { 'byte' } + 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('') + } +} + +say NQC.parse($*IN.slurp, :actions(NQCToGoActions.new)).made; -- cgit v1.2.3