GithubHelp home page GithubHelp logo

Comments (1)

emersion avatar emersion commented on August 22, 2024

Err, it's probably more a tree than a flat list. A token can contain:

  • Unquoted strings
  • Quoted strings (" or ')
  • Candidates for parameter expansion (${expression} or $variable)
  • Candidates for command substitution ($(command) or `command`)
  • Candidates for arithmetic expansion ($((expression)))

Examples:

echo "hey 'there'" # hey 'there'
echo 'hey "there"' # hey "there"
echo "hey $(echo "there")" # hey there
echo `echo \`echo hey\`` # hey
echo $(echo $(echo hey `echo there $(echo how are you)`)) # hey there how are you
echo $(($x-1))
echo ${x:-$(ls)} # ls is executed only if x is null or unset

WIP proposal:

enum mrsh_token_type {
    TOKEN_STRING,
    TOKEN_PARAMETER,
    TOKEN_COMMAND,
    TOKEN_ARITHMETIC,
    TOKEN_LIST,
};

struct mrsh_token {
    enum mrsh_token_type type;
};

struct mrsh_token_string {
    struct mrsh_token token;
    char *str;
    bool single_quoted;
};

struct mrsh_token_parameter {
    struct mrsh_token token;
    char *name;
    char *op;
    struct mrsh_token *arg;
};

struct mrsh_token_command {
    struct mrsh_token token;
    char *command;
    bool back_quoted;
};

struct mrsh_token_arithmetic {
    struct mrsh_token token;
    struct mrsh_token *expression;
};

struct mrsh_token_list {
    struct mrsh_token token;
    struct mrsh_array children; // struct mrsh_token *
    bool double_quoted;
};

from mrsh.

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.