Skip to content

Basic example results in Unexpected token error #31

@prokls

Description

@prokls

Hi,

I am trying to get kyuri up and running, but am experiencing problems with the most basic example.

prokls@cratch ~/kyuri-test % cat test.feature
Feature: Addition
  In order to avoid silly mistakes
  As a math idiot
  I want to be told the sum of two numbers

  Scenario: Add two numbers
      Given I have entered 50 into the calculator
        And I have entered 70 into the calculator
       When I press add
       Then the result should be 120 on the screen
prokls@cratch ~/kyuri-test % ./node_modules/kyuri/bin/kyuri test.feature
/home/prokls/kyuri-test/node_modules/kyuri/lib/kyuri/parser.js:407
      throw new Error('Unexpected token "' + token[0] + '" at line ' + token[2
            ^
Error: Unexpected token "SENTENCE" at line 1
    at Object.Parser.checkToken (/home/prokls/kyuri-test/node_modules/kyuri/lib/kyuri/parser.js:407:13)
    at Object.Parser.parse (/home/prokls/kyuri-test/node_modules/kyuri/lib/kyuri/parser.js:391:14)
    at Object.exports.parse (/home/prokls/kyuri-test/node_modules/kyuri/lib/kyuri/core.js:59:17)
    at /home/prokls/kyuri-test/node_modules/kyuri/bin/kyuri:91:27
    at Array.forEach (native)
    at complete (/home/prokls/kyuri-test/node_modules/kyuri/bin/kyuri:85:9)
    at Array.forEach (native)
    at Object.<anonymous> (/home/prokls/kyuri-test/node_modules/kyuri/bin/kyuri:70:6)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
prokls@cratch ~/kyuri-test %

So I looked into node_modules/kyuri/lib/kyuri/parser.js and printed token and this.current.transitions.

Parser.prototype = {
  parse: function (tokens) {
    this.tokens = tokens;
    this.ast = {};
    this.isPystring = false;
    this.hasTag = false;
    this.tags = [];
    this.states = Object.create(_states);
    this.current = this.states['start'];
    this.last = null;

    while (this.tokens.length > 0) {
      var token = this.tokens.shift();

      if (token[0] === 'COMMENT') {
        // Ignore comments in parsing for now. 
        // Remark: What would comments look like in generated code?
      }
      else if (token[0] === 'PYSTRING') {
        this.checkPystring(token);
      } 
      else if (token[0] === 'TAG') {
        this.checkTag(token);
      }
      else {
        console.log(token);
        this.checkToken(token);
        this.last = token;
      }
    }

    return this.ast;
  },

  checkToken: function (token) {
    var next = Object.keys(this.current.transitions);
    console.log(this.current.transitions);

    if (next.indexOf(token[0]) !== -1) {
      this.checkTransition(token, this.current.transitions[token[0]]);
    }
    else {
      throw new Error('Unexpected token "' + token[0] + '" at line ' + token[2]);
    }
  },
  ...
}

This gives me

[ 'FEATURE', 'FEATURE', 0 ]
{ FEATURE: { value: 'FEATURE', next: 'feature' } }
[ 'SENTENCE', 'Addition', 0 ]
{ SENTENCE: { value: '*', next: 'featureHeader', build: [Function] } }
[ 'TERMINATOR', '\n', 0 ]
{ TERMINATOR: 
   { value: '*',
     next: 'featureHeader',
     last: [ 'TERMINATOR', 'SENTENCE' ] },
  INDENT: { value: 1, next: 'featureDescription', last: 'TERMINATOR' } }
[ 'SENTENCE', 'In order to avoid silly mistakes', 1 ]
{ TERMINATOR: 
   { value: '*',
     next: 'featureHeader',
     last: [ 'TERMINATOR', 'SENTENCE' ] },
  INDENT: { value: 1, next: 'featureDescription', last: 'TERMINATOR' } }

So the transition table does not contain a SENTENCE, which is really strange.

I hope you guys can help me out here :-)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions