blob: a19646adda5ee0568ee12fbc12f2f87e1ad82ce4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
module Lrama
class Grammar
class Code
class PrinterCode < Code
def initialize(type: nil, token_code: nil, tag: nil)
super(type: type, token_code: token_code)
@tag = tag
end
private
# * ($$) *yyvaluep
# * (@$) *yylocationp
# * ($1) error
# * (@1) error
def reference_to_c(ref)
case
when ref.type == :dollar && ref.name == "$" # $$
member = @tag.member
"((*yyvaluep).#{member})"
when ref.type == :at && ref.name == "$" # @$
"(*yylocationp)"
when ref.type == :dollar # $n
raise "$#{ref.value} can not be used in #{type}."
when ref.type == :at # @n
raise "@#{ref.value} can not be used in #{type}."
else
raise "Unexpected. #{self}, #{ref}"
end
end
end
end
end
end
|