Start making generated parser
This commit is contained in:
0
ldedit/.gitignore → .gitignore
vendored
0
ldedit/.gitignore → .gitignore
vendored
14
ldtext/LDText.fs
Normal file
14
ldtext/LDText.fs
Normal file
@@ -0,0 +1,14 @@
|
||||
module LDText
|
||||
|
||||
module Ast =
|
||||
type Rung = Step list
|
||||
|
||||
and Instr = { Op: string; Args: Operand list }
|
||||
|
||||
and Step =
|
||||
| StepInstr of Instr
|
||||
| StepBranch of Step list
|
||||
|
||||
and Operand =
|
||||
| OperandHole
|
||||
| OperandTag of string
|
5
ldtext/Library.fs
Normal file
5
ldtext/Library.fs
Normal file
@@ -0,0 +1,5 @@
|
||||
namespace ldtext
|
||||
|
||||
module Say =
|
||||
let hello name =
|
||||
printfn "Hello %s" name
|
38
ldtext/Parser.fsy
Normal file
38
ldtext/Parser.fsy
Normal file
@@ -0,0 +1,38 @@
|
||||
%{
|
||||
open LDText.Ast
|
||||
// helper functions
|
||||
%}
|
||||
|
||||
// start token
|
||||
%start start
|
||||
|
||||
// tokens, used by lexer
|
||||
%token <string> IDENTIFIER
|
||||
%token LEFT_PAREN
|
||||
%token RIGHT_PAREN
|
||||
%token LEFT_BRACKET
|
||||
%token RIGHT_BRACKET
|
||||
%token COMMA
|
||||
%token SEMICOLON
|
||||
%token QUESTION_MARK
|
||||
%token EOF
|
||||
|
||||
// return type of parser, marked by start token
|
||||
%type <Rung option> rung
|
||||
|
||||
%%
|
||||
|
||||
start:
|
||||
| instr EOF { $1 }
|
||||
|
||||
instr:
|
||||
| IDENTIFIER LEFT_PAREN operands RIGHT_PAREN { StepInstr { Op = $1; Args = [ $3 ] } }
|
||||
|
||||
operands:
|
||||
| { }
|
||||
| operand operands { $1; $2 }
|
||||
|
||||
operand:
|
||||
| IDENTIFIER { OperandTag $1 }
|
||||
| QUESTION_MARK { OperandHole }
|
||||
%%
|
20
ldtext/ldtext.fsproj
Normal file
20
ldtext/ldtext.fsproj
Normal file
@@ -0,0 +1,20 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup><Compile Include="LDText.fs" />
|
||||
<Compile Include="LDText.fs" />
|
||||
<FsYacc Include="Parser.fsy">
|
||||
<OtherFlags>--module Parser</OtherFlags>
|
||||
</FsYacc>
|
||||
<Compile Include="Library.fs" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FsLexYacc" Version="11.3.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
238
reference data/simple_program.L5X
Normal file
238
reference data/simple_program.L5X
Normal file
@@ -0,0 +1,238 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<RSLogix5000Content SchemaRevision="1.0" SoftwareRevision="34.04" TargetName="simple_program" TargetType="Controller" ContainsContext="false" ExportDate="Mon Sep 01 15:15:07 2025" ExportOptions="NoRawData L5KData DecoratedData ForceProtectedEncoding AllProjDocTrans">
|
||||
<Controller Use="Target" Name="simple_program" ProcessorType="1769-L18ER-BB1B" MajorRev="34" MinorRev="11" TimeSlice="20" ShareUnusedTimeSlice="1" ProjectCreationDate="Fri Aug 15 14:23:58 2025" LastModifiedDate="Mon Sep 01 15:13:39 2025" SFCExecutionControl="CurrentActive" SFCRestartPosition="MostRecent"
|
||||
SFCLastScan="DontScan" ProjectSN="16#0000_0000" MatchProjectToController="false" CanUseRPIFromProducer="false" InhibitAutomaticFirmwareUpdate="0" PassThroughConfiguration="EnabledWithAppend" DownloadProjectDocumentationAndExtendedProperties="true" DownloadProjectCustomProperties="true" ReportMinorOverflow="false">
|
||||
<RedundancyInfo Enabled="false" KeepTestEditsOnSwitchOver="false" IOMemoryPadPercentage="90" DataTablePadPercentage="50"/>
|
||||
<Security Code="0" ChangesToDetect="16#ffff_ffff_ffff_ffff"/>
|
||||
<SafetyInfo/>
|
||||
<DataTypes/>
|
||||
<Modules>
|
||||
<Module Name="Local" CatalogNumber="1769-L18ER-BB1B" Vendor="1" ProductType="14" ProductCode="154" Major="34" Minor="11" ParentModule="Local" ParentModPortId="1" Inhibited="false" MajorFault="true"
|
||||
>
|
||||
<EKey State="Disabled"/>
|
||||
<Ports>
|
||||
<Port Id="1" Address="0" Type="PointIO" Upstream="false">
|
||||
<Bus Size="2"/>
|
||||
</Port>
|
||||
<Port Id="2" Type="Ethernet" Upstream="false">
|
||||
<Bus/>
|
||||
</Port>
|
||||
</Ports>
|
||||
</Module>
|
||||
<Module Name="Discrete_IO" CatalogNumber="Embedded" Vendor="1" ProductType="7" ProductCode="1140" Major="34" Minor="11" ParentModule="Local" ParentModPortId="1" Inhibited="false" MajorFault="true"
|
||||
>
|
||||
<EKey State="CompatibleModule"/>
|
||||
<Ports>
|
||||
<Port Id="1" Address="1" Type="PointIO" Upstream="true"/>
|
||||
</Ports>
|
||||
<Communications>
|
||||
<ConfigTag ConfigSize="80" ExternalAccess="Read/Write">
|
||||
<Data Format="L5K">
|
||||
<![CDATA[[84,113,1,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000
|
||||
,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,0,0,0,0,0,0]]]>
|
||||
</Data>
|
||||
<Data Format="Decorated">
|
||||
<Structure DataType="AB:Embedded_DiscreteIO:C:0">
|
||||
<DataValueMember Name="Pt00FilterOffOn" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt00FilterOnOff" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt01FilterOffOn" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt01FilterOnOff" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt02FilterOffOn" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt02FilterOnOff" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt03FilterOffOn" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt03FilterOnOff" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt04FilterOffOn" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt04FilterOnOff" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt05FilterOffOn" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt05FilterOnOff" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt06FilterOffOn" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt06FilterOnOff" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt07FilterOffOn" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt07FilterOnOff" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt08FilterOffOn" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt08FilterOnOff" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt09FilterOffOn" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt09FilterOnOff" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt10FilterOffOn" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt10FilterOnOff" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt11FilterOffOn" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt11FilterOnOff" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt12FilterOffOn" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt12FilterOnOff" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt13FilterOffOn" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt13FilterOnOff" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt14FilterOffOn" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt14FilterOnOff" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt15FilterOffOn" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="Pt15FilterOnOff" DataType="INT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="FaultMode" DataType="INT" Radix="Binary" Value="2#0000_0000_0000_0000"/>
|
||||
<DataValueMember Name="FaultValue" DataType="INT" Radix="Binary" Value="2#0000_0000_0000_0000"/>
|
||||
<DataValueMember Name="ProgMode" DataType="INT" Radix="Binary" Value="2#0000_0000_0000_0000"/>
|
||||
<DataValueMember Name="ProgValue" DataType="INT" Radix="Binary" Value="2#0000_0000_0000_0000"/>
|
||||
<DataValueMember Name="COSOnOffEn" DataType="INT" Radix="Binary" Value="2#0000_0000_0000_0000"/>
|
||||
<DataValueMember Name="COSOffOnEn" DataType="INT" Radix="Binary" Value="2#0000_0000_0000_0000"/>
|
||||
</Structure>
|
||||
</Data>
|
||||
</ConfigTag>
|
||||
<Connections>
|
||||
<Connection Name="Data" RPI="20000" Type="Output" EventID="0" ProgrammaticallySendEventTrigger="false" Unicast="false">
|
||||
<InputTag ExternalAccess="Read/Write">
|
||||
<Data Format="Decorated">
|
||||
<Structure DataType="AB:Embedded_DiscreteIO:I:0">
|
||||
<DataValueMember Name="Fault" DataType="DINT" Radix="Binary" Value="2#0000_0000_0000_0000_0000_0000_0000_0000"/>
|
||||
<DataValueMember Name="Data" DataType="INT" Radix="Binary" Value="2#0000_0000_0000_0000"/>
|
||||
</Structure>
|
||||
</Data>
|
||||
</InputTag>
|
||||
<OutputTag ExternalAccess="Read/Write">
|
||||
<Data Format="L5K">
|
||||
<![CDATA[[0]]]>
|
||||
</Data>
|
||||
<Data Format="Decorated">
|
||||
<Structure DataType="AB:Embedded_DiscreteIO:O:0">
|
||||
<DataValueMember Name="Data" DataType="INT" Radix="Binary" Value="2#0000_0000_0000_0000"/>
|
||||
</Structure>
|
||||
</Data>
|
||||
</OutputTag>
|
||||
</Connection>
|
||||
</Connections>
|
||||
</Communications>
|
||||
<ExtendedProperties>
|
||||
<public>
|
||||
<ConfigID>100</ConfigID>
|
||||
<CatNum>Embedded</CatNum>
|
||||
</public>
|
||||
</ExtendedProperties>
|
||||
</Module>
|
||||
</Modules>
|
||||
<AddOnInstructionDefinitions>
|
||||
<AddOnInstructionDefinition Name="_a_b_c" Revision="1.0" ExecutePrescan="false" ExecutePostscan="false" ExecuteEnableInFalse="false" CreatedDate="2025-08-23T15:45:52.110Z" CreatedBy="REYNOLDS\Brandon Dyck" EditedDate="2025-08-23T15:45:52.140Z" EditedBy="REYNOLDS\Brandon Dyck" SoftwareRevision="v34.04">
|
||||
<Parameters>
|
||||
<Parameter Name="EnableIn" TagType="Base" DataType="BOOL" Usage="Input" Radix="Decimal" Required="false" Visible="false" ExternalAccess="Read Only">
|
||||
<Description>
|
||||
<![CDATA[Enable Input - System Defined Parameter]]>
|
||||
</Description>
|
||||
</Parameter>
|
||||
<Parameter Name="EnableOut" TagType="Base" DataType="BOOL" Usage="Output" Radix="Decimal" Required="false" Visible="false" ExternalAccess="Read Only">
|
||||
<Description>
|
||||
<![CDATA[Enable Output - System Defined Parameter]]>
|
||||
</Description>
|
||||
</Parameter>
|
||||
</Parameters>
|
||||
<LocalTags/>
|
||||
<Routines>
|
||||
<Routine Name="Logic" Type="RLL"/>
|
||||
</Routines>
|
||||
</AddOnInstructionDefinition>
|
||||
</AddOnInstructionDefinitions>
|
||||
<Tags/>
|
||||
<Programs>
|
||||
<Program Name="MainProgram" TestEdits="false" MainRoutineName="MainRoutine" Disabled="false" UseAsFolder="false">
|
||||
<Tags>
|
||||
<Tag Name="ADD_01" TagType="Base" DataType="FBD_MATH" Constant="false" ExternalAccess="Read/Write">
|
||||
<Data Format="L5K">
|
||||
<![CDATA[[1,0.00000000e+000,0.00000000e+000,0.00000000e+000]]]>
|
||||
</Data>
|
||||
<Data Format="Decorated">
|
||||
<Structure DataType="FBD_MATH">
|
||||
<DataValueMember Name="EnableIn" DataType="BOOL" Value="1"/>
|
||||
<DataValueMember Name="SourceA" DataType="REAL" Radix="Float" Value="0.0"/>
|
||||
<DataValueMember Name="SourceB" DataType="REAL" Radix="Float" Value="0.0"/>
|
||||
<DataValueMember Name="EnableOut" DataType="BOOL" Value="0"/>
|
||||
<DataValueMember Name="Dest" DataType="REAL" Radix="Float" Value="0.0"/>
|
||||
</Structure>
|
||||
</Data>
|
||||
</Tag>
|
||||
<Tag Name="MUL_01" TagType="Base" DataType="FBD_MATH" Constant="false" ExternalAccess="Read/Write">
|
||||
<Data Format="L5K">
|
||||
<![CDATA[[1,0.00000000e+000,0.00000000e+000,0.00000000e+000]]]>
|
||||
</Data>
|
||||
<Data Format="Decorated">
|
||||
<Structure DataType="FBD_MATH">
|
||||
<DataValueMember Name="EnableIn" DataType="BOOL" Value="1"/>
|
||||
<DataValueMember Name="SourceA" DataType="REAL" Radix="Float" Value="0.0"/>
|
||||
<DataValueMember Name="SourceB" DataType="REAL" Radix="Float" Value="0.0"/>
|
||||
<DataValueMember Name="EnableOut" DataType="BOOL" Value="0"/>
|
||||
<DataValueMember Name="Dest" DataType="REAL" Radix="Float" Value="0.0"/>
|
||||
</Structure>
|
||||
</Data>
|
||||
</Tag>
|
||||
<Tag Name="MyTimer" TagType="Base" DataType="TIMER" Constant="false" ExternalAccess="Read/Write">
|
||||
<Data Format="L5K">
|
||||
<![CDATA[[0,1000,0]]]>
|
||||
</Data>
|
||||
<Data Format="Decorated">
|
||||
<Structure DataType="TIMER">
|
||||
<DataValueMember Name="PRE" DataType="DINT" Radix="Decimal" Value="1000"/>
|
||||
<DataValueMember Name="ACC" DataType="DINT" Radix="Decimal" Value="0"/>
|
||||
<DataValueMember Name="EN" DataType="BOOL" Value="0"/>
|
||||
<DataValueMember Name="TT" DataType="BOOL" Value="0"/>
|
||||
<DataValueMember Name="DN" DataType="BOOL" Value="0"/>
|
||||
</Structure>
|
||||
</Data>
|
||||
</Tag>
|
||||
<Tag Name="_a_b_c_01" TagType="Base" DataType="_a_b_c" Constant="false" ExternalAccess="Read/Write">
|
||||
<Data Format="L5K">
|
||||
<![CDATA[[1]]]>
|
||||
</Data>
|
||||
<Data Format="Decorated">
|
||||
<Structure DataType="_a_b_c">
|
||||
<DataValueMember Name="EnableIn" DataType="BOOL" Value="1"/>
|
||||
<DataValueMember Name="EnableOut" DataType="BOOL" Value="0"/>
|
||||
</Structure>
|
||||
</Data>
|
||||
</Tag>
|
||||
</Tags>
|
||||
<Routines>
|
||||
<Routine Name="fbdtest" Type="FBD">
|
||||
<FBDContent SheetSize="B - 11 x 17 in" SheetOrientation="Landscape">
|
||||
<Sheet Number="1">
|
||||
<IRef ID="0" X="200" Y="60" Operand="Local:1:I.Data.0" HideDesc="false"/>
|
||||
<ORef ID="1" X="510" Y="60" Operand="Local:1:O.Data.0" HideDesc="false"/>
|
||||
<ORef ID="2" X="510" Y="100" Operand="Local:1:O.Data.1" HideDesc="false"/>
|
||||
<Block Type="ADD" ID="3" X="380" Y="160" Operand="ADD_01" VisiblePins="SourceA SourceB Dest" HideDesc="false"/>
|
||||
<Block Type="MUL" ID="4" X="700" Y="160" Operand="MUL_01" VisiblePins="SourceA SourceB Dest" HideDesc="false"/>
|
||||
<AddOnInstruction Name="_a_b_c" ID="5" X="450" Y="360" Operand="_a_b_c_01" VisiblePins=""/>
|
||||
<Wire FromID="0" ToID="1"/>
|
||||
<Wire FromID="0" ToID="2"/>
|
||||
<Wire FromID="3" FromParam="Dest" ToID="4" ToParam="SourceA"/>
|
||||
<Wire FromID="4" FromParam="Dest" ToID="3" ToParam="SourceB"/>
|
||||
</Sheet>
|
||||
</FBDContent>
|
||||
</Routine>
|
||||
<Routine Name="MainRoutine" Type="RLL">
|
||||
<RLLContent>
|
||||
<Rung Number="0" Type="N">
|
||||
<Text>
|
||||
<![CDATA[XIC(Local:1:I.Data.0)OTE(Local:1:O.Data.0);]]>
|
||||
</Text>
|
||||
</Rung>
|
||||
<Rung Number="1" Type="N">
|
||||
<Text>
|
||||
<![CDATA[[XIO(Local:1:I.Data.0) TON(MyTimer,?,?) ,XIC(Local:1:I.Data.1) XIO(Local:1:I.Data.2) ]OTE(Local:1:O.Data.1);]]>
|
||||
</Text>
|
||||
</Rung>
|
||||
</RLLContent>
|
||||
</Routine>
|
||||
</Routines>
|
||||
</Program>
|
||||
</Programs>
|
||||
<Tasks>
|
||||
<Task Name="MainTask" Type="CONTINUOUS" Priority="10" Watchdog="500" DisableUpdateOutputs="false" InhibitTask="false">
|
||||
<ScheduledPrograms>
|
||||
<ScheduledProgram Name="MainProgram"/>
|
||||
</ScheduledPrograms>
|
||||
</Task>
|
||||
</Tasks>
|
||||
<CST MasterID="0"/>
|
||||
<WallClockTime LocalTimeAdjustment="0" TimeZone="0"/>
|
||||
<Trends/>
|
||||
<DataLogs/>
|
||||
<TimeSynchronize Priority1="128" Priority2="128" PTPEnable="false"/>
|
||||
<EthernetPorts>
|
||||
<EthernetPort Port="1" Label="1" PortEnabled="true"/>
|
||||
<EthernetPort Port="2" Label="2" PortEnabled="true"/>
|
||||
</EthernetPorts>
|
||||
<EthernetNetwork SupervisorModeEnabled="false" SupervisorPrecedence="0" BeaconInterval="400" BeaconTimeout="1960" VLANID="0"/>
|
||||
</Controller>
|
||||
</RSLogix5000Content>
|
Reference in New Issue
Block a user