UnderwareDESIGN

PlayBASIC => Beginners => Topic started by: cybermind on July 29, 2013, 06:31:27 AM

Title: [SOLVED] A syntax error I can't get right
Post by: cybermind on July 29, 2013, 06:31:27 AM
In this piece of code the compiler tells me that there are a syntax error in the "IF" line at top, I can't see why? I remove most of the conditions and leaving only a few in that line it goes past that and tells me that there are a syntax error in "give_items = 0", I am puzzled :-P (NOTE: This is code from something I previously coded in DarkBASIC Professionel).

if action_activated = 1 and show_event = 1 and show_list = 0 and in_game_menu = 0 and items_required_not_in_possession = 1 and give_items = 0 and required_items = 0 and take_items = 0 and encounter_at_this_sub_entry = 0 and skill_using = 0 and action_single_press = 0
`mark that current sub entry is completed
if fled_from_battle = 0 then conversations_completed(event,sub_entry) = 1
action_single_press = 1
give_items = 0
required_items = 0
take_items = 0
show_event = 0
event = 0
skill_required = 0
skill_given = 0
skill_success = 0
skill_using = 0
fled_from_battle = 0
sub_entry = 1
encounter_at_this_sub_entry = 0
random_encounter_timer = timer_stored + pause_random_encounter_timer
items_required_not_in_possession = 0
endif
Title: Re: A syntax error I can't get right
Post by: kevin on July 29, 2013, 07:44:20 AM
  works here, but as i remove this line     if fled_from_battle = 0 then conversations_completed(event,sub_entry) = 1   , since it's accessing an array that isn't previously declared in the snippet.   



Title: Re: A syntax error I can't get right
Post by: cybermind on July 29, 2013, 11:24:56 AM
I used some of the variables names as labels also :-P Thank you for time! It is invaluable to me that people will use their time for so small problems :-)
Title: Re: [SOLVED] A syntax error I can't get right
Post by: kevin on July 29, 2013, 05:44:47 PM

Yeah, that won't work.   Will have a look at improving the error though, since Syntax is too generic.

All keyword names have an order precedence in PlayBASIC, with the highest being Function/Psub followed by Label names, since they're resolved during Pass#1,  the others only exist during Pass#2.  From memory TYPE names have precedence over Variable/Arrays names.


some examples for others reading this in the future:


[pbcode]

   ; this can't be called stuff, since Stuff already exists as function
   Dim Stuff(100)

   
Function Stuff(a)

EndFunction
[/pbcode]



[pbcode]

    ; Attempting to create a variable called WOMBAT will fail
    ; since the WOMBAT keyword is already defined as a LABEL during pass#1
   
    Wombat = 45
   

     end
     

   
   ; define subroutine called WOMBAT starting point

Wombat:
     print "This is the Wombat sub-routine"
   return   

[/pbcode]


Title: Re: [SOLVED] A syntax error I can't get right
Post by: cybermind on July 30, 2013, 09:27:18 AM
Just a note, I actually think that the labels were remmed out at the time of the syntax error. I will try and recreate the scenario if it is of any help to you :-)
Title: Re: [SOLVED] A syntax error I can't get right
Post by: kevin on July 30, 2013, 05:10:05 PM
   Yep that would also fail.  Pass #1 doesn't actually look at syntax it's only looking for markers, namely labels and function/psub prototypes.    Meaning it's entirely possible for a label / function name to be seen inside a remark block, since rems (ie the syntax) are only parsed during Pass #2.     It's been on the to-do list for a while..  It's should be possible to implement something to catch rems during pass #1, but that wouldn't work for directives like this,


[pbcode]

  Constant RemoveFunctions =true

  #if RemoveFunctions =true

Function HelloWorld()


EndFunction

  #Endif

[/pbcode]


   Edit:  Remark block parsing has been added to PlayBASIC V1.64O (http://www.underwaredesign.com/forums/index.php?topic=3988.msg27519#msg27519)