Commit Graph

356 Commits

Author SHA1 Message Date
Username404 cca696b27a
Fix the line number of next in Parser.hpp
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-03-04 19:31:28 +01:00
Username404 26d88c2f91
Set line to 1 by default in the tok structure
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-03-04 19:25:29 +01:00
Username404 9d7300ce89
Fix errors by removing the isNotBlank boolean and using hasNext instead
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-03-04 19:19:13 +01:00
Username404 33e29ccb8e
Remove the tok default constructor in lex.hpp
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-03-01 20:16:29 +01:00
Username404 6955c5cb4d
Remove tok::type::EOF_ because it is useless, and fix the `next` local constant reference in Parser.hpp
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-03-01 20:14:47 +01:00
Username404 ec4121de1c
Fix parsing of parentheses by searching after the current index
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 16:03:34 +01:00
Username404 56e1db5fcc
Add a transpileTree function to Target.hpp
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 14:12:00 +01:00
Username404 3c130529a4
Make the newLine constructor parameter a reference & add a "separator" member and a "uniqueLineSeparator" virtual method to Target.hpp
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 14:12:00 +01:00
Username404 63b24752d6
Make the members of the tok structure non-const to avoid undefined behaviour when the "=" operator is called
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 14:12:00 +01:00
Username404 beb28ef4ad
Rename the Yerbacon::exit function to Yerbacon::fail
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 14:12:00 +01:00
Username404 de2259b6ed
Add a "inverseLCharacter" static function to tok
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 14:12:00 +01:00
Username404 7cbb424416
Add a "unit_result" type alias to main.cpp
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 14:12:00 +01:00
Username404 de2d936e19
Use dynamic_cast instead of reinterpret_cast in Target.hpp and ParseComponents.hpp, and extend the ParseComponent class virtually in the ParseTree and NamedIdentifier classes
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 14:12:00 +01:00
Username404 68dc7ea1a1
Make Parser::parseVector a function template
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 14:12:00 +01:00
Username404 c4f75a3b04
Make the constexpr ParseTree constructors inline instead
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 14:12:00 +01:00
Username404 0b3109c989
Add a move assignment operator to ParseTree
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 14:12:00 +01:00
Username404 a45902c9b2
Add an "at" function to ParseTree
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 14:12:00 +01:00
Username404 1a37e35228
Add a component_ptr type definition to ParseComponents.hpp
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 14:12:00 +01:00
Username404 ca4e773fca
Add an alternative "make_task_noR" macro to avoid making unused references in Target.hpp
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 14:12:00 +01:00
Username404 f33aec687a
Parse Calls/ParseTrees
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 14:12:00 +01:00
Username404 b5ff43e109
Remove a useless constructor in the ParseTree class
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 14:12:00 +01:00
Username404 63b3d727a6
Add a newline to the output in Target.hpp
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
2022-02-14 14:12:00 +01:00
Username404 ae2a661427
Remove the useless nested structure in StandardComponents::Class 2022-02-14 14:12:00 +01:00
Username404 905222f61d
Don't output an extra new line in the stringInterpolation() function 2022-02-14 14:12:00 +01:00
Username404 04923f03a5
Revert "Remove a useless #include directive in lex.hpp"
This reverts commit 41e33e30ba5faef9bd841777eae8701718bf8f69.
2022-02-14 14:12:00 +01:00
Username404 4f40fdaed7
Add a "=" operator and a default constructor to tok 2022-02-14 14:12:00 +01:00
Username404 070189e4a0
Check whether failbit or badbit are set in filefuncs.cpp 2022-02-14 14:12:00 +01:00
Username404 afeeaa260f
Actually flush cout before displaying errors 2022-02-14 14:12:00 +01:00
Username404 eb709e60b0
Remove the (now useless) parallel parameter in the getFileContent() function from filefuncs.cpp 2022-02-14 14:12:00 +01:00
Username404 96dd67b69a
Remove a useless #include directive in lex.hpp 2022-02-14 14:12:00 +01:00
Username404 cf4ea8a1f8
Improve the tok constructors 2022-02-14 14:12:00 +01:00
Username404 19f76c405c
Remove a useless constructor in lex.hpp 2022-02-14 14:12:00 +01:00
Username404-59 4253d5b922
Remove redundant usage of endl in main.cpp 2022-02-14 14:12:00 +01:00
Username404-59 18daa6495c
Use cerr instead of clog to make sure cout has been flushed before errors get displayed 2022-02-14 14:12:00 +01:00
Username404 a078fcd07b
Output errors to clog instead of cout 2022-02-14 14:12:00 +01:00
Username404 f90514ba4b
Remove the <optional> include directive in Target.hpp since it is now useless 2022-02-14 14:12:00 +01:00
Username404 5580b8f204
Remove redundant optional usage in Target.hpp 2022-02-14 14:12:00 +01:00
Username404 1082bcf58f
Allow "_" characters in identifiers 2022-02-14 14:12:00 +01:00
Username404 f44cceb11a
Ignore ';' characters 2022-02-14 14:12:00 +01:00
Username404 106a2f0be9
Remove a useless semicolon in Target.hpp 2022-02-14 14:12:00 +01:00
Username404 cb8e818956
Add shared tasks to Target.hpp 2022-02-14 14:12:00 +01:00
Username404 609567cfd1
Add a "unit" alias to main.cpp 2022-02-14 14:12:00 +01:00
Username404 b16f974eac
Use the system-wide locale 2022-02-14 14:12:00 +01:00
Username404 eb586a2899
Use generic_category::message() instead of strerror() in filefuncs.cpp 2022-02-14 14:12:00 +01:00
Username404-59 e720ff0f2d
Add an error message when an exception is thrown from the getFileContent() function & --parallel is not in use, and support MSVC 2022-02-14 14:12:00 +01:00
Username404-59 d2c0ef185f
Add the C++ standard to the getBuildInfo() function by adding two new macros: "token_expansion" and "make_string" 2022-02-14 14:12:00 +01:00
Username404-59 f266c35954
Use the size_t type instead of "unsigned long" for variables that hold the result of a find() call 2022-02-14 14:12:00 +01:00
Username404 158021cf68
Fix the indentation of a line modified by the previous commit 2022-02-14 14:12:00 +01:00
Username404-59 173ed5d6c3
Add a parsingError() function to Parser.hpp 2022-02-14 14:12:00 +01:00
Username404 a098973023
Throw an exception when a final variable is being redefined, and use types instead of auto in the ParseTree::findReferenceByName() method and when calling it in Parser.hpp 2022-02-14 14:12:00 +01:00
Username404 c9a6a6c918
Remove a useless condition and two unnecessary parentheses in lexer.cpp 2022-02-14 14:12:00 +01:00
Username404-59 3c4586cc70
Add "ASTERISK" and "DIVIDE" token types to lex.hpp, and implement comments 2022-02-14 14:12:00 +01:00
Username404 458d272088
Only reassign exit_code when it is meant to be EXIT_FAILURE 2022-02-14 14:12:00 +01:00
Username404 30ae9d7369
Remove a useless space in main.cpp 2022-02-14 14:12:00 +01:00
Username404 08661d83a3
Add an explicit return type to the nextAre function 2022-02-14 14:12:00 +01:00
Username404 70466cdb80
Demangle the name of components when a GNU/Clang compiler is being used 2022-02-14 14:12:00 +01:00
Username404 1b9b281dec
Heavily modify Target.hpp, add a pointerAs function, and add an overload to Yerbacon::exit 2022-02-14 14:11:20 +01:00
Username404-59 2cf523bf17
Replace "--newlinesoff" with an assignable argument ("--newlines=on/off") 2021-10-20 17:11:14 +02:00
Username404-59 88d22e6183
Add a "--buildInfo" argument to print the compiler and optimization options used when building 2021-10-20 17:08:41 +02:00
Username404-59 0ce02ea77f
Remove a useless semicolon in ParseComponents.hpp 2021-10-20 13:21:35 +02:00
Username404-59 d9b399881d
Use the derived_from concept in the template of the IS(X) macro 2021-10-20 13:16:54 +02:00
Username404-59 ec2af24be3
Add a [] operator to the ParseTree class 2021-10-20 13:16:40 +02:00
Username404-59 7b8b8addd6
Remove the isNPOS boolean and assign lastSlash to position1 when it isn't equal to string_view::npos 2021-10-15 13:02:46 +02:00
Username404-59 cd8b14e00b
Add a missing semicolon in the definition of isNPOS in main.cpp 2021-10-14 23:28:58 +02:00
Username404-59 0b20c24eba
Make position1 and position2 constant variables in main.cpp 2021-10-14 23:25:55 +02:00
Username404-59 b351280b5b
Always verify that position1 is not equal to string_view::npos in main.cpp 2021-10-14 23:16:17 +02:00
Username404-59 cf6e5cfaf8
Don't ignore '\' characters when '/' isn't present in file names 2021-10-14 22:52:44 +02:00
Username404-59 1b91a2a761
Do not output compilation results that are made of whitespace characters 2021-10-08 17:46:14 +02:00
Username404-59 2458c7bb6c
Return EXIT_FAILURE if one of the compilation units failed 2021-10-08 17:37:24 +02:00
Username404-59 a2b67298a4
Use filesystem::path::preferred_separator at compile time to remove a few preprocessor directives in main.cpp 2021-10-08 16:32:41 +02:00
Username404-59 429ed02483
Don't output useless new lines in main.cpp 2021-10-08 13:29:46 +02:00
Username404 dc21af192b
Make Yerbacon::exit a static function 2021-10-07 22:01:23 +02:00
Username404 8ab826bf68
Move a condition from Target.hpp to main.cpp and add a new Yerbacon::exit function 2021-10-07 21:39:48 +02:00
Username404 7b1987f81b
Throw an exception when instead of calling exit when the "--newlinesoff" argument is used with incompatible targets 2021-10-07 21:11:45 +02:00
Username404-59 aac3085e94
Make currentCharType a constant variable in lexer.cpp 2021-10-06 14:37:13 +02:00
Username404 a64805bd35
Use the constant iterators from the files set in main.cpp 2021-10-05 20:11:07 +02:00
Username404-59 20eff1d7b5
Set the initial size of Units to the number of files instead of allocating memory and using a back_inserter 2021-10-05 09:28:43 +02:00
Username404-59 e04fc67aae
Reserve memory for the Units vector 2021-10-05 09:15:46 +02:00
Username404-59 70f93b9200
Use std::transform on the files set to output the results to the Units vector 2021-10-05 09:13:31 +02:00
Username404-59 24d934caf2
Use any_of instead of a range-based loop in the Argument::is function 2021-10-05 08:45:38 +02:00
Username404-59 58f2d9cba7
Remove an extra space in arguments.hpp 2021-10-05 08:43:34 +02:00
Username404-59 1e7da048d4
Call std::for_each in main.cpp instead of using range-based loops, to allow the use of the parallel mode 2021-10-05 08:38:25 +02:00
Username404 a3d6c5d3bc
Rename the exceptions caught in main.cpp 2021-10-03 21:20:21 +02:00
Username404 7c9716c45e
Don't include <variant> in main.cpp since it's not being used 2021-10-03 19:20:51 +02:00
Username404-59 014680ec95
Remove a useless "public" keyword use in arguments.hpp 2021-10-03 19:13:48 +02:00
Username404 ff8bf6d1de
Remove a newline and use a multi-variable declaration for the local booleans in main.cpp 2021-10-03 15:28:24 +02:00
Username404 613e2f7019
Initialize the fileStream local variable instead of calling ifstream::open in filefuncs.cpp 2021-10-03 15:21:18 +02:00
Username404 5cea9251bd
Return a string_view instead of a string in the ArgumentAssignable::getValueFor function 2021-10-03 12:20:59 +02:00
Username404 57a01e6c32
Remove a redundant public section in Yerbacon::Exception and make the second constructor call the first one 2021-10-02 13:33:50 +02:00
Username404 f0aeda7c8a
Check for missing standard library definitions in Yerbacon.hpp 2021-10-02 12:59:33 +02:00
Username404-59 525aa0db88
Make a few members of ParseTree private, and make the internal methods protected 2021-10-01 18:15:59 +02:00
Username404 54aa4105b8
Append new lines to the lineinput string instead of doing concatenation in filefuncs.cpp 2021-09-29 18:33:47 +02:00
Username404 f227182713
Remove a condition that is useless because of 29a6eb3e 2021-09-29 18:18:37 +02:00
Username404 80118d29a7
Start iterating on arguments at 1 since argv[0] is the executable's path 2021-09-28 21:51:51 +02:00
Username404 8f60e7052f
Remove the (argc > 0) condition since argc is always 1 or higher 2021-09-28 21:42:13 +02:00
Username404 02e8de7243
Show an error when an invalid argument is provided 2021-09-28 21:34:22 +02:00
Username404-59 9a27c0c9c7
Don't use the public keyword in NamedIdentifier since it is a structure 2021-09-28 07:10:21 +02:00
Username404 c7981b9948
Throw an exception in filefuncs.cpp when a file is not found 2021-09-26 12:42:01 +02:00
Username404 43b4629a6d
Fix the pairs returned by the futures of the Units set 2021-09-26 12:38:33 +02:00
Username404 700ab109d2
Make a set of files directly instead of adding them to a vector in main.cpp 2021-09-26 12:37:46 +02:00
Username404 477337f96b
Remove a condition which has been useless since the e6334ad8 commit in main.cpp 2021-09-25 22:08:55 +02:00
Username404 c696b440e7
Fix a memory leak caused by the constness of the exceptionCause string in Yerbacon::Exception 2021-09-25 17:37:12 +02:00
Username404 659cdf4e80
Make tok::LexerException and Parser::ParserException type definitions instead of extending the Yerbacon::Exception class 2021-09-25 17:33:28 +02:00
Username404 facf460923
Improve the lambda used to return the compilation result in main.cpp 2021-09-25 17:26:45 +02:00
Username404 66e1926783
Use the max function in main.cpp 2021-09-25 17:03:55 +02:00
Username404 3cddc7907e
Decrement the line number before creating an EOF token 2021-09-25 16:28:03 +02:00
Username404 c6ee98e76b
Accept the use of "structure" as an alternative to the "class" keyword 2021-09-25 16:11:02 +02:00
Username404 471a588d37
Use a goto statement in the Argument::is function 2021-09-23 19:35:55 +02:00
Username404 2de8ce3e43
Make sure the "==" operator is inline in arguments.hpp 2021-09-23 19:03:44 +02:00
Username404-59 fa9dacc23c
Fix a memory leak when iterating on characters in lexer.cpp 2021-09-23 17:53:05 +02:00
Username404-59 6af6c04d5f
Remove the unlikely attribute from the '\r' case, and add an EOF token type 2021-09-23 13:21:47 +02:00
Username404 82520e63ba
Handle the "--version" argument when iterating on argc 2021-09-21 21:45:31 +02:00
Username404 6ce13be4ca
Don't append CMAKE_CXX_COMPILER_ARCHITECTURE_ID to CPACK_SYSTEM_NAME + CPACK_TOPLEVEL_TAG, and remove a few newlines in ParseComponents.hpp 2021-09-19 21:37:53 +02:00
Username404 1371457a1f
Reserve memory before adding elements to parse trees 2021-09-19 20:48:08 +02:00
Username404 beea9bfadf
Make const parse trees actually constant, fix formatting in Target.hpp and classes derived from Target 2021-09-19 20:45:57 +02:00
Username404 82d733af54
Edit the use of convertible_to in Parser.hpp 2021-09-18 16:34:01 +02:00
Username404 8cb72a9baa
Remove a useless condition in Parser.hpp 2021-09-18 16:26:29 +02:00
Username404 fefa7b05c7
Take an initializer_list instead of variadic arguments in the nextAre lambda function 2021-09-18 15:32:31 +02:00
Username404 500662f5c5
Add the isFinalDefine boolean to 1 in Parser.hpp 2021-09-15 20:05:23 +02:00
Username404 08a038cf82
Set the ParsingException cause to another string when no identifier is given to a class, and pass the component's line to the exception 2021-09-14 20:43:09 +02:00
Username404 95d6b2239a
Append characters directly instead of creating a new string in the default case of lexer.cpp 2021-09-14 20:22:42 +02:00
Username404 44e160ebf9
Don't throw an exception when "isTypeString" is false in lexer.cpp 2021-09-14 20:20:34 +02:00
Username404 02bde3b106
Make the "languages" array a constant variable 2021-09-13 18:24:01 +02:00
Username404 33ee011aed
Fix the findById() and findReferenceByName() methods in ParseComponents.hpp since the filter function doesn't actually exist 2021-09-12 16:45:30 +02:00
Username404 d9913d0c9f
Use a type definition in Target.hpp 2021-09-12 13:48:34 +02:00
Username404 2b84262ea0
Use std::filter and std::transform instead of the std::ranges library and make the destructor of the Target class virtual 2021-09-12 12:00:21 +02:00
Username404 e79a7415de
Add an overload to reuse the same characters for the two parameters of Target::stringInterpolation and use an escaped character sequence 2021-09-11 13:42:22 +02:00
Username404 26421597f2
Prohibit the use of --newlinesoff with targets that do not support putting a whole script on one line 2021-09-11 13:19:43 +02:00
Username404 96bd6bf708
Re-add the newlinesoff argument 2021-09-11 11:49:57 +02:00
Username404 bfa8f50ad9
Revert "Add a "SEPARATOR" token type"
This reverts commit 47478173
2021-09-11 11:35:22 +02:00
Username404 84b9f9de73
Add the [[unlikely]] attribute to the '\r' case in lexer.cpp 2021-09-10 22:20:41 +02:00
Username404 6de05633d9
Add a "SEPARATOR" token type 2021-09-10 22:15:05 +02:00
Username404 37a6c0e047
Remove the oldClosingBraceIsFar boolean in Target.hpp 2021-09-02 10:35:53 +02:00
Username404 76c8975e27
Use a reference in the Argument "==" operator, and move the currentArg variable of main.cpp into the loop used for arguments 2021-09-02 10:34:00 +02:00
Username404 d6642f9ae5
Make getId() a constexpr function and use arrow syntax to call it in Target.hpp instead of dereferencing a pointer 2021-09-02 10:08:10 +02:00
Username404 b5697bf0a8
Take the remaining characters of a string instead of taking none in a condition of the stringInterpolation() function from Target.hpp 2021-09-01 19:31:04 +02:00
Username404 afc59c7a22
Don't find occurrences when closing characters are not found in Target.hpp, make the interpolation strings static const variables and fix typos 2021-08-31 15:19:44 +02:00
Username404 bc2f6938e3
Use negation in the multiline boolean of Target.hpp 2021-08-31 14:47:13 +02:00
Username404 e92b3cf12f
Fix an extra space being added in the stringInterpolation() function of Target.hpp 2021-08-28 23:25:16 +02:00
Username404 c186f30eef
Merge the noMultiline boolean into multiline in Target.hpp 2021-08-28 11:14:08 +02:00
Username404 2dba7fbda6
Add experimental string transpilation with interpolation 2021-08-28 10:59:24 +02:00
Username404-59 1992e1d42b
Add transpilation of strings to lua-compatible ones, and fix a comment 2021-08-24 17:23:31 +02:00
Username404 5d4be1039d
Add a new variadic lambda in Parser.hpp to check the types of tokens 2021-08-23 14:58:46 +02:00
Username404 079d99e08a
Remove the parameter of Target.get(), add it to Target as a property and rename Target.get() to Target.on() 2021-08-23 12:49:22 +02:00
Username404 664a6a92be
Begin adding transpilation of basic elements 2021-08-22 23:57:18 +02:00
Username404 8c63f1ae8b
Capture fileName by reference since it is now one, and give a type to currentFuture 2021-08-20 10:41:09 +02:00
Username404-59 fdb8579941
Fix a typo from the previous commit 2021-08-20 01:42:43 +02:00
Username404-59 845794a922
Prevent the compilation output from being printed when printResult is false 2021-08-20 01:34:29 +02:00
Username404 729e04161f
Make fileName a reference in a loop of main.cpp, and use findReferencesById() instead of findById() in ParseComponents.hpp 2021-08-20 00:08:51 +02:00
Username404 2e9e063d71
Use smart pointers instead of raw pointers in ParseComponents.hpp, remove an unused dependency in main.cpp and capture fileName by value in main.cpp to avoid using its reference after the current scope 2021-08-19 23:55:55 +02:00