Allow user termination from lexer code blocks - close #15

This commit is contained in:
josh committed 2024-03-29 13:45:08 -04:00
1 parent d55c5e0080
commit fad7f4fb36
9 files changed
+106 -20

No files matched your search

+10 -9
View File
@@ -198,6 +198,16 @@ class Propane
code = code.gsub(/\$token\(([$\w]+)\)/) do |match|
"TOKEN_#{Token.code_name($1)}"
end
code = code.gsub(/\$terminate\((.*)\);/) do |match|
user_terminate_code = $1
retval = rule ? "P_USER_TERMINATED" : "TERMINATE_TOKEN_ID"
case @language
when "c"
"context->user_terminate_code = (#{user_terminate_code}); return #{retval};"
when "d"
"context.user_terminate_code = (#{user_terminate_code}); return #{retval};"
end
end
if parser
code = code.gsub(/\$\$/) do |match|
case @language
@@ -216,15 +226,6 @@ class Propane
"statevalues[$-1-n_states+#{index}].pvalue.v_#{rule.components[index - 1].ptypename}"
end
end
code = code.gsub(/\$terminate\((.*)\);/) do |match|
user_terminate_code = $1
case @language
when "c"
"context->user_terminate_code = (#{user_terminate_code}); return P_USER_TERMINATED;"
when "d"
"context.user_terminate_code = (#{user_terminate_code}); return P_USER_TERMINATED;"
end
end
else
code = code.gsub(/\$\$/) do |match|
case @language
+4
View File
@@ -35,6 +35,10 @@ class Propane
@tokens.size
end
def terminate_token_id
@tokens.size + 1
end
private
def parse_grammar!