JdtBasic 1.0.3
dotnet add package JdtBasic --version 1.0.3
NuGet\Install-Package JdtBasic -Version 1.0.3
<PackageReference Include="JdtBasic" Version="1.0.3" />
paket add JdtBasic --version 1.0.3
#r "nuget: JdtBasic, 1.0.3"
// Install JdtBasic as a Cake Addin #addin nuget:?package=JdtBasic&version=1.0.3 // Install JdtBasic as a Cake Tool #tool nuget:?package=JdtBasic&version=1.0.3
JdtBasic
- <b>JdtBasic은 자동화 설비 시퀀스를 쉽게 제어하기 위해 설계된 BASIC 변형 문법의 인터프리터 입니다.</b>
- C#과 손쉬운 연동으로 유지보수가 용이하게 함을 목표로 설계 됩니다.
목차
이 가이드는 JdtBasic 언어의 주요 기능을 설명합니다. 실제 사용 시 더 자세한 내용이나 추가적인 기능이 있을 수 있으므로, 필요에 따라 추가 문서를 참조하시기 바랍니다.
주석
- 단일 주석은
//
로 사용합니다. - 블록 주석은
/*
*/
로 감싸서 사용합니다.
// 안녕하세요. (단일 주석)
/* 반갑습니다.
이것은 블록 주석입니다. */
함수
- 함수는
[[<함수이름>]]
으로 시작하여[[END]]
로 함수의 끝을 명확히 구분해야 합니다. - 함수는 파라미터를 받을 수 있으며, 괄호 안에 정의합니다.
- 다른 함수를 호출할 때는
CALL <함수이름>
을 사용하거나 또는,<함수이름>(<파라메터>)
를 사용합니다. - 함수의 이름은 언더바 2개(
__
)를 앞 뒤로 감싸는 걸권장
합니다.
[[__main__]]
print("Hello World")
__test__()
[[end]]
[[__test__]]
print("이것은 TEST 함수입니다.")
[[end]]
[[GREET(name)]]
print("안녕하세요, {name}님!")
[[END]]
함수 호출 규칙
- 함수 호출은 C 스타일로 사용 가능합니다.
// C Style
print("Hello World")
// 반환값을 받지 않는 함수 호출 방법 (두가지 case 전부 지원)
call __greet__ // BASIC style
__greet__() // C Style
// 반환값을 받는 함수 호출 방법 (한가지만 지원)
Dim result = functionName(arg1, arg2)
문자열
- 문자열은
""
와'
로 둘러싸서 사용 가능합니다. - 문자열 내에서 변수를 출력하려면
{<변수 이름>}
으로 중괄호를 감싸서 사용합니다.
[[__main__]]
Dim name = "홍길동"
print('Hello World') // 또는 "Hello World"
print("안녕하세요, {name}님!")
[[end]]
변수 선언
- 변수 선언은
DIM
혹은VAR
키워드를 사용합니다.
[[__main__]]
Dim localVar = "지역 변수"
Dim A = "Hello World" // 문자열
var B = 123 // 정수형
var C = 0.23 // 실수형
var D = "A 변수 값은 = {A}, B 변수 값은 = {B}, C 변수 값은 = {C}"
print(D)
[[end]]
데이터 타입
숫자
- 정수와 실수를 지원합니다.
- 16진수는
0x
접두사를 사용합니다.
Dim intNum = 42
Dim floatNum = 3.14
Dim hexNum = 0xFF
불리언
TRUE
(또는ON
)와FALSE
(또는OFF
)를 사용합니다.
Dim isTrue = TRUE // 혹은 ON
Dim isFalse = FALSE // 혹은 OFF
배열
- 대괄호([])를 사용하여 배열을 정의합니다.
Dim myArray = [1, 2, 3, 4, 5]
딕셔너리
- 중괄호({})를 사용하여 딕셔너리를 정의합니다.
Dim myDict = {"key1": "value1", "key2": 42}
연산자
- 산술 연산자:
+
,-
,*
,/
- 비교 연산자:
<
,>
,<=
,>=
,==
(같음),!=
(같지 않음) - 논리 연산자:
&&
,||
- 대입 연산자:
=
제어 구조
조건문 (IF)
Dim A = 10
if A == 10 Then
print("A는 10입니다.")
ElseIf A == 20 Then
print("A는 20입니다.")
Else
print("A는 10도 20도 아닙니다.")
end if
반복문 (FOR)
// 일반적인 FOR문 사용
for N = 0 TO 10
print("N의 값 = {N}")
next
// STEP을 이용한 증감(가감) 처리
for N = 0 to 10 step 2
print("N의 값 = {N}") // N은 2씩 증가
next
// 암시적 변수를 사용한 FOR문 (변수를 사용하지 않고 반복이 필요할 때)
for 0 to 10
print('Hellow World')
next
// 무한 루프
for
print("infinity loop")
next
// FOR EACH 문 (배열이나 딕셔너리 순회)
var arr = [1, 2, 3, 4, 5]
for each item In arr
print("항목: {item}")
next
// 딕셔너리 순회
var dict = {"a": 1, "b": 2, "c": 3}
for each key, value In dict
print("키: {key}, 값: {value}")
next
EXIT 문
FOR 루프를 조기에 종료할 때 사용합니다.
for i = 1 To 10
if i == 5 then
Exit for
end if
next
내장 함수
JdtBasic은 다양한 내장 함수를 제공하여 문자열 처리, 수학 연산, 타입 변환 등의 작업을 수행할 수 있습니다. 주요 내장 함수들은 다음과 같습니다:
출력 및 시간 지연
PRINT
: 콘솔에 출력합니다.SLEEP(millisecond)
: 프로그램 실행을millisecond
만큼 일시 중지합니다.
print("Hello, World!")
Sleep(1000) // 1초 대기
배열 및 리스트 조작
RANGE(start, end, <step>)
: start부터 end까지의 배열 원소를 생성합니다.LEN(collection)
: 문자열, 리스트, 또는 딕셔너리의 길이를 반환합니다.
Dim rangeArr = range(0, 10)
print(rangeArr) // 출력: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(len(rangeArr)) // 출력: 10
문자열 처리
TRIM(string)
: 문자열의 앞뒤 공백을 제거합니다.SPLIT(string, delimiter)
: 문자열을 구분자를 기준으로 나누어 리스트로 반환합니다.REPLACE(string, oldValue, newValue)
: 문자열에서 특정 부분을 다른 문자열로 대체합니다.
Dim str = " Hello, World! "
print(Trim(str)) // 출력: "Hello, World!"
Dim parts = Split("apple,banana,cherry", ",")
print(parts) // 출력: ["apple", "banana", "cherry"]
print(Replace("Hello, World!", "World", "Universe")) // 출력: "Hello, Universe!"
수학 함수
ABS(number)
: 숫자의 절대값을 반환합니다.ROUND(number, decimals)
: 숫자를 지정된 소수점 자리수로 반올림합니다.POW(base, exponent)
: 거듭제곱을 계산합니다.
print(abs(-5)) // 출력: 5
print(round(3.14159, 2)) // 출력: 3.14
print(pow(2, 3)) // 출력: 8
타입 변환 및 검사
STR(value)
: 값을 문자열로 변환합니다.INT(value)
: 값을 정수로 변환합니다.FLOAT(value)
: 값을 실수로 변환합니다.TYPE(value)
: 값의 타입을 문자열로 반환합니다.
print(str(123)) // 출력: "123"
print(int("456")) // 출력: 456
print(float("3.14")) // 출력: 3.14
print(type(42)) // 출력: "int"
리스트 및 논리 연산
SUM(list)
: 리스트의 모든 요소의 합을 계산합니다.MAX(list)
: 리스트에서 최댓값을 찾습니다.MIN(list)
: 리스트에서 최솟값을 찾습니다.SORT(list)
: 리스트를 정렬합니다.REVERSE(list or string)
: 리스트나 문자열을 뒤집습니다.INDEXOF(list or string, element)
: 리스트나 문자열에서 요소의 인덱스를 찾습니다.ALL(list)
: 리스트의 모든 요소가 참인지 확인합니다.ANY(list)
: 리스트의 요소 중 하나라도 참인지 확인합니다.
Dim numbers = [1, 2, 3, 4, 5]
print(sum(numbers)) // 출력: 15
print(max(numbers)) // 출력: 5
print(min(numbers)) // 출력: 1
print(sort([3, 1, 4, 1, 5, 9, 2])) // 출력: [1, 1, 2, 3, 4, 5, 9]
print(reverse("Hello")) // 출력: "olleH"
print(indexOf(numbers, 3)) // 출력: 2
print(all([TRUE, TRUE, FALSE])) // 출력: FALSE
print(any([FALSE, TRUE, FALSE])) // 출력: TRUE
기타
HEX(number)
: 숫자를 16진수 문자열로 변환합니다.ASCII(character)
: 문자의 ASCII 코드를 반환합니다.CHR(asciiCode)
: ASCII 코드에 해당하는 문자를 반환합니다.
print(hex(255)) // 출력: "0xff"
print(ascii("A")) // 출력: 65
print(chr(65)) // 출력: "A"
C# 연동
JdtBasic은 C#과 쉽게 연동할 수 있도록 설계되었습니다. 이를 통해 C#의 강력한 기능을 JdtBasic 스크립트 내에서 활용할 수 있으며, 반대로 C#에서 JdtBasic 스크립트의 함수를 호출할 수도 있습니다.
이러한 C# 연동 기능을 통해 JdtBasic은 기존 C# 프로젝트에 쉽게 통합될 수 있으며, 동적인 스크립팅 기능을 제공할 수 있습니다.
외부 함수 정의 및 등록
C#에서 JdtBasic 스크립트에서 사용할 수 있는 외부 함수를 정의할 수 있습니다. 이를 위해 IExternalFunction
인터페이스를 구현합니다.
public class ExternalFunctionTest : IFunction
{
public string Name => "ExternalTest";
public IVariable? Execute(IScriptThread thread, params object[] args)
{
Console.WriteLine("Test external function~~!!");
var x = (int)args[0];
var y = (int)args[1];
return new Variable(x * y);
}
}
이렇게 정의한 외부 함수는 Interpreter
클래스의 Import
메서드를 통해 등록할 수 있습니다:
interpreter.Import(new ExternalFunctionTest());
또한 이렇게 정의한 C#의 클래스는 JdtBasic의 함수 내부에서 실행이 가능합니다.
[[__main__]]
Dim a = ExternalTest(2, 2) // 위에서 함수 이름을 ExternalTest로 지정했음
print('{a}') // 출력은 2 * 2가 계산된 4가 출력됩니다.
[[end]]
스크립트 컴파일 및 실행
C#에서 JdtBasic 스크립트를 컴파일하고 실행하는 과정은 다음과 같습니다:
string script = @"
[[__main__]]
Dim a = __add__(10, 20)
print('{a}')
[[end]]
[[__add__(x, y)]]
return x + y
[[end]]
";
interpreter.Compile(script);
interpreter.Call("MAIN");
Compile
메서드를 사용하여 스크립트를 파싱하고 AST(Abstract Syntax Tree)를 생성합니다.Call
메서드를 사용하여 스크립트 내의 특정 함수(여기서는 "MAIN")를 실행합니다.
C#에서 JdtBasic 함수 호출
C#에서 JdtBasic 스크립트에 정의된 함수를 직접 호출할 수 있습니다:
object result = interpreter.Call("ADD", 10, 20);
Console.WriteLine(result); // 출력: 30
Call
메서드는 함수 이름과 파라미터를 받아 해당 함수를 실행하고 결과를 반환합니다.
주의사항
파라미터 개수: C#에서 JdtBasic 함수를 호출할 때, 파라미터 개수가 일치해야 합니다. 그렇지 않으면 오류가 발생합니다.
변수 스코프: JdtBasic 함수 실행 시 로컬 변수 스코프가 생성되고, 함수 종료 시 해제됩니다.
반환 값 처리: JdtBasic 함수에서
RETURN
문을 사용하면, 그 값이 C#으로 반환됩니다.오류 처리: 스크립트 파싱 중 오류가 발생하면 콘솔에 오류 메시지가 출력됩니다.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net8.0
- Irony.Interpreter (>= 1.5.3)
- JdtBasic.Abstraction (>= 1.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.