Bison Transport's Driver Finishing Program (DFP) is an excellent opportunity for people to start in the transportation industry as a Professional Driver. The program was established to assist developing Drivers who have successfully obtained their Class 1/AZ License. Bison attacks woman after she reportedly got too close to its calf. Raw video: Woman's pants reportedly ripped off but escapes serious injuries after violent encounter with a bison in Custer State. Bison Transport is taking preventative measures against the COVID-19 outbreak. The health and safety of our Professional Drivers, our staff and our community is of utmost importance due to which we are temporarily not accepting walk-in applications at our terminal so we encourage you to apply online. As a Driver Recruiter you will be responsible for sharing this brand promise with potential Driver recruits. In our fast-paced environment, you will provide Bison with a high volume of safe and experienced Drivers and Owner-Operators while balancing Driver Engagement and Driver Recruitment responsibilities.
Notes before getting started
To compile the example located on GitHub you'll need a few things. First, you'll need the Flex utility. Some systems come with it pre-installed with developer or build tools, but you'll need to make sure that it is a relatively recent version (e.g., 2.5.37). One issue that might arise for Apple users is an incompatible version of Flex. The default installed version is 2.5.35 (Apple provided), however the header file that is included won't work with this example. One solution is changing the example, however that will make it incompatible with any recent version of Flex. A better solution is simply to upgrade Flex to a newer version. For more information on this issue for Apple users, LMGTFY.
The Flex Scanner
How the Flex scanner itself works is beyond the scope of this tutorial. There are plenty of references on how to get started with a scanner, especially in C. There are lots of other examples out there but I found that most require quite a bit of work to get going and are far from complete. I based the example on some other Flex/Bison examples that create something similar to the Unix word count utility (wc). The language I used differs slightly from wc in the following respects: words are only alpha characters, numbers are simply counted as characters and I count upper and lower case characters.
The Flex Scanner Code
A brief explanation of the scanner file
On line 3 the C++ string header file is included since we use it within this code. The scanner header file (line 6) is included, which we'll talk about next, extends yyFlexLexer found in FlexLexer.h. This is the scanner class itself. Next you'll see a using statement included simply to make the namespacing a bit shorter to type when returning tokens. In previous versions of this tutorial I'd added a macro to create actual string objects from the char string yytext. Bison now defines a template function to cast/create the proper objects for you, so this version of the tutorial uses this more modern construct. If you're interested in the details, see the Bison documenation (direct link). In the past you would manually have to define your own union. Now that is largely done for you based on the token types which is much nicer. On line 7 you'll want to notice that the yylex function that is defined in the mc_scanner.hpp header file is declared as a #define with YY_DECL. This function signature must match that one (minus the virtual or other class header keywords). This is extremely important, otherwise you will hit this section within the generated code, and get the default yylex() function (discussed in detail later).
On line 14 you'll notice that I've defined terminate, I would like it to be a token type instead of NULL so we define it before the code below is read (from the generated file). This way yyterminate() is already defined by the time the compiler reaches this point in the generated code so our version is in the compiled code and not the default one.
Next you'll see that there are several options selected. Most of these are self explanatory or are explained within the Flex documentation, however the one's you don't want to miss are the nodefault, yyclass=, noyywrap and c++ options. The yyclass option indicates what the scanner class is actually called. This is the same class that is imported on line 3.
The Scanner Class Definition
Line 5 simply includes the FlexLexer.h class that defines yyFlexLexer. We then include the bison generated header file which includes the token definitions. The constructor is relatively straight forward, we simply call the yyFlexLexer constructor then we initialize the private yylval pointer to nullptr. The only function that we need to define in this simple example we have yylex which we defined as YY_DECL earlier. One thing to make note of is the fact that yylex() is now declared as virtual, and can throw an override error when defining your own function. To get around this, we've added a using statement to ensure the compiler knows that we meant to define a new yylex on line 24. Just to show why we undefined YY_DECL here's a code snippet from the generated lex.yy.cc:
See Full List On Webcamtests.com
, we get rid of the native one. That pretty much concludes the scanner portion, on to the parser stuff.Non-Driving Careers | Bison Transport
The Bison C++ Parser File
Exactly how to write a language, and express it such that the parser can parse it is definitely beyond the scope of this tutorial, there are plenty of books on how to do this. Here is just a simple description of how to define the C++ parser. The first line declares that we want to use the lalr1 skeleton file (if you want to learn what types of skeletons are available, the documentation does a fairly good job going through them). We then include the required version of Bison (for this example version 3.0+, however you can download an example that works with version 2.5 through 2.7 here: link). There's a bit of new syntax which is the reason for the version differentiation. The debug option is set on line 3. The namespace that we want this parser to use is defined on line 5 along with the parser class on line 6 (Note: its usually a good idea to have a unique namespace and a parser name so when you have multiple parsers they can be kept very distinct). On line 8 the classes that are used within the parser are defined, think of this as a forward declaration. Lines 14 through 21 are included because of a bug (perhaps feature) that removes this definition when %locations isn't used. Lines 25 and 26 are important as they define what will be given to the parser when its instantiated and upon calls to yylex. There's quite a few more options that can be given to Bison, some of those for version 3.0 are listed here (Bison Docs). Here's a snippet from the generated parser header to show our parser constructor mc_parser.tab.hh:
Reference to both the passed in driver and scanner are kept as private members of the parser class. Within the code section we have all the rest of the information that our code will need to compile, include the requisite C++ headers, the driver class that we'll get to shortly. We also define a static yylex function that'll be called within the bison parse function that takes the parameters that were defined on lines 25-26. This function will call the scanner's yylex function, any other behavior need can be defined here. Next we have the simple language which differs from the way the actual wc functions in the manner mentioned in the intro. Last the error function and the static yylex function is defined.
The Driver Header File
One thing you'll notice is that there are two parse functions. One is to take input from a file, the other for input from a C++ stream. The main function defines paths to take input from a pipeand also via file. This is implemented via these parser functions. The cool thing about havinga stream input is that you can also use this to parse command line input if you'd like.
The Driver Implementation
All thats left is to define a main class to instantiate everything and a Makefile to run the compilation from the command line (invoked by typing make in the source code directory). Our main class is perhaps a bit more complex than it has to be, however I wanted to include the stream example and the file example all in one, so there is extra code to parse the two flags I added to make this happen. It should be relatively self explanatory for anyone familiar with parsing the argv array.
The Main Function
The Makefile
Be aware that some compilers still use the c++0x flag for standard in lieu or the c++11 flag. If you are not using clang as your compiler you should change the appropriate lines within the Makefile so that make will know which compiler to call. The full code is available for download from my git-hub page here: https://github.com/jonathan-beard/simple_wc_example.git or Zip Download . If you find some errors, feel free to hop on GitHub and correct them!! I'll update the pieces here accordingly. Thanks to all who have contributed to making this as up to date as possible.
Apply Now!Driver Recruiter, Mississauga
Driver Recruiter
Mississauga, ON
We’re elevating the Professional Driver experience like never before. Our award-winning culture and unparalleled commitment to safety, teamwork and flexibility puts us in a lane of our own. As a Driver Recruiter you will be responsible for sharing this brand promise with potential Driver recruits. In our fast-paced environment, you will provide Bison with a high volume of safe and experienced Drivers and Owner-Operators while balancing Driver Engagement and Driver Recruitment responsibilities. This will be accomplished by living our brand promise and ensuring a positive experience for all Drivers and Owner-Operators with whom you interact. Whether it be providing a first-class orientation and on-boarding experience, selling the Bison Driver program to all potential candidates, or pre-screening and assisting in Driver qualification reviews, the Driver Recruiter position is a dynamic and rewarding opportunity to join our team.
Responsibilities:
- Organize and administer the weekly new Driver orientation and onboarding process including, but not limited to:
- Confirm orientation details with Drivers
- Gather paperwork, identification, and documentation for new Drivers
- Build relationships with new Drivers, Driver Development, and Operations to ensure open dialogue for addressing Driver engagement concerns
- Compile and report engagement data to identify trends and create process improvements
- Complete all Driver engagement calls for the Eastern Region through their first year with Bison
- Share applicable issues to the appropriate parties to ensure the Drivers concerns are addressed
- Actively monitor the changing marketplace to ensure we remain competitive in the changing marketplace
- Responsible for ensuring the overall standards of our safety & compliance programs are met as they apply to all potential and new hires including completion of Driver qualification process prior to hiring, assisting in administration of controlled substance testing, and any other safety & compliance issues
- Engage in other projects and activities as necessary and as assigned. This may include:
- Direct Company Drivers and Owner-Operators to the appropriate department personnel when issues arise and assisting in resolution of Driver related issues
- Assist with the Driver Recruitment Program when directed
- Play an active role in the on-going development of the Driver Program, including Driver Retention
- Responsible for various other duties that may be assigned from time to time
- Work with the Driver Recruiting Team to ensure that the company is provided with adequate quality and quantity of Company Drivers and Owner-Operators including:
- Pre-screen all walk-in and phone inquiries by Driver applicants
- Interview potential Company Drivers and/or Owner-Operators
- Review applications and ensuring all required documents are completed
- Complete reference checks and either recommend or decline applicants
- Communicate with operations regarding creating positions for quality applicants, determining the need for positions, and identifying Driver trends
Qualifications:
- Human Resource and Recruitment experience and/or education would be an asset
- Previous experience in a service-related industry
- Progressive knowledge of the transportation industry
- Excellent customer service skills
- Excellent oral and written communication skills
- Excellent interpersonal skills
- Excellent organizational skills
- Excellent time management skills
- Strong attention to detail
- Strong problem-solving abilities
- Works well in an extremely fast paced environment
- Excellent PC skills – including Excel, Power point, Word, etc.
- Experience using WorkDay would be an asset
Why Bison:
- Thrive in a supportive team that provides coaching and training to help develop your skills and progress your career
- Dispersed work environments that promote a healthy work-life balance
- Meaningful and impactful work and projects with an essential service provider
- Join our engaging Wellness Program & extracurricular sports teams
About Bison:
- Celebrating 50 years in Business
- Named as Canada's 10 Most Admired Corporate Cultures
- Achieve in giving back through Corporate Social Responsibility and Charitable Giving
- Committed to environmental sustainability
- Bison Transport is committed to Diversity and Inclusion in the Workplace
Apply Today!
Please submit your resume in MS Word or PDF format and apply today!
Stay Connected
Stay up to date with the latest news from Bison Transport!