awk icon indicating copy to clipboard operation
awk copied to clipboard

spurious syntax error with `? :` in combination with `print`

Open McDutchie opened this issue 1 year ago • 2 comments

Found on comp.lang.awk:

From: [email protected]
Newsgroups: comp.lang.awk
Subject: One True AWK bug?
Date: Thu, 9 May 2024 16:43:03 -0000 (UTC)
Organization: A noiseless patient Spider
Message-ID: <[email protected]>

Is this a bug in original-awk, aka "The One True Awk" ?

I noticed in this one-liner if the conditional in the print statement
below lacks parentheses it produces and "illegal statement" error:

--
$ printf 'foo\n\nbar\n' |nawk '{print $0 != "" ? $0 : "[blank]"}'
nawk: syntax error at source line 1
 context is
	{print $0 >>>  != <<< 
nawk: illegal statement at source line 1
nawk: illegal statement at source line 1
--

Adding parentheses OR rewriting as a match fixes things:

--
$ printf 'foo\n\nbar\n' |nawk '{print $0 !~ /^$/ ? $0 : "[blank]"}'
foo
[blank]
bar

$ printf 'foo\n\nbar\n' |nawk '{print ($0 != "") ? $0 : "[blank]"}'
foo
[blank]
bar
--

Both mawk and gawk don't seem to care about lack of parentheses:

--
$ printf 'foo\n\nbar\n' |mawk '{print $0 != "" ? $0 : "[blank]"}'
foo
[blank]
bar

$ printf 'foo\n\nbar\n' |gawk '{print $0 != "" ? $0 : "[blank]"}'
foo
[blank]
bar
--

Note 'nawk' here is NOT gawk, it's a more recent version of original-awk:

$ nawk --version    # from https://github.com/onetrueawk/awk
awk version 20240122 

$ original-awk --version  # version Debian apt currently has
awk version 20220912

McDutchie avatar May 14 '24 19:05 McDutchie

printfix.txt

This may fix it, but it increases the number of shift/reduce and reduce/reduce conflicts. And I didn't run the test suite on it.

In general, the grammar is a MESS; in particular I don't understand the reason for separate pattern and ppattern and related non-terminals.

@plan9 Thoughts welcome.

arnoldrobbins avatar May 14 '24 20:05 arnoldrobbins

I agree the grammar is in need of some careful cleanup. I had spent some time working on that for eg. issue #149 but left unfinished. I will take a close look at this one as well, and see if I can come up with a solution without increasing the conflicts.

plan9 avatar May 15 '24 04:05 plan9