mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-06-03 23:11:14 -03:00
Initial work on parser bringup (squash)
This commit is contained in:
9
expression.cpp
Normal file
9
expression.cpp
Normal file
@@ -0,0 +1,9 @@
|
||||
//
|
||||
// expression.cpp
|
||||
// fish
|
||||
//
|
||||
// Created by Peter Ammon on 5/25/13.
|
||||
//
|
||||
//
|
||||
|
||||
#include "expression.h"
|
||||
103
expression.h
Normal file
103
expression.h
Normal file
@@ -0,0 +1,103 @@
|
||||
/**\file expression.h
|
||||
|
||||
Programmatic representation of fish code.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef FISH_EXPRESSION_H
|
||||
#define FISH_EXPRESSION_H
|
||||
|
||||
#include <wchar.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "util.h"
|
||||
#include "common.h"
|
||||
|
||||
|
||||
/* Fish grammar:
|
||||
|
||||
# A statement_list is a list of statements, separated by semicolons or newlines
|
||||
|
||||
statement_list = <empty> | statement | statement statement_list
|
||||
|
||||
# A statement is a normal job, or an if / while / and etc.
|
||||
|
||||
statement = boolean_statement | block_statement | decorated_statement
|
||||
|
||||
# A block is a conditional, loop, or begin/end
|
||||
|
||||
block_statement = block_header statement_list END arguments_or_redirections_list
|
||||
block_header = if_header | for_header | while_header | function_header | begin_header
|
||||
if_header = IF statement
|
||||
for_header = FOR var_name IN arguments_or_redirections_list STATEMENT_TERMINATOR
|
||||
while_header = WHILE statement
|
||||
begin_header = BEGIN STATEMENT_TERMINATOR
|
||||
function_header = FUNCTION arguments_or_redirections_list STATEMENT_TERMINATOR
|
||||
|
||||
# A boolean statement is AND or OR or NOT
|
||||
|
||||
boolean_statement = AND statement | OR statement | NOT statement
|
||||
|
||||
# A decorated_statement is a command with a list of arguments_or_redirections, possibly with "builtin" or "command"
|
||||
|
||||
decorated_statement = COMMAND plain_statement | BUILTIN plain_statement | plain_statement
|
||||
plain_statement = command arguments_or_redirections_list terminator
|
||||
|
||||
arguments_or_redirections_list = <empty> | argument_or_redirection
|
||||
argument_or_redirection = redirection | <STRING>
|
||||
redirection = REDIRECTION
|
||||
|
||||
*/
|
||||
|
||||
|
||||
class parse_command_t;
|
||||
|
||||
/** Root of a parse tree */
|
||||
class parse_tree_t
|
||||
{
|
||||
/** Literal source code */
|
||||
wcstring source;
|
||||
|
||||
/** Initial node */
|
||||
parse_command_list_t *child;
|
||||
};
|
||||
|
||||
/** Base class for nodes of a parse tree */
|
||||
class parse_node_base_t
|
||||
{
|
||||
/* Backreference to the tree */
|
||||
parse_tree_t * const tree;
|
||||
|
||||
/* Start in the source code */
|
||||
const unsigned int source_start;
|
||||
|
||||
/* Length of our range in the source code */
|
||||
const unsigned int source_length;
|
||||
};
|
||||
|
||||
class parse_statement_list_t : public parse_node_base_t
|
||||
{
|
||||
std::vector<parse_statement_t *> statements;
|
||||
};
|
||||
|
||||
class parse_statement_t : public parse_node_base_t
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
class parse_boolean_statement_t : public parse_statement_t
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
class parse_plain_statement_t : public parse_statement_t
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
class parse_block_statement_t : public parse_statement_t
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -72,6 +72,7 @@
|
||||
D07D266D15E33B86009E43F6 /* functions in Copy Files */ = {isa = PBXBuildFile; fileRef = D025C02815D1FEA100B9DB63 /* functions */; };
|
||||
D07D266E15E33B86009E43F6 /* tools in Copy Files */ = {isa = PBXBuildFile; fileRef = D025C02915D1FEA100B9DB63 /* tools */; };
|
||||
D07D267215E34171009E43F6 /* config.fish in Copy Files */ = {isa = PBXBuildFile; fileRef = D0CBD580159EE48F0024809C /* config.fish */; };
|
||||
D07FEA311751E6AF003066C3 /* expression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D07FEA2F1751E6AF003066C3 /* expression.cpp */; };
|
||||
D0879AC816BF9AAB00E98E56 /* fish_term_icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = D0879AC616BF9A1A00E98E56 /* fish_term_icon.icns */; };
|
||||
D0A564FE168D23D800AF6161 /* man in CopyFiles */ = {isa = PBXBuildFile; fileRef = D0A564F1168D0BAB00AF6161 /* man */; };
|
||||
D0A56501168D258300AF6161 /* man in Copy Files */ = {isa = PBXBuildFile; fileRef = D0A564F1168D0BAB00AF6161 /* man */; };
|
||||
@@ -336,6 +337,8 @@
|
||||
D03EE83814DF88B200FC7150 /* lru.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = lru.h; sourceTree = "<group>"; };
|
||||
D07B247215BCC15700D4ADB4 /* add-shell */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "add-shell"; path = "build_tools/osx_package_scripts/add-shell"; sourceTree = "<group>"; };
|
||||
D07B247515BCC4BE00D4ADB4 /* install.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = install.sh; path = osx/install.sh; sourceTree = "<group>"; };
|
||||
D07FEA2F1751E6AF003066C3 /* expression.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = expression.cpp; sourceTree = "<group>"; };
|
||||
D07FEA301751E6AF003066C3 /* expression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = expression.h; sourceTree = "<group>"; };
|
||||
D0879AC616BF9A1A00E98E56 /* fish_term_icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = fish_term_icon.icns; path = osx/fish_term_icon.icns; sourceTree = "<group>"; };
|
||||
D09B1C1914FC7B5B00F91077 /* postfork.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = postfork.cpp; sourceTree = "<group>"; };
|
||||
D09B1C1A14FC7B5B00F91077 /* postfork.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = postfork.h; sourceTree = "<group>"; };
|
||||
@@ -582,6 +585,8 @@
|
||||
D0A0853C13B3ACEE0099B651 /* exec.cpp */,
|
||||
D0A0850C13B3ACEE0099B651 /* expand.h */,
|
||||
D0A0853D13B3ACEE0099B651 /* expand.cpp */,
|
||||
D07FEA301751E6AF003066C3 /* expression.h */,
|
||||
D07FEA2F1751E6AF003066C3 /* expression.cpp */,
|
||||
D0A0850D13B3ACEE0099B651 /* fallback.h */,
|
||||
D0A0853E13B3ACEE0099B651 /* fallback.cpp */,
|
||||
D0A0850E13B3ACEE0099B651 /* function.h */,
|
||||
@@ -1102,6 +1107,7 @@
|
||||
D0D02A7A15983916008E62BD /* env_universal.cpp in Sources */,
|
||||
D0D02A7B15983928008E62BD /* env_universal_common.cpp in Sources */,
|
||||
D0D02A89159839DF008E62BD /* fish.cpp in Sources */,
|
||||
D07FEA311751E6AF003066C3 /* expression.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -1189,7 +1195,7 @@
|
||||
"PREFIX=L\\\"/usr/local\\\"",
|
||||
"DATADIR=L\\\"/usr/local/share\\\"",
|
||||
"SYSCONFDIR=L\\\"/usr/local/etc\\\"",
|
||||
"BINDIR=L\\\"/usr/local/bin\\\"",
|
||||
"BINDIR=L\\\"/usr/local/bin\\\"",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
@@ -1339,7 +1345,7 @@
|
||||
"PREFIX=L\\\"/usr/local\\\"",
|
||||
"DATADIR=L\\\"/usr/local/share\\\"",
|
||||
"SYSCONFDIR=L\\\"/usr/local/etc\\\"",
|
||||
"BINDIR=L\\\"/usr/local/bin\\\"",
|
||||
"BINDIR=L\\\"/usr/local/bin\\\"",
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
@@ -1365,7 +1371,7 @@
|
||||
"PREFIX=L\\\"/usr/local\\\"",
|
||||
"DATADIR=L\\\"/usr/local/share\\\"",
|
||||
"SYSCONFDIR=L\\\"/usr/local/etc\\\"",
|
||||
"BINDIR=L\\\"/usr/local/bin\\\"",
|
||||
"BINDIR=L\\\"/usr/local/bin\\\"",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
|
||||
Reference in New Issue
Block a user