Giter Site home page Giter Site logo

Comments (5)

daxim avatar daxim commented on August 17, 2024

Works for me.

$ cat mcomment.ne
mcomment -> "/*" [^*]:* ("*":+ [^/*] [^*]:*):* "*":* "*/"

$ node bin/nearleyc.js mcomment.ne > mcomment.js

$ <testcases perl -lne'die "cannot parse \x27$_\x27" if system("node bin/nearleythere.js mcomment.js -i \x27$_\x27")' >/dev/null

$ echo $?
0

$ cat testcases
/*      /**** * **********  /*/
/*    / **/
/*    /** ***/
/*   /  ///    ** /*/
/*   ///****   *  /// */
/*   */
/*   ** /  ******   ** **/
/*   ***  *** * ****   */
/*  / /*****/
/*  / ***   /**** **/
/*  / ****/
/*  // * *   * //// /*/
/*  //*** / //*/
/*  /* /*     /* *** //***/
/*  /*/
/*  * / *  * /*** // / */
/*  * /* */
/*  * ***   / */
/*  * *** / ********** */
/*  */
/*  ** *** // /**  * /  */
/*  *** */
/*  ***** * */
/*  ****** ****** /*/
/* /  *  *****/
/* /  */
/* / /  *******  //** **/
/* / / ///**  /* * ****/
/* / *  // ** ***/
/* / * /  // /* /*** // **  */
/* / * *** ** /**** **  *******/
/* / ***/
/* / **** /** */
/* / ****/
/* / *****/
/* //    / * /* ******** */
/* // /   // **/
/* // */
/* // ***** //*  ///* */
/* /// **** //      */
/* ///*** /////*/
/* ///***/
/* //* /**   ///***** * / **  **/
/* //*/
/* //** *** * *  ***  //  ***/
/* /* / / /***   * //*/
/* /* */
/* /* *** /*  *** /  /********/
/* /*/
/* /**/
/* /***  / /// ** ***  /*/
/* /*** * /   / ** /* */
/* /*** ** * ** ******** ** */
/* /***/
/* /**** */
/* /**** ** **  // / *** / / **/
/* /******** ************* **/
/* /********/
/* *   *** ***   /*/
/* *  ******   */
/* *  ****** //** /  / * /*/
/* * /    //******  * ****/
/* * / */
/* * ////** //// **/
/* * * ///***  * / ****** /* /*/
/* * **  */
/* * ******** // * ****** /  / */
/* */
/* **  /**  * / / */
/* ** / *** *  /* *****/
/* ** // ****/
/* ** /******* //** /* /**** */
/* ** * //* /* ***** // /*** */
/* ** */
/* ***  **    /** /*/
/* ***  ***  **/
/* *** *    /*/
/* *** ***   ** */
/* **** **    /****  / **  ***/
/* **** **    ***/
/* ***** /  ****  ************/
/* ***** **  **  //* */
/* *****/
/* ****** *** */
/* ******/
/* ********* *****/
/*/    /    /  /** /  /  **/
/*/    /*  **  ****/
/*/   /*   //***** ///   /* */
/*/  //**   /*/
/*/  ** * **/
/*/  ** */
/*/  *** ** **/
/*/  *** ******** /  ******/
/*/  ****  ///  * /  **/
/*/  *******  * /  */
/*/ /  /*****  ******/
/*/ /  * **/
/*/ / *** //****  ****/
/*/ // * /    / *******/
/*/ //* /** *** * **** **** */
/*/ //*/
/*/ //**  / */
/*/ //** / //****/
/*/ //***** /**  * /////*  */
/*/ /**  * / ***/
/*/ /**** /* *** **  /***/
/*/ /**** /*** //* */
/*/ /***** /****** //  /**/
/*/ * /* **************** / */
/*/ */
/*/ **   / / ** ***  */
/*/ ** /* *  *  **** */
/*/ ***/
/*/ ***** *** /********  // */
/*//  /  * //*/
/*//  / ** ****  /// ****  *** /*/
/*// ////   / */
/*// /*/
/*// ** / * **** *  /  /***   /*/
/*///     ****  *    */
/*///   //*  /*  /* ***   * ****/
/*///  **  ** //  * /  /** */
/*///  ***  /****** ****/
/*/// /  ***/
/*/// / *  **   //* / // /*/
/*/// *  /// */
/*//// ** /  /*/
/*///// * /// ***  /**/
/*///// **/
/*/////****** / ***  ///   */
/*///* //* /*****/
/*///* ** //** // */
/*///****  / * *** // //*** ***/
/*//*     /*/
/*//* *   // */
/*//* ** ** */
/*//* *** ******** *********/
/*//*/
/*//** /***/
/*//** * /*/
/*//** **** ***** /** ***/
/*//***     *  *** * //// */
/*//***   * *   / * * / ********/
/*//**** *   ***** * /  */
/*//**** **    **/
/*//****/
/*//***** * * **/
/*/*    */
/*/*  /* ** //// * /*/
/*/* /*******  /* //*** //* **/
/*/* /********  **  ** */
/*/* *  //   ******  ** // */
/*/* * /******   /* /*/
/*/* ** ** **** /****    / */
/*/* ***/
/*/* ***** **** /*/
/*/* ******/
/*/*/
/*/**    ***/
/*/**   /**** //**/
/*/**  ***** */
/*/** / //** ///////*/
/*/** / *** */
/*/** ///* ****   // // ** //**/
/*/** ****/
/*/**/
/*/*** / *****  ** /***/
/*/*** //* *  ****** ********/
/*/*** /* **  / /***** */
/*/*** /** ///* ****/
/*/*** ** ** * */
/*/****  //// /*** /// ** /*****/
/*/****  **** *** * /** //** /*/
/*/**** ** ///*  ///*  ///*/
/*/***** *********/
/*/****** // /* *****/
/*/****** **** // ////* ***  * */
/*/********  ** * */
/*/******** //  //  / ** **/
/*/***********/
/**   / ***** * */
/**   * / */
/**   ***  ///   ///***/
/**  /// /* ** // *******/
/**  */
/**  ***/
/** /  ***** / //**/
/** / //// / * */
/** / * / *  *  **/
/** / **** //  ** **** /* // /*/
/** //**/
/** //*** /**/
/** /* *  */
/** /*/
/** /** /******** / *   **/
/** /** ** */
/** /***** ** * ****   */
/** * / ///*  ****    /***/
/** * /*   ***** */
/** * /* * /**** ///*   * / /*/
/** * /*/
/** * /***/
/** */
/** ** *** * *** ** /** /*/
/** ** ****  ******/
/** ** *****  **/
/** ** ******/
/** ***  * *  /* */
/** *** *** /****/
/** *** ****  ///////     *****/
/** **** //  * ****** ****  **/
/** ***** ***** */
/** ***********   * * / ***/
/**/
/***    ***  ///*  /***** /*/
/***   ** / /** **  /***** */
/***  / * */
/***  **    /* ****** / /**/
/***  ******* // ///*/
/*** /   ****/
/*** / /****/
/*** /*/
/*** /** / ** *** **/
/*** /** ***  / ///// ****** **/
/*** /***** /** **  ///* /*/
/*** * ///* /***/
/*** * **  * /*  */
/*** */
/*** **** /*  */
/*** ****/
/*** ***** /*** * / */
/***/
/****  *  /* //// *****/
/****  *  ****  /  /   */
/****  ******/
/**** // ***** ****/
/**** /*** /// */
/**** /***** /**    */
/**** * //  * */
/**** *** */
/**** ********   */
/****/
/*****  / */
/*****  */
/*****  ** //*  *   *    *  */
/*****  *** / /* ///**  ** *****/
/*****  *****  */
/***** /   /* / ** // / // */
/***** */
/***** ***** //   */
/*****/
/****** / ************* ** //*/
/****** /*/
/****** /*******  /**/
/****** * ///** ****  /***/
/****** * * /* //*** ** */
/****** * *** /* /*******/
/****** * *** ** // /   ** /  **/
/****** */
/****** ***  */
/******/
/*******    * /** /* / *****/
/*******  **  ** *** ****/
/******* ///*      /* /  */
/******* * //*  *  ** /*/
/******* ** / ** *****/
/******* ****** */
/******** * //****  //** /* /***/
/******** */
/********/
/*********  *** ** */
/********* ///  *****/
/********* */
/********* ***** // *** *******/
/**********     **/
/********** // * ***/
/************ /** /     **/

from nearley.

YafahEdelman avatar YafahEdelman commented on August 17, 2024

That does appear to work. Feel free to make a pull request with that added to the js grammar. Thanks!

from nearley.

kach avatar kach commented on August 17, 2024

I'm not sure what @daxim 's expression does. Is it equivalent to:

mcomment -> "/*"  ([^*] | "*" [^/]):*  "*/"

which (I think) should work?

from nearley.

daxim avatar daxim commented on August 17, 2024

There are different results when one chains comments. Let

chain -> mcomment:+

and then parse /***//***/. My result:

[ [ [ [ '/*', [], [], [ '*' ], '*/' ],
      [ '/*', [], [], [ '*' ], '*/' ] ] ] ]

Your result:

[ [ [ [ '/*',
        [ [ '*', '*' ],
          [ '/' ],
          [ '/' ],
          [ '*', '*' ] ],
        '*/' ] ] ] ]

I interpret this result to be a misparse – one long comment instead of two short – similar to the greedy/ungreedy problem in regex. Do you concur?

from nearley.

kach avatar kach commented on August 17, 2024

Ah, interesting. Mentally, I actually read /***//***/ as two consecutive comments.

It shouldn't really matter, though, right? In any case, both comments would likely be ignored by whatever traverses the syntax tree?

The ECMAScript standard says (http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf pg. 16):

MultiLineComment ::
/* MultiLineCommentChars_opt */

MultiLineCommentChars ::
MultiLineNotAsteriskChar MultiLineCommentChars_opt
* PostAsteriskCommentChars_opt

PostAsteriskCommentChars ::
MultiLineNotForwardSlashOrAsteriskChar MultiLineCommentChars_opt
* PostAsteriskCommentChars_opt

MultiLineNotAsteriskChar ::
SourceCharacter but not *

MultiLineNotForwardSlashOrAsteriskChar ::
SourceCharacter but not one of / or *

I believe that agrees with my interpretation. The standard says that multiline comments containing newlines are to be considered syntactically equivalent to newlines, so the only real issue here is whether

/*
*//*
*/

should return 1 or 2 newlines. However, I'm pretty sure this won't be an issue, so we're fine.

from nearley.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.